ST意法半导体
直播中

王尚岱

8年用户 1483经验值
擅长:电源/新能源
私信 关注
[问答]

为什么我无法在STM32MP157C-DK2上运行使用FreeRTOS代码呢

我正在使用 STM32MP157c-DK2。所有示例都运行良好,但现在我想使用自定义代码。我使用 CubeMX 为开发板生成了一些代码。我使用了默认设置并另外启用了 FreeRTOS。我编译生成的设备树文件并推送到板子上。之后,我在 A7 处理器上启动 Linux,并使用 remoteproc 在 M4 处理器上启动我编译的 FreeRTOS 代码。应用程序崩溃了。
我使用 eclipse 调试器来定位问题:在尝试启动第一个 RTOS 任务时,在调用 port.c 中的函数 prvPortStartFirstTask(void) 时应用程序崩溃。作为调试器给我的错误消息
  • Error: stm32mp15x.cpu2 -- clearing lockup after double fault
  • Polling target stm32mp15x.cpu2 failed, trying to reexamine
我没有更改从 CubeMX 生成的代码中的一行。为什么我的应用程序崩溃有什么建议?谢

回帖(1)

张立

2022-12-28 14:29:51
在生产模式(m4 用作 copro)中将计时器用作 FreeRTOS 的系统时,存在一些已知问题。它应该在未来的版本中解决。
一旦它说:
1 - 我建议在您的源代码中添加以下补丁,如下所示:(补丁类似于 git diff 方式,即添加 (+) 和删除 (-))


  • 在文件stm32wbxx_hal_timebase_tim.c 中:(应该是 stm32mp1xx_hal_timebase_tim.c ...)

- RCC_ClkInitTypeDef clkconfig;
- uint32_t pFLatency;
__HAL_RCC_TIM7_CLK_ENABLE();
+ __HAL_RCC_TIM7_FORCE_RESET();
+ __HAL_RCC_TIM7_RELEASE_RESET();
- /* 获取时钟配置 */
- HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);
  /* 计算 TIM7 时钟 */
- uwTimclock = HAL_RCC_GetPCLK1Freq();
+ uwTimclock = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_TIM7);


  • 在文件stm32mp1xx_it.c 中

- HAL_TIM_IRQHandler(&htim7);
+ if (htim7.Instance != NULL) {
+ HAL_TIM_IRQHandler(&htim7);
+ }
+ 否则 {
+ /* 禁用 TIM7 全局中断 */
+ HAL_NVIC_DisableIRQ(TIM7_IRQn);
+ }


  • 在文件FreeRTOSConfig.h中,请确保注释以下行:

/* 重要提示:当与 STM32Cube 固件一起使用时,必须注释此定义,
       防止覆盖 STM32Cube HAL 中定义的 SysTick_Handler */
-   #define xPortSysTickHandler SysTick_Handler
+ /* #define xPortSysTickHandler SysTick_Handler */
2 - 我还建议您在目标示例中添加脚本fw_cortex_m4.sh以在命令行中启动/停止 fw,因为从 stm32cubemx 生成代码时似乎未提供该脚本。您可以从示例的根路径中的任何其他示例复制它
举报

更多回帖

发帖
×
20
完善资料,
赚取积分