硬汉嵌入式论坛

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

[RL-RTX] 求助RTX iap 跳转问题

[复制链接]

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2021-4-20 10:57:01 | 显示全部楼层 |阅读模式
本帖最后由 nstopb 于 2021-4-20 12:26 编辑

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


下载 (1).png
下载.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2021-4-20 15:27:19 | 显示全部楼层
方便的话,参考我这个试试

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

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-4-20 15:37:51 | 显示全部楼层
eric2013 发表于 2021-4-20 15:27
方便的话,参考我这个试试

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

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

使用道具 举报

29

主题

177

回帖

264

积分

高级会员

积分
264
发表于 2021-4-20 16:30:47 | 显示全部楼层
MDK5 的以太网组件用过没有
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-4-20 16:37:24 | 显示全部楼层
wlx18682353162 发表于 2021-4-20 16:30
MDK5 的以太网组件用过没有

额,没有。。。这和我的问题有关联吗
回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2021-4-20 16:56:19 | 显示全部楼层
跳转前,修改为特权级,并清空RAM试试

__set_CONTROL(0);
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

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

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-4-22 12:28:36 | 显示全部楼层
apleilx 发表于 2021-4-20 16:56
跳转前,修改为特权级,并清空RAM试试

__set_CONTROL(0);

请问如何清空ram
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106749
QQ
发表于 2021-4-23 08:18:06 | 显示全部楼层
nstopb 发表于 2021-4-21 10:06
昨天的问题 终于找到原因了, st和gd的库 定时器中断函数名不一样,本来以为启动文件是cmsis标准 应该统一 ...

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

空闲任务优先级是:
  1. /// Priority values.
  2. typedef enum {
  3.   osPriorityNone          =  0,         ///< No priority (not initialized).
  4.   osPriorityIdle          =  1,         ///< Reserved for Idle thread.
  5.   osPriorityLow           =  8,         ///< Priority: low
  6.   osPriorityLow1          =  8+1,       ///< Priority: low + 1
  7.   osPriorityLow2          =  8+2,       ///< Priority: low + 2
  8.   osPriorityLow3          =  8+3,       ///< Priority: low + 3
  9.   osPriorityLow4          =  8+4,       ///< Priority: low + 4
  10.   osPriorityLow5          =  8+5,       ///< Priority: low + 5
  11.   osPriorityLow6          =  8+6,       ///< Priority: low + 6
  12.   osPriorityLow7          =  8+7,       ///< Priority: low + 7
  13.   osPriorityBelowNormal   = 16,         ///< Priority: below normal
  14.   osPriorityBelowNormal1  = 16+1,       ///< Priority: below normal + 1
  15.   osPriorityBelowNormal2  = 16+2,       ///< Priority: below normal + 2
  16.   osPriorityBelowNormal3  = 16+3,       ///< Priority: below normal + 3
  17.   osPriorityBelowNormal4  = 16+4,       ///< Priority: below normal + 4
  18.   osPriorityBelowNormal5  = 16+5,       ///< Priority: below normal + 5
  19.   osPriorityBelowNormal6  = 16+6,       ///< Priority: below normal + 6
  20.   osPriorityBelowNormal7  = 16+7,       ///< Priority: below normal + 7
  21.   osPriorityNormal        = 24,         ///< Priority: normal
  22.   osPriorityNormal1       = 24+1,       ///< Priority: normal + 1
  23.   osPriorityNormal2       = 24+2,       ///< Priority: normal + 2
  24.   osPriorityNormal3       = 24+3,       ///< Priority: normal + 3
  25.   osPriorityNormal4       = 24+4,       ///< Priority: normal + 4
  26.   osPriorityNormal5       = 24+5,       ///< Priority: normal + 5
  27.   osPriorityNormal6       = 24+6,       ///< Priority: normal + 6
  28.   osPriorityNormal7       = 24+7,       ///< Priority: normal + 7
  29.   osPriorityAboveNormal   = 32,         ///< Priority: above normal
  30.   osPriorityAboveNormal1  = 32+1,       ///< Priority: above normal + 1
  31.   osPriorityAboveNormal2  = 32+2,       ///< Priority: above normal + 2
  32.   osPriorityAboveNormal3  = 32+3,       ///< Priority: above normal + 3
  33.   osPriorityAboveNormal4  = 32+4,       ///< Priority: above normal + 4
  34.   osPriorityAboveNormal5  = 32+5,       ///< Priority: above normal + 5
  35.   osPriorityAboveNormal6  = 32+6,       ///< Priority: above normal + 6
  36.   osPriorityAboveNormal7  = 32+7,       ///< Priority: above normal + 7
  37.   osPriorityHigh          = 40,         ///< Priority: high
  38.   osPriorityHigh1         = 40+1,       ///< Priority: high + 1
  39.   osPriorityHigh2         = 40+2,       ///< Priority: high + 2
  40.   osPriorityHigh3         = 40+3,       ///< Priority: high + 3
  41.   osPriorityHigh4         = 40+4,       ///< Priority: high + 4
  42.   osPriorityHigh5         = 40+5,       ///< Priority: high + 5
  43.   osPriorityHigh6         = 40+6,       ///< Priority: high + 6
  44.   osPriorityHigh7         = 40+7,       ///< Priority: high + 7
  45.   osPriorityRealtime      = 48,         ///< Priority: realtime
  46.   osPriorityRealtime1     = 48+1,       ///< Priority: realtime + 1
  47.   osPriorityRealtime2     = 48+2,       ///< Priority: realtime + 2
  48.   osPriorityRealtime3     = 48+3,       ///< Priority: realtime + 3
  49.   osPriorityRealtime4     = 48+4,       ///< Priority: realtime + 4
  50.   osPriorityRealtime5     = 48+5,       ///< Priority: realtime + 5
  51.   osPriorityRealtime6     = 48+6,       ///< Priority: realtime + 6
  52.   osPriorityRealtime7     = 48+7,       ///< Priority: realtime + 7
  53.   osPriorityISR           = 56,         ///< Reserved for ISR deferred thread.
  54.   osPriorityError         = -1,         ///< System cannot determine priority or illegal priority.
  55.   osPriorityReserved      = 0x7FFFFFFF  ///< Prevents enum down-size compiler optimization.
  56. } osPriority_t;
复制代码
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
 楼主| 发表于 2021-4-25 08:46:33 | 显示全部楼层
eric2013 发表于 2021-4-23 08:18
CMSIS-RTOS V2封装层空闲任务优先级是1

空闲任务优先级是:

谢谢版主。我后来仔细看了下, IDLE的任务优先级是0,我是看错了。之前跳转进hardfault的问题找到源头了,是我在boot里面启用了systick ,跳转前关闭就正常了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 08:59 , Processed in 0.265795 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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