找回密码
 注册
关于网站域名变更的通知
查看: 360|回复: 1
打印 上一主题 下一主题

RTOS如何使用XRAM空间?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-1-21 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
现在很多单片机都是51核自带的256byte的SRAM和扩展的XRAM混合的,一般有256SRAM+768XRAM=1KRAM.$ z: A+ A5 W5 N8 i9 v, i
如果使用RTOS操作系统,基本都是PC指针切换任务,稍微定义几个人工堆栈,128byte的idate就满了,导致编译失败。
3 r; Z5 C7 g7 A- a5 z& t; H: W 如果此时,把KEIL的内存分配设置成Large模式,虽然能解决使用XRAM的问题,但整个RTOS就失效了。  c! O5 J) x2 M$ f
那么如何有效利用上XRAM呢?
' z4 G& f( Y5 b  }& B' i) H  B6 F0 x9 x1 J' A% x% G; h( f
我试着把其他变量用关键词xdata设置到XRAM是正常的,但是如果把RTOS使用的变量(比如,任务堆栈)也分配到XRAM,RTOS就会失效!
4 g# J6 O! S5 G. w6 F4 n5 y$ q
. V4 f) ^4 a# l* T* }% x1 p

该用户从未签到

2#
发表于 2020-1-21 15:46 | 只看该作者
rtx51 tiny还是挺好用的。 idata基本就是任务堆栈,不能指望再多了。局部变量用xdata。 注意,51的局部变量不是放在堆栈里,是通过覆盖技术实现的。必要的时候查map,看每个任务的覆盖段长度,自己想办法优化。 优化方法太久不用,细节记得不多了。 大概思路,子程序里一个变量,如果先赋值,接着用,然后不再用,就极有可能不会增加覆盖段长度。如果先赋值,然后调用其他子程序,过半天才回来访问这个变量,那这个变量就几乎肯定要占用一点内存。原理有点类似控制堆栈最大深度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-21 11:23 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表