找回密码
 立即注册
查看: 531|回复: 2

FreeRTOS变量疑问咨询

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-02 07:22:39

12

主题

110

回帖

1076

积分

金牌会员

积分
1076
发表于 2024-1-15 17:08:10 | 显示全部楼层 |阅读模式


不懂就问:我需要声明比较多变量(假如100个),是不是在任务函数外面声明变量(这些变量只是该任务会使用到)可以减少任务切换的开销?这样做主要有哪些弊端?

任务函数内声明:

portTASK_FUNCTION(vTestTask, pvParameters)

{
    unsigned char n1,n2,n3……n100;
    UNUSED(pvParameters);
    while(1)
    {

    }
}


任务函数外声明:
unsigned char n1,n2,n3……n100;

portTASK_FUNCTION(vTestTask, pvParameters)

{
    UNUSED(pvParameters);
    while(1)
    {

    }
}








回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-1-15 20:06:04 | 显示全部楼层
任务是RTOS的范畴, 变量申明是编绎器的范畴.

你所说的问题和减少任务切换开销没多大的关系. 和变量存储的位置有很大关系.
对于编绎器来说, 函数内声明的是局部变量,放在栈内.  函数外声明的是全局变量,放在固定的位置.
编绎器不会管也不知道这个函数是不是任务. 在编绎器眼里这就是个函数

如此来分析,局部变量至少有两个好处:
1.私密性高, 别的地方访问不到.
2.使用效率高, 释放以后别的函数也可使用.  (但是你这个地方有点特殊, 就是这个任务函数可能永远也不会退出,达不到省内存的目底, 但仍建议局部变量)

全局变量在多个函数或任务之间共享数据比较方便. 但是有许多缺点, 比如访问私密性不强, 函数不可重入, 内存使用效率低下等.  
一般来说单个功能函数可避免使用全局变量的, 就避免.

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-02 07:22:39

12

主题

110

回帖

1076

积分

金牌会员

积分
1076
发表于 2024-1-15 23:16:43 | 显示全部楼层
tzz1*** 发表于 2024-1-15 20:06
任务是RTOS的范畴, 变量申明是编绎器的范畴.

你所说的问题和减少任务切换开销没多大的关系. 和变量存储的 ...

谢谢解疑
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 22:15 , Processed in 0.108368 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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