大家好,
我有Nucleo-L4P5ZG,开发环境是WIN10、CubeIde1.4和CubeMx 6.2。
我在尝试调试简单的 FREERTOS 切换 Led 代码时遇到了一个奇怪的行为,这里有详细信息:
1- 我从 Cube Mx 开始,并使用以下配置为 Cube IDE 生成代码:
- 只有 GPIO 引脚 PB7 [LD2= Nucleo 上的蓝色 LED] 配置为输出
- Sysclk = 120 MHz 由 PLLCLK 驱动,PLLCLK 由 MSI = 4MHz 驱动
- 选择 FreeRtos Support 而不创建除 Default 任务之外的任何 OS 资源
- 选择 tiM7 作为系统定时器
就是这样。
2- 我将切换 LED 代码放在默认任务中
- void StartDefaultTask(void *argument)
- {
- /* USER CODE BEGIN 5 */
- /* Infinite loop */
- for(;;)
- {
- osDelay(1000);
- HAL_GPIO_WritePin(GPIOB, LD2_Pin, GPIO_PIN_RESET);
- osDelay(1000);
- HAL_GPIO_WritePin(GPIOB, LD2_Pin, GPIO_PIN_SET);
- }
- /* USER CODE END 5 */
- }
3-一切正常,无需启动调试会话
4-当我开始调试会话时,代码按预期停止在主要功能处,当我按下播放按钮时,Led 开始切换
5- 当我停止并重新启动调试会话时,我注意到代码并没有在 main 函数处停止,并且
- LD2 蓝色 LED 未切换
- LD3 [RED Led on Nucleo] 和 LD8 亮起
6-当我停止并重新启动调试会话时,一切都按预期进行,但必须重复这种情况(一次调试挂起,没有任何效果,然后下一次一切都完美)
我需要知道这种挂起行为背后的原因吗?