我使用带有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
}
}
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 !!!