- 打卡等级:以坛为家I
- 打卡总天数:208
- 最近打卡:2025-06-16 08:41:37
已绑定手机
荣誉版主
无情的代码机器
- 积分
- 4309
|
Keil C251(V5.38):
工程路径:KeilC251\Ai8051U-C251.uvproj
编译路径:KeilC251\list\Ai8051U-C251-output
Keil C51(V5.38):
工程路径:KeilC51\Ai8051U-C51.uvproj
编译路径:KeilC51\list\Ai8051U-C51-output
SDCC(V4.4):
工程路径:SDCC\Makefile
编译路径:SDCC\build
IAR(V10.10.1):
工程路径:IAR\Ai8051U.eww
编译路径:IAR\Debug\Exe
自动化脚本:
keilC251Rebuild.bat、iarRebuild.bat、keilC51Rebuild.bat、sdccRebuild.bat分别对应四个编译器的批量构建
=========================================================================================================
坛友提问的差异点也贴在这里:
①、8bit向32bit移植:
改工程配置
改头文件
改各种延时nop\delay,屏显,按键扫描等时序有要求的是重灾区(因为Ai8051U比89C52快太多了)
*有追求的可以改为库函数实现,SPI、I2C等外设升级为库函数语法
②32bit转KeilC51:
改工程配置(device,memory model)
改头文件
改库文件(用库函数的话)
改各种8bit LIB(MDU\FPU\CDC\HID)
改中断(超过32的用32之前闲置的中断号,isr.asm里汇编跳转)
改寄存器操作,不能bit操作的地址用位运算
long类型定义一定要加L,运算也要加L,例如:DWOR dwMemorySize = 32L*1024L;
8bit下16位变量操作非原子操作!
③32bit转SDCC:
(在C51修改完的基础上)
sfr sbit 中断等语法修改
bit操作~改!,否则类型自动升级结果不可预知
中断函数需要在main所在c文件中声明,否则无效
改大小端,keil大端,sdcc小端
函数体}后面不能跟;
没有math library (e.g. log())
putchar函数声明差异:int putchar(int c);
printf格式化差异,默认不支持float %f需要自己编译sdcc源码, keil的%bu %bd也不同。
④32bit转IAR:
(在C51修改完的基础上)
sfr sbit 中断等语法修改
改中断声明中中断号为地址
不能用指针变量指向const code变量。
putchar函数声明差异:int putchar(int c);
更多printf差异参阅:
printf函数 的 格式参数; USB接口 使用 printf 打印数据 - 串行口,DMA支持的4组串口,RS232,RS485,Modbus, CRC16 国芯技术交流网站 - AI32位8051交流社区
暂时回想起这些,后面想到再补充。
一些工程实例:
【Ai8051U】擎天柱核心板学习记录贴
【Ai8051U】分享USB_CDC库 SDCC\IAR版
普中单片机学习板@89C52, 教学程序移植到强大的【Ai8051U】,32位8051,浮点/三角函数
学习官方Ai8051U实验箱 | 最强记录贴,Ai8051U-8Bit,Keil-C51, SDCC-51, IAR/C++
=========================================================================================================
V20241203更新:
添加C251工程,牺牲一部分sbit操作,位操作语法向C51看齐
prj-template-V20241203.zip
(5.82 MB, 下载次数: 171)
|
1
喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
-
+2
楼主威武~
|