OS开发:双缓冲功能触发系统重启问题求助
双缓冲实现导致系统不断重启问题
我正在开发一款简易操作系统,当前在实现双缓冲功能。定义了两个屏幕大小的数组,通过screen_swap函数将当前使用的缓冲复制到显存地址0xA0000,随后交换当前缓冲;clear_screen函数用于清空当前缓冲并设置为指定颜色。
screen.c 代码
static u8 *BUFFER = (u8*) 0xA0000; u8 buffers[2][SCREEN_SIZE]; u8 current_buffer = 0; #define CURRENT (buffers[current_buffer]) #define SWAP() (current_buffer = 1 - current_buffer) void screen_swap(){ memcpy(BUFFER, CURRENT, SCREEN_SIZE); SWAP(); } void clear_screen(u8 color){ // 将屏幕内存全部设置为单一颜色 memset(&CURRENT, color, SCREEN_SIZE); }
memory.c 代码
void memset(void* src, u8 val, u32 len){ u8* ptr = (u8*)src; while(len--){ *ptr++ = val; } } void* memcpy(void* dst, void* src, u32 len){ u8 *d = (u8*)dst; const u8 *s = (const u8*)src; while (len-- > 0){ *d++ = *s++; } return dst; }
当调用如下代码时,系统会不断重启:
clear_screen(COLOR(0,0,255)); screen_swap();
内容的提问来源于stack exchange,提问作者neta cohen
相关产品推荐
相关产品推荐

