接上篇:F1C100S玩游戏系列-FC红白机Nes模拟器(一)-移植InfoNes到BoloRTT工程,带Audio驱动,支持声音
先上工程源码链接
https://github.com/VeiLiang/BoloRTT
关于本次移植的模拟器
这个模拟器最早应该是正点原子网友ye781205看到PocketNester,然后想着跑到stm32f1上,把cpu模拟代码改写成汇编,然后跑起来,还带声音模拟,声音比InfoNes好很多。最后正点原子也完善了对应的mapper,使其可以运行更多的游戏。感谢原子哥,感谢ye781205大佬,使得stm32f1也能运行nes模拟,而且速度非常流畅
移植需要注意的地方
汇编部分:
原工程用的编译器是mdk的armcc,所以汇编的格式是armcc格式的汇编。我们移植过来的时候不能直接编译,需要经过较多需要修改的地方:
1.宏定义 MACRO MEND需要修改成.macro .endm
举例
MACRO
fetch $count ;//提取操作码 ;$标号 宏名 $参数1,$参数2,...
;//---------------------------------------------------------------------
ldr r0,clocksh ;//处理apu需要的时钟数
add r0,r0,#$count
str r0,clocksh
ldr r1,opz ;//获取代码跳转表地址
;//-------------------------------------------------------------------------
subs cycles,cycles,#$count*256;//CYCLE=256 ;// 3*256 正数或0就执行下2条指令
ldrplb r0,[m6502_pc],#1 ; //从存储器中加载字节到一个寄存器中 r0=操作码
; ldrpl pc,[m6502_optbl,r0,lsl#2] ;//r10 ********r0=r0x4***运行代码的地址**************************************
ldrpl pc,[r1,r0,lsl#2]
ldr pc,nexttimeout
MEND
需要修改成
.macro fetch count
//提取操作码 //$标号 宏名 $参数1,$参数2,...
//---------------------------------------------------------------------
ldr r0,clocksh //处理apu需要的时钟数
add r0,r0,#\count
str r0,clocksh
ldr r1,opz //获取代码跳转表地址
//-------------------------------------------------------------------------
subs cycles,cycles,#\count*256 //CYCLE=256 //// 3*256 正数或0就执行下2条指令
ldrplb r0,[m6502_pc],#1 //从存储器中加载字节到一个寄存器中 r0=操作码
// ldrpl pc,[m6502_optbl,r0,lsl#2] //r10 ********r0=r0x4***运行代码的地址**************************************
ldrpl pc,[r1,r0,lsl#2]
ldr pc,nexttimeout
.endm
2.EQU 需要改成.equ
举例
C EQU 0x01 ;//6502 flags 6502标志
Z EQU 0x02
I EQU 0x04
D EQU 0x08
B EQU 0x10 ;//(allways 1 except when IRQ pushes it)IRQ外部中断
R EQU 0x20 ;//(locked at 1)
V EQU 0x40
N EQU 0x80
改成
.equ C , 0x01 //6502 flags 6502标志
.equ Z , 0x02
.equ I , 0x04
.equ D , 0x08
.equ B , 0x10 //(allways 1 except when IRQ pushes it)IRQ外部中断
.equ R , 0x20
.equ V , 0x40 //(locked at 1)
.equ N , 0x80
3.SETA需要改成.equ
对于SETA 可以认为是编译时候要用到的宏变量,一样可以用.equ代替.通常是用于宏搭配着用
_type SETA _ABS
可以改成
.equ _type , _ABS
4.PROC 需要改成%function
例子
cpu6502_init PROC
;----------------------------------------------------------------------------
stmfd sp!,{r4-r11,lr}
ldr r10,=cpu_data ;读取地址
ldr r11,=NES_RAM ;r11=cpu_zpage
改成
.text
.global cpu6502_init
.type cpu6502_init, %function
.align 8
cpu6502_init:
//----------------------------------------------------------------------------
stmfd sp!,{r4-r11,lr}
ldr r10,=cpu_data //读取地址
ldr r11,=NES_RAM //r11=cpu_zpage
ldr r11,[r11] //NES_RAM用了指针
5. AREA rom_code, CODE, READONLY 改成 .text
AREA wram_globals0, DATA, READWRITE 需要改成 .data
6. RN需要改成.req
globalptr RN r10
globalptr .req r10
7.Map需要用对应的#define来解决。值得注意是有的指令可能不行,例如adr,需要改掉指令来实现对应的功能
对于汇编Map关键字的定义,可以想象成是结构体,然后访问成员的时候,对应就能够基于基地址偏移。这些是编译器提供的功能
8.DCD修改成.long
9.IMPORT修改成.extern
10.汇编中mov 的操作数有的在ARM9下不支持,需要分拆成两部分
11.原来的汇编是跑在stm32上的,是cortex-m架构,只支持thumb2不支持ARM指令,f1c100s是ARM9两种都支持,但是通常编译选项会关闭thumb指令或者说start.s没有允许thumb指令,所以源代码中的调用防止进入arm状态的地址偏移,可以去掉。
ldmfd sp!,{r3,lr}
//orr lr,#0x01 //lr最低位置1防止进入arm状态 //F1C100s 本来就是arm状态,需要注释掉这个指令 --By VeiLiang
12.注释不一样,ARMCC汇编格式注释符号为分号; GNU汇编格式为//或者@
C语言部分
对于在汇编中用到的变量,务必需要4字节或者8字节对齐,gcc利用 __attribute__ ((aligned (4)))。
如下
u8 PADdata0 __attribute__ ((aligned (8))); //手柄1键值 [7:0]右7 左6 下5 上4 Start3 Select2 B1 A0
u8 PADdata1 __attribute__ ((aligned (8))); //手柄2键值 [7:0]右7 左6 下5 上4 Start3 Select2 B1 A0
u8 *NES_RAM __attribute__ ((aligned (8))); //保持1024字节对齐
u8 *NES_SRAM __attribute__ ((aligned (8)));
u8* spr_ram __attribute__ ((aligned (8))); //精灵RAM,256字节
按键部分因为目前暂时没有按键,也是没有用上。按键读取函数为
//读取游戏手柄数据
void nes_get_gamepadval(void)
{
// u8 *pt;
// while((usbx.bDeviceState&0XC0)==0X40)//USB设备插入了,但是还没连接成功,猛查询.
// {
// usbapp_pulling(); //轮询处理USB事务
// }
// usbapp_pulling(); //轮询处理USB事务
// if(usbx.hdevclass==4) //USB游戏手柄
// {
// PADdata0=fcpad.ctrlval;
// PADdata1=0;
// }else if(usbx.hdevclass==3)//USB键盘模拟手柄
// {
// KEYBRD_FCPAD_Decode(pt,0);
// PADdata0=fcpad.ctrlval;
// PADdata1=fcpad1.ctrlval;
// }
}
演示
----------------------------------------------------------
----------------------------------------------------------
总结
总的移植下来,感觉学习到东西也蛮多。ARM转GNU汇编需要注意到的东西也比较多,稍有不慎就会data abort .不过出来的效果是真心不错,我还修改了对应的mapper,还有模拟的代码。让模拟器可以支持热血系列还有冒险岛系列运行。声音非常赞,我也移植了VirtualNes,对比发现本模拟器的声音可以和VirtualNes媲美,而且核心用的是汇编,跑在f1c100s上真的是丝滑,赞
致谢
感谢原子哥,感谢ye781205大佬,感谢晕哥,感谢rtthread团队
惯例
如果喜欢本项目https://github.com/VeiLiang/BoloRTT欢迎start fork 测试提交issue
如果觉得本项目对你有用解决了你的问题,欢迎点击我的个人网站用爱发电
以下由 @哇酷小管家 2021-06-03 加入
-----------------------------------------
不方便上github的朋友也可以通过本站下载: BoloRTT_git_full.7z
最近编辑记录 微凉VeiLiang (2021-01-30 23:48:56)
离线
本模拟器在项目的目录路径:BoloRTT/bsp/f1c/package/vnes/
离线
如果只想下载模拟器代码,可以本站链接下来 vnes.rar
关于文件夹命名,原版文件夹就是叫做NES的,加了个v区分下其它移植的模拟器,所以命名就变成vnes了,谅解
离线
赞,向大佬学习,感谢楼主分享,有时间搞到我的板子跑一跑,哈哈哈
离线
谢谢分享,太厉害啦
离线
感谢大佬分享,一直想移植个nes到板子上 做个fc小游戏机 没想到大佬已经弄好了
离线
不错!!!
离线
为啥编译不过呢
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\Apps\demo.o
Error in calling:
arm-eabi-gcc -o "build\applications\Apps\demo.o" -c -mcpu=arm926ej-s -ffunction-sections -fdata-sections -Wall -O2 -DHAVE_CCONFIG_H -DRT_USING_NEWLIB -I. -Iapplications -Iapplications\Apps -Ibootloader -Idrivers -Ilibcpu -Ipackage -Ipackage\infones -Ipackage\jpgdec -Ipackage\lvgl -Ipackage\lvgl\porting -Ipackage\lvgl\src -Ipackage\lvgl\src\lv_core -Ipackage\lvgl\src\lv_draw -Ipackage\lvgl\src\lv_font -Ipackage\lvgl\src\lv_hal -Ipackage\lvgl\src\lv_misc -Ipackage\lvgl\src\lv_objx -Ipackage\lvgl\src\lv_themes -Ipackage\vnes -ID:\RTT\BoloRTT-master\include -ID:\RTT\BoloRTT-master\components\dfs\include -ID:\RTT\BoloRTT-master\components\dfs\filesystems\devfs -ID:\RTT\BoloRTT-master\components\dfs\filesystems\elmfat -ID:\RTT\BoloRTT-master\components\dfs\filesystems\romfs -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi\sfud\inc -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\class -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\core -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\finsh -ID:\RTT\BoloRTT-master\components\libc\compilers\newlib -ID:\RTT\BoloRTT-master\components\libc\pthreads -ID:\RTT\BoloRTT-master\components\libc\time "applications\Apps\demo.c"
Exception: [Error 2] : No such file or directory
scons: *** [build\applications\Apps\demo.o] Error 2
scons: building terminated because of errors.
离线
为啥编译不过呢
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\Apps\demo.o
Error in calling:
arm-eabi-gcc -o "build\applications\Apps\demo.o" -c -mcpu=arm926ej-s -ffunction-sections -fdata-sections -Wall -O2 -DHAVE_CCONFIG_H -DRT_USING_NEWLIB -I. -Iapplications -Iapplications\Apps -Ibootloader -Idrivers -Ilibcpu -Ipackage -Ipackage\infones -Ipackage\jpgdec -Ipackage\lvgl -Ipackage\lvgl\porting -Ipackage\lvgl\src -Ipackage\lvgl\src\lv_core -Ipackage\lvgl\src\lv_draw -Ipackage\lvgl\src\lv_font -Ipackage\lvgl\src\lv_hal -Ipackage\lvgl\src\lv_misc -Ipackage\lvgl\src\lv_objx -Ipackage\lvgl\src\lv_themes -Ipackage\vnes -ID:\RTT\BoloRTT-master\include -ID:\RTT\BoloRTT-master\components\dfs\include -ID:\RTT\BoloRTT-master\components\dfs\filesystems\devfs -ID:\RTT\BoloRTT-master\components\dfs\filesystems\elmfat -ID:\RTT\BoloRTT-master\components\dfs\filesystems\romfs -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi\sfud\inc -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\class -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\core -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\finsh -ID:\RTT\BoloRTT-master\components\libc\compilers\newlib -ID:\RTT\BoloRTT-master\components\libc\pthreads -ID:\RTT\BoloRTT-master\components\libc\time "applications\Apps\demo.c"
Exception: [Error 2] : No such file or directory
scons: *** [build\applications\Apps\demo.o] Error 2
scons: building terminated because of errors.
是在bsp/f1c目录下运行scons么
离线
感谢楼主,我移植的infoNES,画面比PC的慢,操作倒是不卡,不知道是不是受制于F1C100S的性能
离线
视觉℡ 说:为啥编译不过呢
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\Apps\demo.o
Error in calling:
arm-eabi-gcc -o "build\applications\Apps\demo.o" -c -mcpu=arm926ej-s -ffunction-sections -fdata-sections -Wall -O2 -DHAVE_CCONFIG_H -DRT_USING_NEWLIB -I. -Iapplications -Iapplications\Apps -Ibootloader -Idrivers -Ilibcpu -Ipackage -Ipackage\infones -Ipackage\jpgdec -Ipackage\lvgl -Ipackage\lvgl\porting -Ipackage\lvgl\src -Ipackage\lvgl\src\lv_core -Ipackage\lvgl\src\lv_draw -Ipackage\lvgl\src\lv_font -Ipackage\lvgl\src\lv_hal -Ipackage\lvgl\src\lv_misc -Ipackage\lvgl\src\lv_objx -Ipackage\lvgl\src\lv_themes -Ipackage\vnes -ID:\RTT\BoloRTT-master\include -ID:\RTT\BoloRTT-master\components\dfs\include -ID:\RTT\BoloRTT-master\components\dfs\filesystems\devfs -ID:\RTT\BoloRTT-master\components\dfs\filesystems\elmfat -ID:\RTT\BoloRTT-master\components\dfs\filesystems\romfs -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\spi\sfud\inc -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\class -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\core -ID:\RTT\BoloRTT-master\components\drivers\usb\usbhost\include -ID:\RTT\BoloRTT-master\components\drivers\include -ID:\RTT\BoloRTT-master\components\finsh -ID:\RTT\BoloRTT-master\components\libc\compilers\newlib -ID:\RTT\BoloRTT-master\components\libc\pthreads -ID:\RTT\BoloRTT-master\components\libc\time "applications\Apps\demo.c"
Exception: [Error 2] : No such file or directory
scons: *** [build\applications\Apps\demo.o] Error 2
scons: building terminated because of errors.是在bsp/f1c目录下运行scons么
是在这个目录编译的
离线
修改了两个地方可以编译了,
第一、rtconfig.py文件中的第32行
PREFIX = 'arm-eabi-' 修改为 PREFIX = 'arm-none-eabi-'
第二、libc_errno.h文件中的第32行
#include <asm-generic/errno.h> 修改为 #include <errno.h>
编译成功
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
1717783 56628 6469356 8243767 7dca37 rtthread.elf
tools/mksunxi.exe rtthread.bin
bootloader size= 2200
The bootloader head has been fixed
scons: done building targets.
离线
能加上内存卡读写 就美丽了
离线
修改了两个地方可以编译了,
第一、rtconfig.py文件中的第32行
PREFIX = 'arm-eabi-' 修改为 PREFIX = 'arm-none-eabi-'第二、libc_errno.h文件中的第32行
#include <asm-generic/errno.h> 修改为 #include <errno.h>编译成功
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf rtthread.bin
arm-none-eabi-size rtthread.elf
text data bss dec hex filename
1717783 56628 6469356 8243767 7dca37 rtthread.elf
tools/mksunxi.exe rtthread.bin
bootloader size= 2200
The bootloader head has been fixed
scons: done building targets.
感谢分享 arm-none-eabi编译器的编译经验
工程是带sd卡读写的,有sd卡的话会挂载文件系统到/mmc目录,命令行下测试就好
离线
大佬,我在你的菠萝派基础上制作了板子,现在发现运行一会儿就出现死机情况,而且pmic部分碰一下也会造成花屏死机问题,请问有什么经验指示吗
离线
大佬,我在你的菠萝派基础上制作了板子,现在发现运行一会儿就出现死机情况,而且pmic部分碰一下也会造成花屏死机问题,请问有什么经验指示吗
用的是之前的V1 V2版本么。5V处要加电容,不知道是不是这个原因,你可以加一个试下
离线
有人移植到Linux下运行吗
离线
@微凉VeiLiang 刚开始我也是用了arm-none-eabi发现这个问题,然后我果断下载了gcc-linaro-5.13那个arm-eabi版本就好了。
离线
最近打算用FPSoc安路的sf1来做nes模拟器,特来借鉴一下整个工程的结构
离线
也想搞一块板子玩玩
离线
感谢楼主踩坑。我在这个基础上移植了,有两个问题不知道楼主有没有遇到过?
1. 背景音乐速度比正常的快、音调高,但画面速度是正确的(和电脑上的模拟器比较过)。APU_SAMPLE_RATE改过的,和驱动里的采样率一样。
2. 屏幕上每16列有一条竖线。
(05.25 update)问题2解决了,竖线是一直没有写入的缓存,即ppu代码里每过16个像素有一个跳过了没写。
找到如下这段代码:
for(i=sx;i<ex;i++)
{
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i++]];
plcd[i]=NES_Palette[ppu->dummy_buffer[i]];
}
改成这样就好了(可能是编译器优化-O3的原因)
for(i=sx;i<ex;i++)
{
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
plcd[i]=NES_Palette[ppu->dummy_buffer[i]];
}
}
最近编辑记录 Quotation (2024-05-25 21:13:23)
离线
Microsoft Windows [版本 10.0.22631.3737]
(c) Microsoft Corporation。保留所有权利。
E:\RTT\BoloRTT\bsp\f1c>scons -j8
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
CC build\applications\Apps\demo.o
CC build\applications\Apps\UartCursor.o
CC build\applications\main.o
CC build\bootloader\exception.o
AS build\bootloader\memcpy.o
AS build\bootloader\memset.o
CC build\bootloader\sys-clock.o
CC build\bootloader\sys-copyself.o
scons: *** [build\bootloader\sys-copyself.o] Error -1073741701
scons: *** [build\applications\main.o] Error -1073741701
scons: *** [build\applications\Apps\demo.o] Error -1073741701
scons: *** [build\bootloader\memcpy.o] Error -1073741701
scons: *** [build\applications\Apps\UartCursor.o] Error -1073741701
scons: *** [build\bootloader\exception.o] Error -1073741701
scons: *** [build\bootloader\sys-clock.o] Error -1073741701
scons: *** [build\bootloader\memset.o] Error -1073741701
scons: building terminated because of errors.
求助这是什么错误,?
离线
解决了,mwin32的问题
离线
我在荔枝派nano运行,颜色不对,应该是RB交换了,请问在哪配置,还有有办法修改游戏的分辨率吗,这么大一块屏幕就显示这么点区域
修改分辨率你设置NES_DISP_WIDTH和NES_DISP_HEIGHT就可以,你的infones程序能分享我一下不,我用的LCPI,但是显示有问题
离线
最近打算用在bk7256上来做nes模拟器,特来借鉴一下整个工程的结构
离线
我在荔枝派nano运行,颜色不对,应该是RB交换了,请问在哪配置,还有有办法修改游戏的分辨率吗,这么大一块屏幕就显示这么点区域
可以自己处理下刷图,每个像素点绘制多次,甚至可以插值,显示更细腻点
离线
楼主还在更新吗?我在查芯片的时候找到了这里,发现楼主的GitHub仓库,已经无法使用在最新的RTT上了,想问楼主有没有啥好的解决办法
离线
楼主还在更新吗?我在查芯片的时候找到了这里,发现楼主的GitHub仓库,已经无法使用在最新的RTT上了,想问楼主有没有啥好的解决办法
主要是报什么错误?
离线
AAA_GET 说:楼主还在更新吗?我在查芯片的时候找到了这里,发现楼主的GitHub仓库,已经无法使用在最新的RTT上了,想问楼主有没有啥好的解决办法
主要是报什么错误?
楼主我是把你github下的BSP里的f1c直接复制到现在最新的RTT源码的BSP下,先是报了一个pyhton的错误
scons: Reading SConscript files ...
File "D:\RTT\source\rt-thread\bsp\f1c\rtconfig.py", line 21
print 'Please make sure your toolchains is GNU GCC!'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
然后我去掉这个python之后就报了
scons: Reading SConscript files ...
AttributeError: 'str' object has no attribute 'remove':
File "D:\RTT\source\rt-thread\bsp\f1c\SConstruct", line 25:
objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=True)
File "D:\RTT\source\rt-thread\bsp\f1c\../..\tools\building.py", line 359:
objs = SConscript('SConscript', variant_dir=bsp_vdir, duplicate=0)
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 684:
return method(*args, **kw)
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 620:
return _SConscript(self.fs, *files, **subst_kw)
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 280:
exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
File "D:\RTT\source\rt-thread\bsp\f1c\SConscript", line 12:
objs = objs + SConscript(os.path.join(d, 'SConscript'))
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 684:
return method(*args, **kw)
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 620:
return _SConscript(self.fs, *files, **subst_kw)
File "D:\RTT\env-windows\.venv\Lib\site-packages\SCons\Script\SConscript.py", line 280:
exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
File "D:\RTT\source\rt-thread\bsp\f1c\applications\SConscript", line 10:
group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH,LIBS=LIBS,LIBPATH=LIBPATH)
File "D:\RTT\source\rt-thread\bsp\f1c\../..\tools\building.py", line 682:
if _PretreatListParameters(target) == True:
File "D:\RTT\source\rt-thread\bsp\f1c\../..\tools\building.py", line 588:
target_list.remove('')
感觉越来越多了
离线
@AAA_GET
要修改这个rtconfig.py文件,指定下你的编译工具链路径。具体也可以参考下面的帖子
https://whycan.com/t_5755.html
离线
@AAA_GET
要修改这个rtconfig.py文件,指定下你的编译工具链路径。具体也可以参考下面的帖子
https://whycan.com/t_5755.html
楼主,我想测试你的tvd功能,我首先是初始化了
board_lcd_init();
lcd_SetBrightness(100);
然后我测试打开了tv_in_decode_init(0);,tv_in是有中断的,但是呢,我接了摄像头使用了CVBS的引脚,结果屏幕就是全红色,这是什么原因呢?
离线
@AAA_GET
那证明有中断了。刷图的问题或者说你cvbs信号没有经过滤波和隔直电容就接到脚上
离线
@AAA_GET
那证明有中断了。刷图的问题或者说你cvbs信号没有经过滤波和隔直电容就接到脚上
楼主你那个摄像头刷视频延迟很高啊,100-200ms,好像没有用到DMA哦,放弃了。我打算用带DMA的裸机代码
离线
微凉VeiLiang 说:@AAA_GET
那证明有中断了。刷图的问题或者说你cvbs信号没有经过滤波和隔直电容就接到脚上楼主你那个摄像头刷视频延迟很高啊,100-200ms,好像没有用到DMA哦,放弃了。我打算用带DMA的裸机代码
要用debe。忘记我这个rtt工程有没有开源debe出来了
离线