nstopb 发表于 2021-4-20 10:57:01

求助RTX iap 跳转问题

本帖最后由 nstopb 于 2021-4-20 12:26 编辑

boot程序跳转功能确认OK 跳转后无法进入main函数,查看内存停在了boot程序的hardfault函数中,于是把boot程序中跳转之前的__set_PRIMASK改为__set_FAULTMASK,跳转后现象变成了 停留在osKernelStart()函数的return __svcKernelStart();有大佬能帮忙吗~~


eric2013 发表于 2021-4-20 15:27:19

方便的话,参考我这个试试

分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97247&fromuid=58
(出处: 硬汉嵌入式论坛)

nstopb 发表于 2021-4-20 15:37:51

eric2013 发表于 2021-4-20 15:27
方便的话,参考我这个试试

分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转


我跳转的程序应该没有问题。似乎是停在了rtx内核启动函数中。请问__svcKernelStart()函数是做什么的, 右键找不到定义。我是在keil中直接启用的rtx,这部分不开源还是我少添加了文件吗。这个是接手了别人的项目之前的工程应该是keil4建立的, 并且是老版本的RTX,和我新建立的工程某些文件不一致,改了好几天了。rtx有些函数扒不到最底层,找原因实在太难了。。。

wlx18682353162 发表于 2021-4-20 16:30:47

MDK5 的以太网组件用过没有

nstopb 发表于 2021-4-20 16:37:24

wlx18682353162 发表于 2021-4-20 16:30
MDK5 的以太网组件用过没有

额,没有。。。这和我的问题有关联吗:dizzy:

apleilx 发表于 2021-4-20 16:56:19

跳转前,修改为特权级,并清空RAM试试

__set_CONTROL(0);

nstopb 发表于 2021-4-21 10:06:49

昨天的问题 终于找到原因了, st和gd的库 定时器中断函数名不一样,本来以为启动文件是cmsis标准 应该统一的,兜兜转转了一天居然发现是这么个小问题。。。。现在任务终于跑起来了,但是os_idle_demon这个空闲中断,优先级却是255,这个会不会有什么问题,请大神或版主能够指导一下,是否需要修改,以及如何修改~~ 谢谢

nstopb 发表于 2021-4-22 12:28:36

apleilx 发表于 2021-4-20 16:56
跳转前,修改为特权级,并清空RAM试试

__set_CONTROL(0);

请问如何清空ram

eric2013 发表于 2021-4-23 08:18:06

nstopb 发表于 2021-4-21 10:06
昨天的问题 终于找到原因了, st和gd的库 定时器中断函数名不一样,本来以为启动文件是cmsis标准 应该统一 ...

CMSIS-RTOS V2封装层空闲任务优先级是1

空闲任务优先级是:
/// Priority values.
typedef enum {
osPriorityNone          =0,         ///< No priority (not initialized).
osPriorityIdle          =1,         ///< Reserved for Idle thread.
osPriorityLow         =8,         ///< Priority: low
osPriorityLow1          =8+1,       ///< Priority: low + 1
osPriorityLow2          =8+2,       ///< Priority: low + 2
osPriorityLow3          =8+3,       ///< Priority: low + 3
osPriorityLow4          =8+4,       ///< Priority: low + 4
osPriorityLow5          =8+5,       ///< Priority: low + 5
osPriorityLow6          =8+6,       ///< Priority: low + 6
osPriorityLow7          =8+7,       ///< Priority: low + 7
osPriorityBelowNormal   = 16,         ///< Priority: below normal
osPriorityBelowNormal1= 16+1,       ///< Priority: below normal + 1
osPriorityBelowNormal2= 16+2,       ///< Priority: below normal + 2
osPriorityBelowNormal3= 16+3,       ///< Priority: below normal + 3
osPriorityBelowNormal4= 16+4,       ///< Priority: below normal + 4
osPriorityBelowNormal5= 16+5,       ///< Priority: below normal + 5
osPriorityBelowNormal6= 16+6,       ///< Priority: below normal + 6
osPriorityBelowNormal7= 16+7,       ///< Priority: below normal + 7
osPriorityNormal      = 24,         ///< Priority: normal
osPriorityNormal1       = 24+1,       ///< Priority: normal + 1
osPriorityNormal2       = 24+2,       ///< Priority: normal + 2
osPriorityNormal3       = 24+3,       ///< Priority: normal + 3
osPriorityNormal4       = 24+4,       ///< Priority: normal + 4
osPriorityNormal5       = 24+5,       ///< Priority: normal + 5
osPriorityNormal6       = 24+6,       ///< Priority: normal + 6
osPriorityNormal7       = 24+7,       ///< Priority: normal + 7
osPriorityAboveNormal   = 32,         ///< Priority: above normal
osPriorityAboveNormal1= 32+1,       ///< Priority: above normal + 1
osPriorityAboveNormal2= 32+2,       ///< Priority: above normal + 2
osPriorityAboveNormal3= 32+3,       ///< Priority: above normal + 3
osPriorityAboveNormal4= 32+4,       ///< Priority: above normal + 4
osPriorityAboveNormal5= 32+5,       ///< Priority: above normal + 5
osPriorityAboveNormal6= 32+6,       ///< Priority: above normal + 6
osPriorityAboveNormal7= 32+7,       ///< Priority: above normal + 7
osPriorityHigh          = 40,         ///< Priority: high
osPriorityHigh1         = 40+1,       ///< Priority: high + 1
osPriorityHigh2         = 40+2,       ///< Priority: high + 2
osPriorityHigh3         = 40+3,       ///< Priority: high + 3
osPriorityHigh4         = 40+4,       ///< Priority: high + 4
osPriorityHigh5         = 40+5,       ///< Priority: high + 5
osPriorityHigh6         = 40+6,       ///< Priority: high + 6
osPriorityHigh7         = 40+7,       ///< Priority: high + 7
osPriorityRealtime      = 48,         ///< Priority: realtime
osPriorityRealtime1   = 48+1,       ///< Priority: realtime + 1
osPriorityRealtime2   = 48+2,       ///< Priority: realtime + 2
osPriorityRealtime3   = 48+3,       ///< Priority: realtime + 3
osPriorityRealtime4   = 48+4,       ///< Priority: realtime + 4
osPriorityRealtime5   = 48+5,       ///< Priority: realtime + 5
osPriorityRealtime6   = 48+6,       ///< Priority: realtime + 6
osPriorityRealtime7   = 48+7,       ///< Priority: realtime + 7
osPriorityISR         = 56,         ///< Reserved for ISR deferred thread.
osPriorityError         = -1,         ///< System cannot determine priority or illegal priority.
osPriorityReserved      = 0x7FFFFFFF///< Prevents enum down-size compiler optimization.
} osPriority_t;

nstopb 发表于 2021-4-25 08:46:33

eric2013 发表于 2021-4-23 08:18
CMSIS-RTOS V2封装层空闲任务优先级是1

空闲任务优先级是:

谢谢版主。我后来仔细看了下, IDLE的任务优先级是0,我是看错了。之前跳转进hardfault的问题找到源头了,是我在boot里面启用了systick ,跳转前关闭就正常了。
页: [1]
查看完整版本: 求助RTX iap 跳转问题