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

RTOS如何使用XRAM空间?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在很多单片机都是51核自带的256byte的SRAM和扩展的XRAM混合的,一般有256SRAM+768XRAM=1KRAM.
2 l8 P) D$ k  o如果使用RTOS操作系统,基本都是PC指针切换任务,稍微定义几个人工堆栈,128byte的idate就满了,导致编译失败。9 ~3 s9 |' h; B, ?# I% R# h
如果此时,把KEIL的内存分配设置成Large模式,虽然能解决使用XRAM的问题,但整个RTOS就失效了。4 u( T* I* {( ^9 Q' @
那么如何有效利用上XRAM呢?
/ |+ w5 Z9 z& A* B2 e4 p' L3 S4 X9 z! t0 `4 U. v" m
我试着把其他变量用关键词xdata设置到XRAM是正常的,但是如果把RTOS使用的变量(比如,任务堆栈)也分配到XRAM,RTOS就会失效!+ N% u$ N+ S  Q4 c. N3 t
& _6 v4 f# f6 d, n

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 22:59 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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