FreeRTOS变量疑问咨询
不懂就问:我需要声明比较多变量(假如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)
{
}
}
任务是RTOS的范畴, 变量申明是编绎器的范畴.
你所说的问题和减少任务切换开销没多大的关系. 和变量存储的位置有很大关系.
对于编绎器来说, 函数内声明的是局部变量,放在栈内.函数外声明的是全局变量,放在固定的位置.
编绎器不会管也不知道这个函数是不是任务. 在编绎器眼里这就是个函数
如此来分析,局部变量至少有两个好处:
1.私密性高, 别的地方访问不到.
2.使用效率高, 释放以后别的函数也可使用.(但是你这个地方有点特殊, 就是这个任务函数可能永远也不会退出,达不到省内存的目底, 但仍建议局部变量)
全局变量在多个函数或任务之间共享数据比较方便. 但是有许多缺点, 比如访问私密性不强, 函数不可重入, 内存使用效率低下等.
一般来说单个功能函数可避免使用全局变量的, 就避免.
tzz1983 发表于 2024-1-15 20:06
任务是RTOS的范畴, 变量申明是编绎器的范畴.
你所说的问题和减少任务切换开销没多大的关系. 和变量存储的 ...
谢谢解疑{:4_196:}
页:
[1]