Openstm32 sprintf 崩溃

问题描述 投票:0回答:1

我使用带有Openstm32(GCC编译器)的STM32F407。如果我使用 sprintf("...%d",integer) (调试器直接在 sprintf 处停止),程序似乎会崩溃,但如果我使用 sprintf("string") ,程序似乎工作正常。有人知道可能出了什么问题吗?

int main(void)
{
  TM_MPU6050_t MPU6050_Data;
  char str[120];
  /* Initialize system */
  SystemInit();



  /* Initialize USART, PB6, PB7*/
  TM_USART_Init(USART1, TM_USART_PinsPack_2, 57600);

  /* Initialize MPU6050 sensor SCL: PA8, SDA: PC9 */
  if (TM_MPU6050_Init(&MPU6050_Data, TM_MPU6050_Device_0, TM_MPU6050_Accelerometer_2G, TM_MPU6050_Gyroscope_2000s) != TM_MPU6050_Result_Ok) {
    /* Display error to user */
    TM_USART_Puts(USART1, "MPU6050 Error\n");

    /* Infinite loop */
    while (1);
  }

  while (1) {
    sprintf(str,"Test");
    TM_USART_Puts(USART1, str);
    for(int i=0;i<8000000;i++); //delay

    TM_MPU6050_ReadAll(&MPU6050_Data);
    int i=MPU6050_Data.Accelerometer_X;
    sprintf(str, "Acceleration X: %d",5); //Crash

    TM_USART_Puts(USART1, str);

    for(int i=0;i<8000000;i++); //delay
  }
}
c microcontroller stm32 stm32f4
1个回答
0
投票

也许你在某个地方删除了
sprintf
的记忆

如下:

    char message[32] = {0};
    
    HAL_FLASH_Unlock();
    sprintf(message, "Hello: %s\n", "World"); // Will not cash
    
    FLASH_Erase_Sector(FLASH_SECTOR_1, VOLTAGE_RANGE_1);
    sprintf(message, "Hello: World\n"); // Also worked by compiler-optimization 
    sprintf(message, "Hello: %s\n", "World"); // Crashed here !!!
© www.soinside.com 2019 - 2024. All rights reserved.