You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:07:27