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

FreeRTOS变量疑问咨询

[复制链接]
  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    12

    主题

    100

    回帖

    1502

    积分

    金牌会员

    积分
    1502
    发表于 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)
        {

        }
    }








    回复 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    575

    回帖

    1191

    积分

    荣誉版主

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

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

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

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

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 162 天

    [LV.7]常住居民III

    12

    主题

    100

    回帖

    1502

    积分

    金牌会员

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

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

    谢谢解疑
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-17 20:40 , Processed in 0.056265 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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