硬汉嵌入式论坛

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

[ThreadX全家桶] 谈一下为什么ThreadX为什么要接管xxx.S启动文件

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
发表于 2020-8-10 13:01:46 | 显示全部楼层 |阅读模式
看了下上周发布的新版,文件tx_initialize_low_level.s依然接管了xxx.S启动文件已经实现的功能。

从ThreadX的角度来说,他们保证了自己发布新软件包的独立性,直接面向内核出,不需要再面向各个厂家单独出一个系列。

那样工作量就超级大,各大厂家加起来有几千个上万的启动文件。要他们专门去做适配,基本做不到的。

所以他们打算接管xxxx.S启动文件,但接管的文件仅写了几个重要的中断向量表入口。

这就给让移植的人非常不方便。所以我们做的例子不接管XXX.S启动文件了,方便大家移植。

两个都添加进去会提示冲突,必须得二选一:


下面是tx_initialize_low_level.s修改后的,xxx.S启动文件不做任何修改,继续使用。
  1. ;/**************************************************************************/
  2. ;/*                                                                        */
  3. ;/*       Copyright (c) Microsoft Corporation. All rights reserved.        */
  4. ;/*                                                                        */
  5. ;/*       This software is licensed under the Microsoft Software License   */
  6. ;/*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
  7. ;/*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
  8. ;/*       and in the root directory of this software.                      */
  9. ;/*                                                                        */
  10. ;/**************************************************************************/
  11. ;
  12. ;
  13. ;/**************************************************************************/
  14. ;/**************************************************************************/
  15. ;/**                                                                       */
  16. ;/** ThreadX Component                                                     */
  17. ;/**                                                                       */
  18. ;/**   Initialize                                                          */
  19. ;/**                                                                       */
  20. ;/**************************************************************************/
  21. ;/**************************************************************************/
  22. ;
  23. ;#define TX_SOURCE_CODE
  24. ;
  25. ;
  26. ;/* Include necessary system files.  */
  27. ;
  28. ;#include "tx_api.h"
  29. ;#include "tx_initialize.h"
  30. ;#include "tx_thread.h"
  31. ;#include "tx_timer.h"
  32. ;
  33. ;
  34.     IMPORT  _tx_thread_system_stack_ptr
  35.     IMPORT  _tx_initialize_unused_memory
  36.     IMPORT  _tx_thread_context_save
  37.     IMPORT  _tx_thread_context_restore
  38.     IMPORT  _tx_timer_interrupt
  39.     IMPORT  __main
  40.         IMPORT        __Vectors
  41.         IMPORT        __initial_sp

  42.     IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
  43.     IMPORT  _tx_execution_isr_exit
  44.         IMPORT  _tx_execution_isr_enter
  45.     ENDIF        
  46. ;
  47. ;
  48. SYSTEM_CLOCK        EQU     400000000
  49. SYSTICK_CYCLES      EQU     ((SYSTEM_CLOCK / 1000) -1)
  50. ;
  51. ;     
  52. ;
  53. ;
  54.     AREA ||.text||, CODE, READONLY
  55.         PRESERVE8

  56. ;/**************************************************************************/
  57. ;/*                                                                        */
  58. ;/*  FUNCTION                                               RELEASE        */
  59. ;/*                                                                        */
  60. ;/*    _tx_initialize_low_level                          Cortex-M7/AC5     */
  61. ;/*                                                           6.0.1        */
  62. ;/*  AUTHOR                                                                */
  63. ;/*                                                                        */
  64. ;/*    William E. Lamie, Microsoft Corporation                             */
  65. ;/*                                                                        */
  66. ;/*  DESCRIPTION                                                           */
  67. ;/*                                                                        */
  68. ;/*    This function is responsible for any low-level processor            */
  69. ;/*    initialization, including setting up interrupt vectors, setting     */
  70. ;/*    up a periodic timer interrupt source, saving the system stack       */
  71. ;/*    pointer for use in ISR processing later, and finding the first      */
  72. ;/*    available RAM memory address for tx_application_define.             */
  73. ;/*                                                                        */
  74. ;/*  INPUT                                                                 */
  75. ;/*                                                                        */
  76. ;/*    None                                                                */
  77. ;/*                                                                        */
  78. ;/*  OUTPUT                                                                */
  79. ;/*                                                                        */
  80. ;/*    None                                                                */
  81. ;/*                                                                        */
  82. ;/*  CALLS                                                                 */
  83. ;/*                                                                        */
  84. ;/*    None                                                                */
  85. ;/*                                                                        */
  86. ;/*  CALLED BY                                                             */
  87. ;/*                                                                        */
  88. ;/*    _tx_initialize_kernel_enter           ThreadX entry function        */
  89. ;/*                                                                        */
  90. ;/*  RELEASE HISTORY                                                       */
  91. ;/*                                                                        */
  92. ;/*    DATE              NAME                      DESCRIPTION             */
  93. ;/*                                                                        */
  94. ;/*  06-30-2020     William E. Lamie         Initial Version 6.0.1         */
  95. ;/*                                                                        */
  96. ;/**************************************************************************/
  97. ;VOID   _tx_initialize_low_level(VOID)
  98. ;{
  99.     EXPORT  _tx_initialize_low_level
  100. _tx_initialize_low_level
  101. ;
  102. ;    /* Disable interrupts during ThreadX initialization.  */
  103. ;
  104.     CPSID   i
  105. ;
  106. ;    /* Set base of available memory to end of non-initialised RAM area.  */
  107. ;     
  108.     LDR     r0, =_tx_initialize_unused_memory       ; Build address of unused memory pointer
  109.     LDR     r1, =__initial_sp                       ; Build first free address
  110.     ADD     r1, r1, #4                              ;
  111.     STR     r1, [r0]                                ; Setup first unused memory pointer
  112. ;
  113. ;    /* Setup Vector Table Offset Register.  */
  114. ;   
  115.     MOV     r0, #0xE000E000                         ; Build address of NVIC registers
  116.     LDR     r1, =__Vectors                          ; Pickup address of vector table
  117.     STR     r1, [r0, #0xD08]                        ; Set vector table address   
  118. ;
  119. ;    /* Enable the cycle count register.  */
  120. ;
  121. ;    LDR     r0, =0xE0001000                         ; Build address of DWT register
  122. ;    LDR     r1, [r0]                                ; Pickup the current value
  123. ;    ORR     r1, r1, #1                              ; Set the CYCCNTENA bit
  124. ;    STR     r1, [r0]                                ; Enable the cycle count register
  125. ;
  126. ;    /* Set system stack pointer from vector value.  */
  127. ;
  128.     LDR     r0, =_tx_thread_system_stack_ptr        ; Build address of system stack pointer
  129.     LDR     r1, =__Vectors                          ; Pickup address of vector table
  130.     LDR     r1, [r1]                                ; Pickup reset stack pointer
  131.     STR     r1, [r0]                                ; Save system stack pointer
  132. ;
  133. ;    /* Configure SysTick.  */
  134. ;
  135.     MOV     r0, #0xE000E000                         ; Build address of NVIC registers
  136.     LDR     r1, =SYSTICK_CYCLES
  137.     STR     r1, [r0, #0x14]                         ; Setup SysTick Reload Value
  138.     MOV     r1, #0x7                                ; Build SysTick Control Enable Value
  139.     STR     r1, [r0, #0x10]                         ; Setup SysTick Control
  140. ;
  141. ;    /* Configure handler priorities.  */
  142. ;
  143.     LDR     r1, =0x00000000                         ; Rsrv, UsgF, BusF, MemM
  144.     STR     r1, [r0, #0xD18]                        ; Setup System Handlers 4-7 Priority Registers

  145.     LDR     r1, =0xFF000000                         ; SVCl, Rsrv, Rsrv, Rsrv
  146.     STR     r1, [r0, #0xD1C]                        ; Setup System Handlers 8-11 Priority Registers
  147.                                                     ; Note: SVC must be lowest priority, which is 0xFF

  148.     LDR     r1, =0x40FF0000                         ; SysT, PnSV, Rsrv, DbgM
  149.     STR     r1, [r0, #0xD20]                        ; Setup System Handlers 12-15 Priority Registers
  150.                                                     ; Note: PnSV must be lowest priority, which is 0xFF
  151. ;
  152. ;    /* Return to caller.  */
  153. ;   
  154.     BX      lr
  155. ;}     
  156. ;
  157. ;
  158. ;/* Define shells for each of the unused vectors.  */
  159. ;
  160.     EXPORT  __tx_BadHandler
  161. __tx_BadHandler
  162.     B       __tx_BadHandler

  163.     EXPORT  __tx_SVCallHandler
  164. __tx_SVCallHandler
  165.     B       __tx_SVCallHandler

  166.     EXPORT  __tx_IntHandler
  167. __tx_IntHandler
  168. ; VOID InterruptHandler (VOID)
  169. ; {

  170.     PUSH    {r0, lr}
  171. ;    /* Do interrupt handler work here */
  172. ;    /* .... */
  173.         POP     {r0, lr}
  174.     BX      LR
  175. ; }

  176.     EXPORT  __tx_SysTickHandler
  177.         EXPORT  SysTick_Handler
  178. __tx_SysTickHandler
  179. SysTick_Handler
  180. ; VOID TimerInterruptHandler (VOID)
  181. ; {
  182. ;
  183.     PUSH    {r0, lr}

  184. IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
  185.         BL      _tx_execution_isr_enter
  186. ENDIF
  187.         BL      _tx_timer_interrupt
  188. IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
  189.         BL      _tx_execution_isr_exit
  190. ENDIF        
  191.     POP     {r0, lr}
  192.     BX      LR
  193. ; }

  194.     EXPORT  __tx_NMIHandler
  195. __tx_NMIHandler
  196.     B       __tx_NMIHandler

  197.     EXPORT  __tx_DBGHandler
  198. __tx_DBGHandler
  199.     B       __tx_DBGHandler

  200.     ALIGN
  201.     LTORG
  202.     END

复制代码






回复

使用道具 举报

27

主题

95

回帖

181

积分

初级会员

积分
181
发表于 2020-8-10 13:57:01 | 显示全部楼层
对于我们而言只需要用ST提供的.S文件就行
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-8-10 15:35:13 | 显示全部楼层
两个都添加进去会提示冲突,必须得二选一:
QQ截图20200810153534.png


回复

使用道具 举报

8

主题

104

回帖

138

积分

初级会员

积分
138
发表于 2020-8-10 16:12:47 | 显示全部楼层
赶上硬汉哥思考了
回复

使用道具 举报

3

主题

45

回帖

54

积分

初级会员

积分
54
发表于 2020-8-10 17:26:53 | 显示全部楼层
又可以直接用上了
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2020-8-11 08:39:33 | 显示全部楼层
等例程,白剽
回复

使用道具 举报

6

主题

19

回帖

37

积分

新手上路

积分
37
发表于 2020-8-13 15:39:00 | 显示全部楼层
请问M3内核的怎么改?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-8-13 15:42:36 | 显示全部楼层
炮灰向前冲 发表于 2020-8-13 15:39
请问M3内核的怎么改?

此贴,一样:

做了一个ThreadX的MDK AC5版底层移植修正版
http://www.armbbs.cn/forum.php?m ... 9315&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

6

主题

19

回帖

37

积分

新手上路

积分
37
发表于 2020-8-13 16:01:25 | 显示全部楼层
出现PendSV_Handler和SysTick_Handler重复定义了,请问下我要删除哪里面的?
微信截图_20200813160008.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-8-13 16:11:39 | 显示全部楼层
炮灰向前冲 发表于 2020-8-13 16:01
出现PendSV_Handler和SysTick_Handler重复定义了,请问下我要删除哪里面的?

stm32f10x_it.c里面的
回复

使用道具 举报

0

主题

47

回帖

47

积分

新手上路

积分
47
发表于 2020-8-20 09:56:05 | 显示全部楼层
eric2013 发表于 2020-8-13 15:42
此贴,一样:

做了一个ThreadX的MDK AC5版底层移植修正版

ARM9内核在AC5环境下也可以直接用这个文件嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-8-20 12:40:14 | 显示全部楼层
qzg19890118 发表于 2020-8-20 09:56
ARM9内核在AC5环境下也可以直接用这个文件嘛

6.0.2里面有ARM9的PORT文件
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-7 16:31:46 | 显示全部楼层
IAR没有这个问题,直接使用ST的,不用改,爽得很
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-9-8 00:45:06 | 显示全部楼层
bear_yh 发表于 2020-9-7 16:31
IAR没有这个问题,直接使用ST的,不用改,爽得很

IAR版的有个小bug,单独开个帖子,我说下这个问题。
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-9-8 08:37:52 | 显示全部楼层
eric2013 发表于 2020-9-8 00:45
IAR版的有个小bug,单独开个帖子,我说下这个问题。

没发现小bug啊,帖子在哪?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-9-8 09:45:41 | 显示全部楼层
bear_yh 发表于 2020-9-8 08:37
没发现小bug啊,帖子在哪?

ThreadX内核6.0.2官方版代码中IAR和MDK AC5的移植文件tx_thread_context_restore.s里面都有个小错误
http://www.armbbs.cn/forum.php?m ... 9853&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

专业做地暖控制器

积分
76
发表于 2020-12-9 13:30:13 | 显示全部楼层
硬汉大哥 ,如果换其他型号的mcu,比如GD  M4核的tx_initialize_low_level.s这个文件还可以用不,能开个怎么修改这个文件的帖子吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-12-9 14:37:10 | 显示全部楼层
chen84992805 发表于 2020-12-9 13:30
硬汉大哥 ,如果换其他型号的mcu,比如GD  M4核的tx_initialize_low_level.s这个文件还可以用不,能开个怎么修 ...

最简单的是用此贴的方案

说干就干,修改ThreadX内核移植的tx_initialize_low_level.s汇编文件为C文件
http://www.armbbs.cn/forum.php?m ... 0053&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

专业做地暖控制器

积分
76
发表于 2020-12-9 15:16:15 | 显示全部楼层
eric2013 发表于 2020-12-9 14:37
最简单的是用此贴的方案

说干就干,修改ThreadX内核移植的tx_initialize_low_level.s汇编文件为C文件
...

看这个帖子M核的芯片都按照tx_initialize_low_level.c的这个模板修改都行 是吧
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

专业做地暖控制器

积分
76
发表于 2020-12-9 15:18:23 | 显示全部楼层
顺便问一下FreeRTOS和uCOS_III的最新教程,都在V4版本的这个资料里面吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-12-9 15:37:28 | 显示全部楼层
chen84992805 发表于 2020-12-9 15:18
顺便问一下FreeRTOS和uCOS_III的最新教程,都在V4版本的这个资料里面吗

V4版本是什么? V4开发板?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-12-9 15:37:44 | 显示全部楼层
chen84992805 发表于 2020-12-9 15:16
看这个帖子M核的芯片都按照tx_initialize_low_level.c的这个模板修改都行 是吧

都可以用。
回复

使用道具 举报

10

主题

46

回帖

76

积分

初级会员

专业做地暖控制器

积分
76
发表于 2020-12-9 17:12:54 | 显示全部楼层
eric2013 发表于 2020-12-9 15:37
V4版本是什么? V4开发板?

V4开发板,发现V6开发板也有FreeRTOS的教程,哪套板子里面的教程是最新的,FreeRTOS的入门手册和 API 参考手册电子板,论坛上还有没,PDF上的链接失效了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2020-12-9 17:55:42 | 显示全部楼层
chen84992805 发表于 2020-12-9 17:12
V4开发板,发现V6开发板也有FreeRTOS的教程,哪套板子里面的教程是最新的,FreeRTOS的入门手册和 API 参考手 ...

1、V4,V5和V6是一样的:
【安富莱】FreeRTOS操作系统教程发布,支持F103,F407和F429,配套145个例子,1200页教程
http://www.armbbs.cn/forum.php?mod=viewthread&tid=17658

2、这个自行到FreeRTOS的官网下载即可
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-3-16 23:16:20 | 显示全部楼层
..\Threadx\ports\cortex_m4\ac5\src\tx_timer_interrupt.s(68): error: A1163E: Unknown opcode CALLED , expecting opcode or Macro        //为啥我的会有这个问题啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107012
QQ
 楼主| 发表于 2023-3-17 11:55:07 | 显示全部楼层
masure 发表于 2023-3-16 23:16
..\Threadx\ports\cortex_m4\ac5\src\tx_timer_interrupt.s(68): error: A1163E: Unknown opcode CALLED ,  ...

一楼末尾,着重说明看下

ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法用,AC5的汇编代码里面搞了个#if,#endif
https://www.armbbs.cn/forum.php? ... 7261&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-3-17 14:19:42 | 显示全部楼层
eric2013 发表于 2023-3-17 11:55
一楼末尾,着重说明看下

ThreadX内核每次升级的MDK AC5移植代码是没法直接使用的,这次6.1.7更是没法 ...

感谢回复,刚开始学习,目前先用HAL库学习了,Threadx和您的版本一致了,暂时没有问题,我再仔细看看教程;
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-3-18 09:12:54 | 显示全部楼层
masure 发表于 2023-3-17 14:19
感谢回复,刚开始学习,目前先用HAL库学习了,Threadx和您的版本一致了,暂时没有问题,我再仔细看看教程 ...

您好,历时三天已经把STM32F407单片机的HAL库与标准库Threadx移植完成了,目前建了两个任务,运行测试很正常,tx_thread_sleep延时也是准的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 09:29 , Processed in 0.257910 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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