硬汉嵌入式论坛

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

[ThreadX全家桶] ThreadX内核6.0.2官方版代码中IAR和MDK AC5的移植文件tx_thread_context_restore.s有错误【确诊M内核已经不用了】

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2020-9-8 02:11:06 | 显示全部楼层 |阅读模式
我发的例子里面默认都已经做了处理。

AC5,多了个POP

AC5.png


IAR,多了个POP

iar.png



后续补充:

实际测试发现M内核已经没有再使用这两个文件了,所以无需添加,如果加上了,改不改都行。

tx_thread_context_restore.S
tx_thread_context_save.S

官方说明:

此文件仅仅是用于兼容目的,M内核平台已经不再使用。
  1. ;/**************************************************************************/
  2. ;/*                                                                        */
  3. ;/*  FUNCTION                                               RELEASE        */
  4. ;/*                                                                        */
  5. ;/*    _tx_thread_context_save                           Cortex-M0/AC5     */
  6. ;/*                                                           6.0.2        */
  7. ;/*  AUTHOR                                                                */
  8. ;/*                                                                        */
  9. ;/*    William E. Lamie, Microsoft Corporation                             */
  10. ;/*                                                                        */
  11. ;/*  DESCRIPTION                                                           */
  12. ;/*                                                                        */
  13. ;/*    This function is only needed for legacy applications and it should  */
  14. ;/*    not be called in any new development on a Cortex-M.                 */
  15. ;/*    This function saves the context of an executing thread in the       */
  16. ;/*    beginning of interrupt processing.  The function also ensures that  */
  17. ;/*    the system stack is used upon return to the calling ISR.            */
  18. ;/*                                                                        */
  19. ;/*  INPUT                                                                 */
  20. ;/*                                                                        */
  21. ;/*    None                                                                */
  22. ;/*                                                                        */
  23. ;/*  OUTPUT                                                                */
  24. ;/*                                                                        */
  25. ;/*    None                                                                */
  26. ;/*                                                                        */
  27. ;/*  CALLS                                                                 */
  28. ;/*                                                                        */
  29. ;/*    None                                                                */
  30. ;/*                                                                        */
  31. ;/*  CALLED BY                                                             */
  32. ;/*                                                                        */
  33. ;/*    ISRs                                                                */
  34. ;/*                                                                        */
  35. ;/*  RELEASE HISTORY                                                       */
  36. ;/*                                                                        */
  37. ;/*    DATE              NAME                      DESCRIPTION             */
  38. ;/*                                                                        */
  39. ;/*  06-30-2020     William E. Lamie         Initial Version 6.0.1         */
  40. ;/*  08-14-2020     Scott Larson             Modified comment(s), clean up */
  41. ;/*                                            whitespace, resulting       */
  42. ;/*                                            in version 6.0.2            */
  43. ;/*                                                                        */
  44. ;/**************************************************************************/
复制代码








回复

使用道具 举报

38

主题

291

回帖

405

积分

高级会员

积分
405
发表于 2020-9-8 08:01:01 | 显示全部楼层
可以去GitHub上提Issue啊
回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2020-9-8 08:38:18 | 显示全部楼层
硬汉知道SES下怎么实现调研__nop();函数功能
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-8 08:41:15 | 显示全部楼层
这个bug会导致什么现象和后果?
回复

使用道具 举报

609

主题

3049

回帖

4896

积分

至尊会员

积分
4896
发表于 2020-9-8 09:07:01 | 显示全部楼层
研究的很通透啊
回复

使用道具 举报

1

主题

17

回帖

20

积分

新手上路

积分
20
发表于 2020-9-8 09:19:29 | 显示全部楼层
如此核心的代码没有测试过?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 09:47:36 | 显示全部楼层
migsoft 发表于 2020-9-8 09:19
如此核心的代码没有测试过?

这是port文件,不是核心文件
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 10:02:10 | 显示全部楼层
bear_yh 发表于 2020-9-8 08:41
这个bug会导致什么现象和后果?

实际测试发现这两个文件没有用到。。。

tx_thread_context_restore.S
tx_thread_context_save.S

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 10:08:22 | 显示全部楼层
yklstudent 发表于 2020-9-8 08:38
硬汉知道SES下怎么实现调研__nop();函数功能

asm("nop");应该是可以的,你试试。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 10:08:51 | 显示全部楼层
wanglehui_12 发表于 2020-9-8 08:01
可以去GitHub上提Issue啊

