Leeru 发表于 2017-12-20 09:19:59

【请教】对数组赋值导致代码运行异常

本帖最后由 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:27:27

本帖最后由 Inc_brza 于 2017-12-20 09:32 编辑

发帖子前请先想清楚自己的问题他是啥,想好标题再发帖
代码最好以截图提供,说明你操作了啥导致啥问题!编码格式注意一下,
别给大家造成眼球污染!帮楼主编辑了一下帖子,楼主请把数组操作屏蔽掉看看是否问题解决!
如果真是数组操作导致的问题,请看一下数组的大小以及数组在哪里定义的。
注意一下栈大小(startup文件可以设置)是否过小!
最好已截图的方式贴出你的操作代码。

Leeru 发表于 2017-12-20 09:55:06

版主謝謝您了~
不好意思!我來自台灣~
我看不懂您寫的意思
因為說法不同
不過如果我把
宣告變數拿掉後
執行就是正常的了
請問我要注意startup_stm32f4xx.s的哪個部份呢
謝謝版主這麼熱心的回答

Inc_brza 发表于 2017-12-20 09:58:50

本帖最后由 Inc_brza 于 2017-12-20 10:00 编辑

Leeru 发表于 2017-12-20 09:55
版主謝謝您了~
不好意思!我來自台灣~
我看不懂您寫的意思

额,我也不知道你们对名词的说法,不过大概就是这么个意思,
建议你先把main函数截图放上来另外,我先猜测你的数组是在main函数里声明定义的,你把他拿出来
作为全局变量看看是否还有异常,如果异常解决,那问题点就知道是什么了

Leeru 发表于 2017-12-20 10:10:43

本帖最后由 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都沒動作

謝謝您了版主~

Inc_brza 发表于 2017-12-20 10:15:43

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;
    }
    ...
}

Leeru 发表于 2017-12-20 10:21:52

版主您好~
我這邊有試著把變數當作全域變數並且執行後是正常的
可是當我嘗試把變數宣告成float全域變數後
LED又變成沒動作了
因為這兩個變數我要用做FFT運算使用
所以會宣告這兩個變數為float
請問有什麼方法
可解決的嗎?

Leeru 发表于 2017-12-20 10:24:01

版主不好意思~
我還不會編輯您提到的代碼編輯
抱歉了~
謝謝您耐心的看完:loveliness:

Inc_brza 发表于 2017-12-20 10:32:51

请注意:

箭头处鼠标左键,会弹出一个对话框,在对话框里输入你的代码!
如果你连这个都不懂什么意思,只能说你连发帖的能力都没有!

Leeru 发表于 2017-12-20 10:35:19

Inc_brza 发表于 2017-12-20 10:32
请注意:

箭头处鼠标左键,会弹出一个对话框,在对话框里输入你的代码!


謝謝您版主~我會使用了
下次不會再犯錯了
页: [1] 2
查看完整版本: 【请教】对数组赋值导致代码运行异常