资深版主
 
- 积分
- 1698
- 金钱
- 1698
- 注册时间
- 2012-5-10
- 在线时间
- 438 小时
|
现象:从bootloader跳过来之后,仿真全部死在 main-》SystemClock_Config-》HAL_RCC_ClockConfig-》HAL_RCC_GetSysClockFreq
调试过程:
不死机操作:main函数中, (SystemClock_Config, while)之间的代码全部注释掉
死机操作:不注释掉 main函数中, (SystemClock_Config, while)之间的代码
现象分析:
死机与不死的区别就是注释掉了一些代码,但是注释掉的代码是在死机语句的后面,理论上是不会对前面造成任何影响。但是现象就是这么神奇,注释掉死机语句后面的代码,程序就ok了
最终解决办法:
加大栈: Stack_Size EQU 0x00000800
结论:
以前使用标准库写了很多比较大的项目,栈一直都是0x400,
这个项目使用H743,没有标准库,使用最新的hal库,而且这还是项目前期,程序在main函数中,就是一些初始化内容,与hal 最接近的地方,使用hal函数最多的地方,以hal库这么冗杂的写法,栈理应紧张
代码如下
- int main(void)
- {
- /* This project template calls firstly two functions in order to configure MPU feature
- and to enable the CPU Cache, respectively MPU_Config() and CPU_CACHE_Enable().
- These functions are provided as template implementation that User may integrate
- in his application, to enhance the performance in case of use of AXI interface
- with several masters. */
- /* Configure the MPU attributes as Write Through for SDRAM*/
- MPU_Config();
- delay_ms(100);
- #if (DEVICE_SOFT_TYPE == SOFT_BOOTLOADER)
- CPU_CACHE_Enable();
- #endif
- /* STM32H7xx HAL library initialization:
- - Configure the Systick to generate an interrupt each 1 msec
- - Set NVIC Group Priority to 4
- - Low Level Initialization
- */
- HAL_Init();
- /* Configure the system clock to 400 MHz */
- //#if (DEVICE_SOFT_TYPE == SOFT_BOOTLOADER)
- SystemClock_Config();
- //#endif
- /****************************************系统硬件初始化*********************************/
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
- __HAL_RCC_GPIOC_CLK_ENABLE();
- __HAL_RCC_GPIOD_CLK_ENABLE();
- __HAL_RCC_GPIOE_CLK_ENABLE();
- __HAL_RCC_GPIOF_CLK_ENABLE();
- __HAL_RCC_GPIOG_CLK_ENABLE();
- Led_GPIOInit(); //初始化led
- Android_Usart_Init();
-
- #if (DEVICE_SOFT_TYPE != SOFT_BOOTLOADER)
- Utils_IO_Init();
- // IWDG_Init(IWDG_PRESCALER_32, 3000); //初始化看门狗,3s
- Sensor_Init();
- Motor_GPIO_Init();
- Timer3_Init();
- OutBar_Usart_Init();
- InnerBar_Usart_Init();
- LeftQr_Usart_Init();
- RightQr_Usart_Init();
- WaterQr_Usart_Init();
- right_adc_io_init();
- right_DA_GPIOInit();
- left_DA_GPIOInit();
- left_adc_io_init();
- Channel_GPIOInit();
- #endif
-
- StartSystemStartTask();
- vTaskStartScheduler();
- while(1);
- }
复制代码
|
|