eric2013 发表于 2020-9-8 02:11:06

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

我发的例子里面默认都已经做了处理。

AC5,多了个POP




IAR,多了个POP



static/image/hrline/4.gif

后续补充:

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

tx_thread_context_restore.S
tx_thread_context_save.S

官方说明:

此文件仅仅是用于兼容目的,M内核平台已经不再使用。
;/**************************************************************************/
;/*                                                                        */
;/*FUNCTION                                             RELEASE      */
;/*                                                                        */
;/*    _tx_thread_context_save                           Cortex-M0/AC5   */
;/*                                                         6.0.2      */
;/*AUTHOR                                                                */
;/*                                                                        */
;/*    William E. Lamie, Microsoft Corporation                           */
;/*                                                                        */
;/*DESCRIPTION                                                         */
;/*                                                                        */
;/*    This function is only needed for legacy applications and it should*/
;/*    not be called in any new development on a Cortex-M.               */
;/*    This function saves the context of an executing thread in the       */
;/*    beginning of interrupt processing.The function also ensures that*/
;/*    the system stack is used upon return to the calling ISR.            */
;/*                                                                        */
;/*INPUT                                                               */
;/*                                                                        */
;/*    None                                                                */
;/*                                                                        */
;/*OUTPUT                                                                */
;/*                                                                        */
;/*    None                                                                */
;/*                                                                        */
;/*CALLS                                                               */
;/*                                                                        */
;/*    None                                                                */
;/*                                                                        */
;/*CALLED BY                                                             */
;/*                                                                        */
;/*    ISRs                                                                */
;/*                                                                        */
;/*RELEASE HISTORY                                                       */
;/*                                                                        */
;/*    DATE            NAME                      DESCRIPTION             */
;/*                                                                        */
;/*06-30-2020   William E. Lamie         Initial Version 6.0.1         */
;/*08-14-2020   Scott Larson             Modified comment(s), clean up */
;/*                                          whitespace, resulting       */
;/*                                          in version 6.0.2            */
;/*                                                                        */
;/**************************************************************************/







wanglehui_12 发表于 2020-9-8 08:01:01

可以去GitHub上提Issue啊

yklstudent 发表于 2020-9-8 08:38:18

硬汉知道SES下怎么实现调研__nop();函数功能

bear_yh 发表于 2020-9-8 08:41:15

这个bug会导致什么现象和后果?

hpdell 发表于 2020-9-8 09:07:01

研究的很通透啊

migsoft 发表于 2020-9-8 09:19:29

如此核心的代码没有测试过?

eric2013 发表于 2020-9-8 09:47:36

migsoft 发表于 2020-9-8 09:19
如此核心的代码没有测试过?

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

eric2013 发表于 2020-9-8 10:02:10

bear_yh 发表于 2020-9-8 08:41
这个bug会导致什么现象和后果?

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

tx_thread_context_restore.S
tx_thread_context_save.S

eric2013 发表于 2020-9-8 10:08:22

yklstudent 发表于 2020-9-8 08:38
硬汉知道SES下怎么实现调研__nop();函数功能

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

eric2013 发表于 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

ayuanshop 发表于 2020-9-8 10:13:55

我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

eric2013 发表于 2020-9-8 10:19:00

ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

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

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

eric2013 发表于 2020-9-8 10:22:48

ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

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

bear_yh 发表于 2020-9-8 11:08:55

eric2013 发表于 2020-9-8 10:22
确诊了,M内核已经不再使用这个文件了。

      PUBLICOTG_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的时候会用到。硬汉看看

eric2013 发表于 2020-9-8 11:12:13

bear_yh 发表于 2020-9-8 11:08
PUBLICOTG_HS_IRQHandler
OTG_HS_IRQHandler:
; VOID UsbInterruptHandler (VOID)


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

yklstudent 发表于 2020-9-8 11:26:38

eric2013 发表于 2020-9-8 10:08
asm("nop");应该是可以的,你试试。

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

bear_yh 发表于 2020-9-8 13:07:48

eric2013 发表于 2020-9-8 10:19
嗯,M7,M4没用到。可以删掉。

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

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

eric2013 发表于 2020-9-8 14:33:10

bear_yh 发表于 2020-9-8 13:07
哪里实现的啊?请截个图看看


bear_yh 发表于 2020-9-8 14:38:59

eric2013 发表于 2020-9-8 11:12
注释掉即可,内容已经空置了,无需再加

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

eric2013 发表于 2020-9-8 14:43:28

bear_yh 发表于 2020-9-8 14:38
去掉,usbx工作不正常,你再仔细看看

不用,我这就没有加:

你参考下

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

sup999 发表于 2020-9-8 15:56:09

ayuanshop 发表于 2020-9-8 10:13
我也在研究TX的ARM9移植,上下文的保存和复原应该是要用到的呀?FIQ_NES和IRQ_NEST才是可有可无吧

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

see-flying 发表于 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的值没发生变化呢?谢谢!

eric2013 发表于 2021-5-9 18:18:31

see-flying 发表于 2021-5-9 15:43
请问硬汉:在threadx port里的CortexM3/m4的Readme文件里都说了在进入ISR中断服务程序时不需要再调用Contex ...

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

SunHaoArm 发表于 2024-3-13 17:23:40

这两个文件没有调用,因此 _tx_execution_isr_exit 也不会调用,这样一来,M核进入中断总时间的统计功能会不会出问题。我统计的进入中断的总时间一直为0
页: [1]
查看完整版本: ThreadX内核6.0.2官方版代码中IAR和MDK AC5的移植文件tx_thread_context_restore.s有错误【确诊M内核已经不用了】