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

RTOS如何使用XRAM空间?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在很多单片机都是51核自带的256byte的SRAM和扩展的XRAM混合的,一般有256SRAM+768XRAM=1KRAM.
! W# }; E% _% r8 ]: _如果使用RTOS操作系统,基本都是PC指针切换任务,稍微定义几个人工堆栈,128byte的idate就满了,导致编译失败。
/ f- v' A/ q  ^% Q$ Y* } 如果此时,把KEIL的内存分配设置成Large模式,虽然能解决使用XRAM的问题,但整个RTOS就失效了。9 e4 u8 ]9 k: M
那么如何有效利用上XRAM呢?' m4 h' b: ^' R# r! n1 ^

, `9 l9 u+ K) w$ W 我试着把其他变量用关键词xdata设置到XRAM是正常的,但是如果把RTOS使用的变量(比如,任务堆栈)也分配到XRAM,RTOS就会失效!) W* G: D/ Y" B9 n
0 B: ~* n* G1 L+ J4 g/ l

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 22:17 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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