DMA 在声明变量的时候 会进入死循环

2019-07-21 02:57发布

这个问题我也搞不通 ,放在是花费了我半天的时间才找出来,我也不知道为什么编译器没有报错,问题如下:
在声明如下的数组的时候 ,必须要将声明放在main函数的外面,如果放在里面就会出现死循环:我也不知道是不是语法的问题,但是编译器就是没有报错,真是让人摸不着头脑:
u8 SendBuff[SEND_BUF_SIZE];        //发送数据缓冲区
const u8 TEXT_TO_SEND[]={"ALIENTEK WarShip STM32F1 DMA 串口实验"};         

就是上面的着两段程序,你可以把原子哥的程序中的这两段代码放在main函数中声明,编译的时候也不会报错,但是下载进开发板的时候就会进入死循环,原因现在我也不知道,希望哪位大神看见这个帖子的话可以给我这个小白一点指导,先谢谢啦!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
edmund1234
1楼-- · 2019-07-22 08:09
函数内的局部变量就是用栈的, 全局变量就不用栈。
栈可以理解为, 给函数提供临时性内存, 其生命周期是函数, 退出函数后就自动释放。
你可以进一步证明它确实是栈所造成的问题, 在startup_stm32xxxx.s文件里,
把Stack_Size                EQU     0x400
改为 Stack_Size                EQU     0x400+ 8000
看看放在main里还有没有问题
gongzq666
2楼-- · 2019-07-22 13:45
edmund1234 发表于 2019-4-13 13:29
函数内的局部变量就是用栈的, 全局变量就不用栈。
栈可以理解为, 给函数提供临时性内存, 其生命周期是 ...

好的,谢谢您的指点了,这个对我的学习有很大的帮助。
brucewoo
3楼-- · 2019-07-22 14:03
#define SEND_BUF_SIZE 8200
这个数太大了。
你这个就是数组大小,需要开辟多少内存空间。
你定义成全局变量的话,存在在全局变量区,这个在编译阶段就为你分配好。
如果放在main函数内,就是局部变量,这个空间在编译的时候不给你分配,在程序运行时才在栈区分配。
brucewoo
4楼-- · 2019-07-22 14:05
8楼的朋友说得对,你试试把.s文件的stack大小改大,就不会出问题了。
gongzq666
5楼-- · 2019-07-22 14:25
 精彩回答 2  元偷偷看……

一周热门 更多>