简介
上节我们整理了代码、修复了潜藏的问题。使得代码更易于管理维护。
目标
实现对获取的内存段信息解析,按下回车键后依次显示内存段信息。
1.kernel.h增加内存段描述信息,给C语言模块使用
//内存分布块描述信息
typedef struct _AddrRangeDes {
unsigned int addrLow;
unsigned int addrHigh;
unsigned int lenLow;
unsigned int lenHigh;
unsigned int type;
}AddrRangeDes;
高4字节addrHigh和低4字节addrLow共同组成64位内存地址
高4字节lenHigh和低4字节lenLow共同组成64位内存长度信息
4字节type字段描述内存使用情况, type 等于1,表示当前内存块可以被内核使用。type等于2,表示当前内存块已经被占用,系统内核绝对不能使用,type等于3,保留给未来使用,内核也不能用当前内存块。
2.os.c编写内存显示函数
void showMemInfo(AddrRangeDes *memDes,int page){
//重新绘制桌面背景,清除显存中无用信息
fillRect(0,20,_vram.screenW,_vram.screenH-30, COL8_008484);
//一行显示32个字符
_charCount = 32;
//如果换成static char *msg 时objconv 反汇编后nasm 编译时会出错,
//建议使用数组的方式定义
static char msg[] = "page:";
char *txt = msg;
int len = 0;
for(int i=0;txt[i] != 0;i++){
_tempArr[i] = txt[i];
len++;
}
short temp = char2HexStr(page);
_tempArr[len] = '0';
_tempArr[len+1] = 'x';
_tempArr[len+2] = ((char *)&temp)[0];
_tempArr[len+3] = ((char *)&temp)[1];
showString(_tempArr,len+4,true);
_charCount = 64;
static char add[] = &