FreeRTOS中xdata使用注意点咨询
近期想在STC32G项目中使用freeRTOS做4G模块的项目,xdata区的RAM使用会比较多,所以想请教下:
1.freeRTOS中使用xdata数据的注意点是什么?
2.什么情况下xdata的使用会导致freeRTOS异常?
本帖最后由 tzz1983 于 2024-10-29 13:25 编辑
我能想到的几点:
1. FREERTOS 的内存池需要用EDATA。原因是动态创建任务时,在内存池申请内存作为任务栈,而任务栈必定是EDATA。
2. 一般来说,使用FREERTOS会开启全局可重入功能。如果已开启全局可重入,则局部变量(含参数)不要指定存储域。编译器会自动安排局部变量放在栈中。
如果强制指定存储域,比如:
void xxx(void)
{
char xdatai; //如果是可重入函数,xdata 修饰可能不起作用。而且还有可能引发错误。
......
}
3. 通过第二点可以看出,即然局部变量不用xdata, 那大多数用xdata的地方就是全局变量了。全局变量的用法没什么约束。
而且也推荐大尺寸的局部变量,用静态全局变量替代,从而节约任务栈。
页:
[1]