.\icu

Blog of @megakite.


January 1, 0001

# 为内核支持函数调用

这里的linker script似乎把栈空间放在了.data.bss中间:

.bss: {
	*(.bss.stack)
	sbss = .;
	// ...
}
ebss = .;

不知是何用意,不过理论上似乎并不影响程序执行。

# 练习

# 课后练习

3 $time是一个只读寄存器,故不能采用csrw time, x0的方法重置,只能分两拨读取偏移量(分别记作startcurrent)作比较;此外,我的这种实现精度应该也是有问题的。

# 实验练习

Log等级如果用C实现,会有一个比较漂亮的写法:

enum log_mask_e: uint8_t {
	ERROR = 0x01,
	WARN = 0x02,
	INFO = 0x04,
	DEBUG = 0x08,
	TRACE = 0x10,
}

static mask_to_level(enum log_mask_e mask)
{
	uint8_t level = 0;
	
	switch (mask) {
	case TRACE: level | TRACE;
	case DEBUG: level | DEBUG;
	case INFO:  level | INFO;
	case WARN:  level | WARN;
	case ERROR: level | ERROR;
	default:
	}

	return level;
}

可惜Rust不支持fall-through,那还是算了。其实就这点来看,bit flags在Rust这里的应用大概只剩下省空间了。