请选择 进入手机版 | 继续访问电脑版

安富莱电子论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 291|回复: 2
收起左侧

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

[复制链接]

16

主题

187

帖子

219

积分

高级会员

积分
219
发表于 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
回复

使用道具 举报

5532

主题

3万

帖子

4万

积分

管理员

做人第一,工作第二

Rank: 9Rank: 9Rank: 9

积分
44698
QQ
发表于 2018-11-29 02:48:05 | 显示全部楼层
【STM32H743实验例程】实验20:STM32H743移植最新版RTX4,不使用CMSIS-RTOS V1封装层,轻装上阵就是嗨
http://forum.armfly.com/forum.ph ... 6696&fromuid=58
(出处: 安富莱电子论坛)
淘宝小店: https://armfly.taobao.com/
专注,努力,用心的做好每一件事情,Fighting!
回复

使用道具 举报

16

主题

187

帖子

219

积分

高级会员

积分
219
 楼主| 发表于 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|小黑屋|手机版|安富莱电子论坛 ( 鄂ICP备09023347号,公安机关备案号42010602000201 )

GMT+8, 2019-4-23 20:17 , Processed in 0.172103 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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