_NCY_ 发表于 2026-1-23 07:48:18

关于ai8052和C251请教几个点

1:ai8051u怎么手动指定堆栈空间?
我想像C51那样从startup.a里面改,但发现为什么startupc251.a加不进工程,一旦加进去就会报错找不到那个什么 问号start
2:我手里只有一块8052u板子,没1Dlink,有办法仿真吗?为什么stcisp里 usb和串口
仿真按钮是灰的选择不了,默认强制swd?
3:8052u的eeprom是不是不能用来跑程序了?
4:c251所有函数是默认全部可重入的吗,那target option里面的那个genrerate reentrant是干嘛的
5:怎么手动把变量放在edata里(占用内存太多不得不开large默认全给我扔xdata,但有些东西想放到edata,发现edata不是个关键字?)
6:硬件lcm我怎么感觉是每发出去一(两)个字节就要进中断去清标志,那进中断的时间开销是不是得很大啊,还有什么意义吗(实测确实比dma慢了好多好多)

Ayb_ice 发表于 2026-1-23 08:41:10

1: 直接给DR60赋值即可,用C:\Keil_v5\C251\LIB下的START251.A51文件不可能有错
2:没用过,不大清楚
3:eeprom是可动态分配的,没有分配为eeprom就可以跑程序
4:不是默认可重入,默认是与C51一样的,genrerate reentrant用来强制产生重入函数,不用声明reentrant
5:unsigned char edata c = 0;
6: 其它模块不都是这样的吗,没有什么奇怪的

21cnsound 发表于 2026-1-23 09:22:51

双字寄存器 DR60 是堆栈指针 SPX。包括了堆栈指针低位 SP和堆栈指针高位 SPH,这两个字节允许堆栈扩展到内存 00 区域的顶部。SP和 SPH 可以作为 SFR 访问。

DebugLab 发表于 2026-1-23 09:33:27

32G144K246暂无串口和USB仿真功能


_NCY_ 发表于 2026-1-23 10:37:49

那默认的堆和栈各是多大啊,没添加startup时候

angmall 发表于 2026-1-23 11:45:55

_NCY_ 发表于 2026-1-23 10:37
那默认的堆和栈各是多大啊,没添加startup时候




;------------------------------------------------------------------------------
;
;CPU Stack Size Definition
;
;The following EQU statement defines the stack space available for the
;251 application program.It should be noted that the stack space must
;be adjusted according the actual requirements of the application.
;
STACKSIZE        EQU        100H        ; set to 100H Bytes.
;
;------------------------------------------------------------------------------






health 发表于 2026-1-23 14:19:09

_NCY_ 发表于 2026-1-23 10:37
那默认的堆和栈各是多大啊,没添加startup时候

没添加startup时默认栈大小 0x100 字节。
启动后进入main前栈指针DR60指向edata空间最后一个分配完的地址。实际效果就是edata空间除了变量占用的空间外其余都是栈空间。

编译时,所有edata变量 + 栈超出芯片edata容量会报错。
页: [1]
查看完整版本: 关于ai8052和C251请教几个点