硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1730|回复: 2
收起左侧

[RL-RTX] 请教个问题 关于RTX4 和HAL 库的使用

[复制链接]

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2018-11-28 17:07:21 | 显示全部楼层 |阅读模式
本帖最后由 在水一方 于 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 = MSP  SP
        MSR     PSP,R0
        LDR     R0,=__cpp(&os_flags)
        LDRB    R0,[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 作为时钟





QQ截图20181128180149.png
QQ截图20181128180215.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2018-11-29 02:48:05 | 显示全部楼层
【STM32H743实验例程】实验20:STM32H743移植最新版RTX4,不使用CMSIS-RTOS V1封装层,轻装上阵就是嗨
http://www.armbbs.cn/forum.php?m ... 6696&fromuid=58
(出处: 安富莱电子论坛)
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
 楼主| 发表于 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,[R0]
CBZ     R0,SysTick_NOP        
        
BL      __cpp(rt_systick)
B          Sys_Switch        
        
SysTick_NOP
         BX      LR                      ; Return to Thread Mode

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 10:16 , Processed in 0.263366 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表