STM32F103ZET6堆栈溢出导致单片机不断复位,剖析问题所在

2019-08-14 01:05发布

程序图下:unsigned char buf0[1024];
void  App_TaskUart(void *p_arg)
{
        INT8U tmp;
        INT16U len, i,j;
         
        static INT16U  rUart3Len = 0;  // UART3½óêÕêy¾Y3¤¶è
        INT8U err,cpu_sr;

        (void)p_arg;
        //Ö÷°å485¿ú£¬′óóòÏò×óòà′ÎêÇUART3¡¢UART4¡¢UART5
        while (1)
        {
                SysFlag.TaskRunStatus |= TASK_UART_FLAG;
                Delay_ms(10);
          len = Uart_Ctrl(UART3_ID, CMD_UART_GetCharsRxBuf,0);// ¶á衽óêÕêy¾Y3¤¶è
                if ((len == rUart3Len)&&(len>0))
                {
                        if (len > 1024)
                        {
                                        len = 1024;
                        }
                        tmp = Uart_Read(UART3_ID, buf0, len);
                        rUart3Len -= len;
                }
                else
                {
                        rUart3Len        = len;
                }               

         .........
         ........

当数组buf0定义为全局变量的时候,单片机运行正常;当数组buf0定义为局部变量的时候,单片机不断复位。
我大概了解是堆栈溢出了,但是我看到内存是够用的,所以不明白了,请大神们帮我分析一下为什么?

数组buf0定义在全局变量时编译结果:
Program Size: Code=152064 RO-data=3048 RW-data=132328 ZI-data=56744  
FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output .outputupgrade.bin .outputEMB86xxI.axf
".outputEMB86xxI.axf" - 0 Error(s), 0 Warning(s).


数组buf0定义在局部变量时编译结果:
Program Size: Code=152076 RO-data=3048 RW-data=132328 ZI-data=55720  
FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output .outputupgrade.bin .outputEMB86xxI.axf
".outputEMB86xxI.axf" - 0 Error(s), 0 Warning(s).


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
Acuity
1楼-- · 2019-08-14 06:31
 精彩回答 2  元偷偷看……
xsx127
2楼-- · 2019-08-14 09:21
任务内存加大
luqiancheng
3楼-- · 2019-08-14 12:38
xsx127 发表于 2017-9-12 17:08
任务内存加大

不是堆栈溢出的问题么?奇怪的是编译过程没有报错
xsx127
4楼-- · 2019-08-14 18:03
luqiancheng 发表于 2017-9-13 16:00
不是堆栈溢出的问题么?奇怪的是编译过程没有报错

任务内存小只有运行的时候才会出错,他是动态申请的,肯定是任务内存的问题
luqiancheng
5楼-- · 2019-08-14 21:53
Acuity 发表于 2017-9-12 16:08
1、函数内部定义数组;从栈上分配,动态分配,系统管理;栈一般设置不大,栈一般用于函数压栈、访问量大占 ...

学习了,多谢

一周热门 更多>