-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
测试环境
代码仓库:nes测试
- nes:您的代码实现
- vnes:正点原子的实现
-
MCU: GD32F470 设置主频 168M
-
屏幕 SPI LCD ,已修改底层使用双 buf 缓冲 DMA 异步刷新,修改 nes 结构体成员 nes->nes_draw_data 为指针形式,每次循环开始获取 lcd 的buf
- 刷新屏幕确认不会消耗时间,测试过注释掉刷新操作周期消耗时间基本一致
int nes_get_framebuffer(nes_t *nes) { struct rt_device_graphic_info info; rt_device_control(_lcd_device, RTGRAPHIC_CTRL_GET_INFO, &info); nes->nes_draw_data = info.framebuffer; return 0; }
int nes_draw(int x1, int y1, int x2, int y2, nes_color_t* color_data){ struct rt_device_rect_info rect_info; rect_info.x = x1; rect_info.y = y1; rect_info.width = x2 - x1 + 1; rect_info.height = y2 - y1 + 1; rt_device_control(_lcd_device, RTGRAPHIC_CTRL_RECT_UPDATE, &rect_info); return 0; }
测试结果
- 使用您的 C 语言模拟器每个循环的逻辑时间需要50ms
- 我又移植了正点原子的nes模拟器,他最大的周期也是50左右,但是他下面的两次循环是 2ms。
- 您的和正点原子都有跳帧,我分析了您的源码,您代码中跳帧只是不刷新屏幕而已,正点原子的我看他那个宏定义也只是在屏幕刷新用到了,但是不知道他是如何后面两次循环只用很短时间的,大佬您方便的话能否研究下。
您的 nes 模拟器日志
正点原子 nes 模拟器日志
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels



