在水一方 发表于 2018-11-28 17:07:21

请教个问题 关于RTX4 和HAL 库的使用

本帖最后由 在水一方 于 2018-11-28 19:57 编辑

int main(void)
{
      Bsp_init();
      
         os_sys_init_user (AppTaskStart,         
                        5,                     
                        &AppStartTaskStk,         
                        sizeof(AppStartTaskStk));
}

我在 os_sys_init_user 函数前面使用 HAL_Delay 函数,
会造成 os_sys_init_user函数在
__asm void os_set_env (void) {
   /* Switch to Unprivileged/Privileged Thread mode, use PSP. */
      MOV   R0,SP                   ; PSP = MSPSP
      MSR   PSP,R0
      LDR   R0,=__cpp(&os_flags)
      LDRB    R0,
      LSLS    R0,#31
      MOVNE   R0,#0x02                ; Privileged Thread mode, use PSP
      MOVEQ   R0,#0x03                ; Unprivileged Thread mode, use PSP
      MSR   CONTROL,R0
      BX      LR   这里进入段错误   不添加HAL_Delay有时候也会出现,但是逐步调试不会出现问题

      ALIGN
}。
FORCED位 错误

在 AppTaskStart 函数中使用 就没有问题 。
HAL_Delay使用的TIM7 作为时钟





eric2013 发表于 2018-11-29 02:48:05

【STM32H743实验例程】实验20:STM32H743移植最新版RTX4,不使用CMSIS-RTOS V1封装层,轻装上阵就是嗨
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86696&fromuid=58
(出处: 安富莱电子论坛)

在水一方 发表于 2018-11-29 10:02:53

本帖最后由 在水一方 于 2018-11-29 11:20 编辑

eric2013 发表于 2018-11-29 02:48
【STM32H743实验例程】实验20:STM32H743移植最新版RTX4,不使用CMSIS-RTOS V1封装层,轻装上阵就是嗨
htt ...
找到原因了,因为使用的HAL有bootloader里面使用了滴答定时器,在进入APP的时候没有关闭,所以 产生了错误的运行顺序,在rtx初始化的时候会初始化 滴答在进行操作了
解决方法:

1.在底层和应用层 HAL的 时钟 都不实用 滴答不去初始化滴答定时器。 使用 tim6 或者 tim7 作为HAL的时钟

2.修改 RTX 的源码rt_sys_init 函数中    rt_os_running = 1; 添加标志位在系统初始化完成之后再进行 任务切换功能
os_tick_irqn = os_tick_init ();
if (os_tick_irqn >= 0) {
   OS_X_INIT((U32)os_tick_irqn);
}
rt_os_running = 1;

在 __asm void SysTick_Handler (void) 添加 代码
LDR   R0,=__cpp(&rt_os_running)
LDRB   R0,
CBZ   R0,SysTick_NOP      
      
BL      __cpp(rt_systick)
B          Sys_Switch      
      
SysTick_NOP
         BX      LR                      ; Return to Thread Mode

页: [1]
查看完整版本: 请教个问题 关于RTX4 和HAL 库的使用