请教个问题 关于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 作为时钟
【STM32H743实验例程】实验20:STM32H743移植最新版RTX4,不使用CMSIS-RTOS V1封装层,轻装上阵就是嗨
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86696&fromuid=58
(出处: 安富莱电子论坛)
本帖最后由 在水一方 于 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]