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

RTOS如何使用XRAM空间?

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
现在很多单片机都是51核自带的256byte的SRAM和扩展的XRAM混合的,一般有256SRAM+768XRAM=1KRAM.5 a3 m" v; O# {" e
如果使用RTOS操作系统,基本都是PC指针切换任务,稍微定义几个人工堆栈,128byte的idate就满了,导致编译失败。
, U: n" G: [+ @0 M4 f; q 如果此时,把KEIL的内存分配设置成Large模式,虽然能解决使用XRAM的问题,但整个RTOS就失效了。
1 d- ~0 E) \4 e/ ]- n* T: Y3 K 那么如何有效利用上XRAM呢?7 G$ W8 G6 x! I( F$ H

) J' D, Y, z' M 我试着把其他变量用关键词xdata设置到XRAM是正常的,但是如果把RTOS使用的变量(比如,任务堆栈)也分配到XRAM,RTOS就会失效!
% @0 k! f( T( j( e# [# [

  k1 K2 R2 s) n0 ^

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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