本帖最后由 Inc_brza 于 2017-12-20 09:30 编辑
請教一下!
我使用STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\SysTick範例程式
並在主程式MAIN下宣告了
- uint32_t Input_f32[2048];
- uint32_t Output_f32 [1024];
- for (i =0 ; i<2048 ; i++)
- {
- Input_f32=0;
- }
复制代码
原本
- /* Toggle LED3 and LED6 */
- STM_EVAL_LEDToggle(LED3);
- STM_EVAL_LEDToggle(LED6);
- /* Insert 50 ms delay */
- Delay(50);
- /* Toggle LED4 and LED5 */
- STM_EVAL_LEDToggle(LED4);
- STM_EVAL_LEDToggle(LED5);
- /* Insert 100 ms delay */
- Delay(100);
复制代码
會閃爍的LED3,4,5,6變得完全不閃爍了呢?
這是什麼原因造成的呢?
|
发帖子前请先想清楚自己的问题他是啥,想好标题再发帖
代码最好以截图提供,说明你操作了啥导致啥问题!编码格式注意一下,
别给大家造成眼球污染!帮楼主编辑了一下帖子,楼主请把数组操作屏蔽掉看看是否问题解决!
如果真是数组操作导致的问题,请看一下数组的大小以及数组在哪里定义的。
注意一下栈大小(startup文件可以设置)是否过小!
最好已截图的方式贴出你的操作代码。
不好意思!我來自台灣~
我看不懂您寫的意思
因為說法不同
不過如果我把
宣告變數拿掉後
執行就是正常的了
請問我要注意startup_stm32f4xx.s的哪個部份呢
謝謝版主這麼熱心的回答
额,我也不知道你们对名词的说法,不过大概就是这么个意思,
建议你先把main函数截图放上来另外,我先猜测你的数组是在main函数里声明定义的,你把他拿出来
作为全局变量看看是否还有异常,如果异常解决,那问题点就知道是什么了
版主謝謝您了~
底下是程式碼!
主要只添加了
uint16_t i;
uint32_t Input_f32[2048];
uint32_t Output_f32 [1024];
for (i =0 ; i<2048 ; i++)
{
Input_f32=0;
}
就會導致while迴圈下LED3,4,5,6都沒動作
謝謝您了版主~
都说了,程序应该截图,或者使用编辑框上方的代码:<>这个属性输入你的代码,能让
看帖者舒服,你这样乱七八糟的贴代码,谁愿意看?就更别说帮你解决问题了!请自行修改
一下你的帖子内容。
你的变量定义在函数内,属于栈溢出,把你的数组定义放在函数外部即可解决,例如:
我這邊有試著把變數當作全域變數並且執行後是正常的
可是當我嘗試把變數宣告成float全域變數後
LED又變成沒動作了
因為這兩個變數我要用做FFT運算使用
所以會宣告這兩個變數為float
請問有什麼方法
可解決的嗎?
我還不會編輯您提到的代碼編輯
抱歉了~
謝謝您耐心的看完
箭头处鼠标左键,会弹出一个对话框,在对话框里输入你的代码!
如果你连这个都不懂什么意思,只能说你连发帖的能力都没有!
謝謝您版主~我會使用了
下次不會再犯錯了
详细我不知道,全部定义成float内存消耗会很严重,自行理解"heap/stack"的概念,
FFT也不需要一个2KByte的float类型的数组吧?请自行参考其他的FFT的代码吧!
首先可以去了解一下什么是堆,栈,全局变量,局域变量这几个关系。。。
至于你这个问题,一般编译器设置的栈的容量在多少来着,搞忘记啦,而且是可以更改。。。栈就是用来保存局域变量的,当然了也包括压栈和出栈。。。你这
uint32_t Input_f32[2048];
uint32_t Output_f32 [1024];
两个局域变量太大啦,很显然栈溢出,如果在线调试的话,会看到直接进入HardFault_Handler中断,然后死循环。。。