| 
				打卡等级:以坛为家I打卡总天数:344最近打卡:2025-10-31 08:54:30  已绑定手机荣誉版主 无情的代码机器 
 
	积分7497 
 | 
 
| 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, 下载次数: 257) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
1
喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
 
 +2楼主威武~
 |