/******2016.10.06***********/
开发环境:
开发工具:keil V5.20,
硬件设备:STM32F103C8T6
问题描述:
在RTX下创建任务Adc_Task(实现ADC、FUZZY_PID、PWM调节),结果在运行
FUZZY_PID模块时出现任务堆栈溢出问题,默认任务堆栈空间为512bytes,于是
为Adc_Task独立分配了1024字节的堆栈空间,结果还是溢出~~接着一狠心分配
了2048字节给它,却发现程序虽然不显示堆栈溢出,程序却卡死了~~点击Debug
结束后,任务视图中显示空闲任务os_idle_demon溢出~~
问题分析:
由于本身FUZZY_PID中的各通道控制对象的结构体所需内存比较大,如果在任务调
度中多次以参数的形式将控制对象传入调用函数中,将会造成控制对象的多次复制,
在任务切换进行压栈时发生溢出~~
解决方法:
修改FUZZY_PID驱动文件中的调用函数的形参类型,将其修改为控制对象的指针对象
这时候再次运行程序就不再出现堆栈溢出问题了,,,堆栈仍然使用512字节,连
50%都用不到~~
附上修改后的FUZZY_PID驱动的调用函数声明~(修改前后的区别仅在于是否添加“*“号)