找回密码
 立即注册
查看: 437|回复: 1

FreeRTOS中xdata使用注意点咨询

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:22
  • 最近打卡:2025-05-10 10:27:32
已绑定手机

14

主题

6

回帖

214

积分

中级会员

积分
214
发表于 2024-10-29 10:03:28 | 显示全部楼层 |阅读模式

近期想在STC32G项目中使用freeRTOS做4G模块的项目,xdata区的RAM使用会比较多,所以想请教下:
1.freeRTOS中使用xdata数据的注意点是什么?
2.什么情况下xdata的使用会导致freeRTOS异常?

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-05-28 09:08:49

34

主题

1094

回帖

2450

积分

荣誉版主

积分
2450
发表于 2024-10-29 13:21:09 | 显示全部楼层
本帖最后由 tzz1983 于 2024-10-29 13:25 编辑

我能想到的几点:

1. FREERTOS 的内存池需要用EDATA。原因是动态创建任务时,在内存池申请内存作为任务栈,而任务栈必定是EDATA。
2. 一般来说,使用FREERTOS会开启全局可重入功能。如果已开启全局可重入,则局部变量(含参数)不要指定存储域。编译器会自动安排局部变量放在栈中。
    如果强制指定存储域,比如:
    void xxx(void)
    {
        char xdata  i;   //如果是可重入函数,xdata 修饰可能不起作用。而且还有可能引发错误。
        ......
    }

3. 通过第二点可以看出,即然局部变量不用xdata, 那大多数用xdata的地方就是全局变量了。全局变量的用法没什么约束。
   而且也推荐大尺寸的局部变量,用静态全局变量替代,从而节约任务栈。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 20:48 , Processed in 0.363498 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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