尊敬的团队:
我有一个函数(function_1)可调用另一个函 数(function_2)、在执行最后一个叶函数并返回到调用方函数时、不会恢复局部函数参数。 我有一些 ISR 也并行运行(计时器、SPI、ADC)
我注意到、函数参数存储在寄存器中、这就是问题所在。 如果我尝试将这些参数移动为全局变量、那么我不会看到问题、 但我现在无法为我的完整软件执行此操作、并且希望在其根目录下修复问题、因为我看到下面的示例是有效的 C 用例、并希望它能够正常工作。
我在其他较小的项目中没有注意到这个问题、但当我开始构建较大的项目时、我的闪存大小达到31KB、现在我开始看到前面正常工作的代码出现这个问题。
如果我可以做些什么来使我的项目重新运行而不出现此问题、您可以在这里提供帮助吗?
CCS 版本- 9.2.1
示例:
函数_2 (uint32_t 参数3)
{
//使用 Param3执行一些操作
}
函数_1 (uint32_t param1、 uint32_t param2、 uint32_t paramM3)
{
//注意:编译器将这些参数值保存在寄存器中
for (i=1;i<10;i++)
{
PARAM3 = PARAM3 + param1 + param2;//根据 param 1和2对参数3变量进行一些计算
Function_2 (PARAM3);
//注意:返回此函数_2后,不会恢复 Param1、2、3的原始值,从而导致故障
}
}
MAIN ()
{
while (1)
{
Function_1 (1、2、3);
}
}