【请教】对数组赋值导致代码运行异常
本帖最后由 Inc_brza 于 2017-12-20 09:30 编辑請教一下!
我使用STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\SysTick範例程式
並在主程式MAIN下宣告了
uint32_t Input_f32;
uint32_t Output_f32 ;
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變得完全不閃爍了呢?
這是什麼原因造成的呢?
本帖最后由 Inc_brza 于 2017-12-20 09:32 编辑
发帖子前请先想清楚自己的问题他是啥,想好标题再发帖
代码最好以截图提供,说明你操作了啥导致啥问题!编码格式注意一下,
别给大家造成眼球污染!帮楼主编辑了一下帖子,楼主请把数组操作屏蔽掉看看是否问题解决!
如果真是数组操作导致的问题,请看一下数组的大小以及数组在哪里定义的。
注意一下栈大小(startup文件可以设置)是否过小!
最好已截图的方式贴出你的操作代码。
版主謝謝您了~
不好意思!我來自台灣~
我看不懂您寫的意思
因為說法不同
不過如果我把
宣告變數拿掉後
執行就是正常的了
請問我要注意startup_stm32f4xx.s的哪個部份呢
謝謝版主這麼熱心的回答
本帖最后由 Inc_brza 于 2017-12-20 10:00 编辑
Leeru 发表于 2017-12-20 09:55
版主謝謝您了~
不好意思!我來自台灣~
我看不懂您寫的意思
额,我也不知道你们对名词的说法,不过大概就是这么个意思,
建议你先把main函数截图放上来另外,我先猜测你的数组是在main函数里声明定义的,你把他拿出来
作为全局变量看看是否还有异常,如果异常解决,那问题点就知道是什么了
本帖最后由 Leeru 于 2017-12-20 10:32 编辑
版主謝謝您了~
底下是程式碼!
int main(void)
{
/*!< At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f4xx.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f4xx.c file
*/
uint16_t i;
//uint32_t Input_f32;
//uint32_t Output_f32 ;
for (i =0 ; i<2048 ; i++)
{
Input_f32=0;
}
/*
for (i =0 ; i<1024 ; i++)
{
Output_f32=0;
}
*/
/* Initialize Leds mounted on STM32F4-Discovery board */
STM_EVAL_LEDInit(LED4);
STM_EVAL_LEDInit(LED3);
STM_EVAL_LEDInit(LED5);
STM_EVAL_LEDInit(LED6);
/* Turn on LED4 and LED5 */
STM_EVAL_LEDOn(LED4);
STM_EVAL_LEDOn(LED5);
/* Setup SysTick Timer for 1 msec interrupts.
------------------------------------------
1. The SysTick_Config() function is a CMSIS function which configure:
- The SysTick Reload register with value passed as function parameter.
- Configure the SysTick IRQ priority to the lowest value (0x0F).
- Reset the SysTick Counter register.
- Configure the SysTick Counter clock source to be Core Clock Source (HCLK).
- Enable the SysTick Interrupt.
- Start the SysTick Counter.
2. You can change the SysTick Clock source to be HCLK_Div8 by calling the
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) just after the
SysTick_Config() function call. The SysTick_CLKSourceConfig() is defined
inside the misc.c file.
3. You can change the SysTick IRQ priority by calling the
NVIC_SetPriority(SysTick_IRQn,...) just after the SysTick_Config() function
call. The NVIC_SetPriority() is defined inside the core_cm4.h file.
4. To adjust the SysTick time base, use the following formula:
Reload Value = SysTick Counter Clock (Hz) xDesired Time base (s)
- Reload Value is the parameter to be passed for SysTick_Config() function
- Reload Value should not exceed 0xFFFFFF
*/
if (SysTick_Config(SystemCoreClock / 1000))
{
/* Capture error */
while (1);
}
while (1)
{
/* 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);
}
}
主要只添加了
uint16_t i;
uint32_t Input_f32;
uint32_t Output_f32 ;
for (i =0 ; i<2048 ; i++)
{
Input_f32=0;
}
就會導致while迴圈下LED3,4,5,6都沒動作
謝謝您了版主~
Leeru 发表于 2017-12-20 10:10
版主謝謝您了~
底下是程式碼!
int main(void)
都说了,程序应该截图,或者使用编辑框上方的代码:<>这个属性输入你的代码,能让
看帖者舒服,你这样乱七八糟的贴代码,谁愿意看?就更别说帮你解决问题了!请自行修改
一下你的帖子内容。
你的变量定义在函数内,属于栈溢出,把你的数组定义放在函数外部即可解决,例如:
uint32_t Input_f32;
uint32_t Output_f32 ;
void main(void)
{
int i = 0;
for (i = 0; i < 2048; i ++) {
Input_f32 = 0;
}
...
} 版主您好~
我這邊有試著把變數當作全域變數並且執行後是正常的
可是當我嘗試把變數宣告成float全域變數後
LED又變成沒動作了
因為這兩個變數我要用做FFT運算使用
所以會宣告這兩個變數為float
請問有什麼方法
可解決的嗎? 版主不好意思~
我還不會編輯您提到的代碼編輯
抱歉了~
謝謝您耐心的看完:loveliness: 请注意:
箭头处鼠标左键,会弹出一个对话框,在对话框里输入你的代码!
如果你连这个都不懂什么意思,只能说你连发帖的能力都没有! Inc_brza 发表于 2017-12-20 10:32
请注意:
箭头处鼠标左键,会弹出一个对话框,在对话框里输入你的代码!
謝謝您版主~我會使用了
下次不會再犯錯了
页:
[1]
2