完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
N76E003为新唐高速1T 8051 单片机系列产品,提供18 KB Flash ROM、可配置Data Flash与高容量1 KB SRAM,支持2.4V 至 5.5V宽工作电压与-40℃至105℃工作温度,并具备高抗干扰能力 7KV ESD/4KV EFT。
高于256的叫Xdata, Keil编译器选large模式就行 |
|
|
|
刚好占满允许空间总是觉得不太放心,还是分开一半放片内RAM一半放外部比较放心,个人愚见
|
|
|
|
51 的堆栈空间只能在内部 256byte 中, 至于扩展的 256 字节, 可以用 pdata 或 xdata 处理.
|
|
|
|
你定义个这个试试
char idata acBuf[256]; 肯定是不行的 这个可以 char xdata acBuf[256]; 另外,STM32局部变量大于栈空间也不一定会出问题,这取决于你有多少空余空间 |
|
|
|
我定义的是局部变量数组,默认是放在xdata中的,程序暂时也没有出现问题,我想知道的是51栈默认的大小是多少,默认开辟栈的大小
|
|
|
|
默认是一个字节大小(可以修改大小),但是没有被分配的idata空间其实都是堆栈,甚至已经分配的也是堆栈,因为堆栈自动改变,是不会检查是否出问题的,一般也无法检查
启动文件是这样定义堆栈的 RSEG ?STACK DS 1 |
|
|
|
使用增强型51(xdata768byte)定义256byte局部数组程序会出问题吗?我测试可以开辟成功但是会不会导致局部变量覆盖全局变量的值
|
|
|
|
只能定义在pdata或xdata空间,idata,data,bdata空间是不可以的
|
|
|
|
keil c51函数内的变量(包括入口参数在内),如果超过了8个字节,会被分配在一个根据调用树计算好的静态堆栈上。和存储函数调用地址的sp指针的堆栈不是一个。
你如果选择了large模式,这个静态栈就在xdata里面。 如果函数有重入,有被可变函数指针间接调用,那么调用树就不是固定的,就不行了。 这样充分利用了ARM等CPU没有的直接寻址指令,访问堆栈上的数的效率比较高。比如 0x30的堆栈上存的数 inc 30h就可以直接加1。 如果不用这个方式,用gcc等职能堆栈的方式,那么 由于8051这个古老的cpu的堆栈指针不能间接寻址,指针少,指针间接访问的开销大等,导致效率低下很多。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11974 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 03:10 , Processed in 0.894659 second(s), Total 87, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号