使用STM32F407,在Keil环境下运行RTX,定义函数传入的参数是整个结构体的话,程序会跑飞,但是编译不会报错,并且调试的时候并不会运行到那一个传入结构体的函数,即使不运行到他,但是运行完一轮这个线程就会跑飞,屏蔽了就正常,请教一下这个是什么原因?有什么办法以后避免吗
程序示例:
typedef strucu{
uint8_t data[1024];
uint8_t cnt;
}test_s;
test_s test;
__task void Test_Handler(void)
{
uint8_t a=0;
while(1)
{
//调试的时候并不会运行到这里面的程序
if(a>2)
{
test_fun1(test); //会跑飞,并且没有什么提示警告
test_fun2(&test); //不会跑飞
}
os_dly_wait(10);
}
}
void test_fun1(test_s s)
{
//没有内容,会跑飞
}
void test_fun2(test_s *s)
{
//没有内容,不会跑飞
}
栈溢出,参数也是在栈里的,你那个结构体太大了1025字节,对栈来说是个庞然大物,简单的解决办法就是改一下参数,改为传结构体指针,你自己也验证了的。