实际测试发现这两个文件没有用到,改不改都行。

tx_thread_context_restore.S
tx_thread_context_save.S
回复

使用道具 举报

5

主题

33

回帖

48

积分

新手上路

积分
48
发表于 2020-9-8 10:13:55 | 显示全部楼层
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 10:19:00 | 显示全部楼层
ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

嗯,M7,M4没用到。可以删掉。

上下文保存和恢复是在调度文件里面实现了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 10:22:48 | 显示全部楼层
ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

确诊了,M内核已经不再使用这个文件了。
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-8 11:08:55 | 显示全部楼层
eric2013 发表于 2020-9-8 10:22
确诊了,M内核已经不再使用这个文件了。

        PUBLIC  OTG_HS_IRQHandler
OTG_HS_IRQHandler:
; VOID UsbInterruptHandler (VOID)
; {
;
        PUSH    {lr}
        BL      _tx_thread_context_save
        BL      _ux_dcd_stm32_interrupt_handler
        B       _tx_thread_context_restore
; }

可以移植usbx的时候会用到。硬汉看看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 11:12:13 | 显示全部楼层
bear_yh 发表于 2020-9-8 11:08
PUBLIC  OTG_HS_IRQHandler
OTG_HS_IRQHandler:
; VOID UsbInterruptHandler (VOID)

注释掉即可,内容已经空置了,无需再加
回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2020-9-8 11:26:38 | 显示全部楼层
eric2013 发表于 2020-9-8 10:08
asm("nop");应该是可以的,你试试。

测试了,确认可以,感谢硬汉
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-8 13:07:48 | 显示全部楼层
eric2013 发表于 2020-9-8 10:19
嗯,M7,M4没用到。可以删掉。

上下文保存和恢复是在调度文件里面实现了。

哪里实现的啊?请截个图看看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 14:33:10 | 显示全部楼层
bear_yh 发表于 2020-9-8 13:07
哪里实现的啊?请截个图看看

QQ截图20200908143251.png
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-8 14:38:59 | 显示全部楼层
eric2013 发表于 2020-9-8 11:12
注释掉即可,内容已经空置了,无需再加

去掉,usbx工作不正常,你再仔细看看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2020-9-8 14:43:28 | 显示全部楼层
bear_yh 发表于 2020-9-8 14:38
去掉,usbx工作不正常,你再仔细看看

不用,我这就没有加:

你参考下

        .global  OTG_FS_IRQHandler
.thumb_func
OTG_FS_IRQHandler:
@ VOID UsbInterruptHandler (VOID)
@ {
@
        PUSH    {lr}
        BL      _ux_dcd_stm32_interrupt_handler
        POP     {lr}
        BX      LR
@ }
回复

使用道具 举报

2

主题

70

回帖

76

积分

初级会员

积分
76
发表于 2020-9-8 15:56:09 | 显示全部楼层
ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

请问用的是ARM9的那个芯片?
回复

使用道具 举报

1

主题

19

回帖

22

积分

新手上路

积分
22
发表于 2021-5-9 15:43:42 | 显示全部楼层
请问硬汉:在threadx port里的CortexM3/m4的Readme文件里都说了在进入ISR中断服务程序时不需要再调用ContexSave/Restore之类的函数了,在任务切换时会在tx_thread_schedule.s里通过调用__tx_ts_handler实现了保存R4~R11到当前线程堆栈上了。我的问题是假如当前在某个线程中,来外部中断了,而此时没有发生线程切换,中断里没有执行保护R4~R11,那怎么保证中断返回后R4~R11的值没发生变化呢?谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
 楼主| 发表于 2021-5-9 18:18:31 | 显示全部楼层
see-flying 发表于 2021-5-9 15:43
请问硬汉:在threadx port里的CortexM3/m4的Readme文件里都说了在进入ISR中断服务程序时不需要再调用Contex ...

这个用户不用管,编译器会编译中断服务程序,这个程序里面用到没有自动入栈的寄存器,他会先做入栈处理。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-3-13 17:23:40 | 显示全部楼层
这两个文件没有调用,因此 _tx_execution_isr_exit 也不会调用,这样一来,M核进入中断总时间的统计功能会不会出问题。我统计的进入中断的总时间一直为0
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 00:11 , Processed in 0.322598 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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