硬汉嵌入式论坛

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

[ThreadX全家桶] 做了一个ThreadX的MDK AC5版底层移植修正版

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2020-8-11 01:27:06 | 显示全部楼层 |阅读模式


为什么要修正:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=99306


修正后:

  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.                
  43. ;
  44. ;
  45. SYSTEM_CLOCK        EQU     400000000
  46. SYSTICK_CYCLES      EQU     ((SYSTEM_CLOCK / 1000) -1)
  47. ;
  48. ;     
  49. ;
  50. ;
  51.     AREA ||.text||, CODE, READONLY
  52.         PRESERVE8

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

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

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

  160.     EXPORT  __tx_SVCallHandler
  161. __tx_SVCallHandler
  162.     B       __tx_SVCallHandler

  163.     EXPORT  __tx_IntHandler
  164. __tx_IntHandler
  165. ; VOID InterruptHandler (VOID)
  166. ; {

  167.     PUSH    {r0, lr}
  168. ;    /* Do interrupt handler work here */
  169. ;    /* .... */
  170.         POP     {r0, lr}
  171.     BX      LR
  172. ; }

  173.     EXPORT  __tx_SysTickHandler
  174.         EXPORT  SysTick_Handler
  175. __tx_SysTickHandler
  176. SysTick_Handler
  177. ; VOID TimerInterruptHandler (VOID)
  178. ; {
  179. ;
  180.     PUSH    {r0, lr}
  181. ;        BL      _tx_execution_isr_enter            
  182.         BL      _tx_timer_interrupt
  183. ;        BL      _tx_execution_isr_exit
  184.     POP     {r0, lr}
  185.     BX      LR
  186. ; }

  187.     EXPORT  __tx_NMIHandler
  188. __tx_NMIHandler
  189.     B       __tx_NMIHandler

  190.     EXPORT  __tx_DBGHandler
  191. __tx_DBGHandler
  192.     B       __tx_DBGHandler

  193.     ALIGN
  194.     LTORG
  195.     END

复制代码


回复

使用道具 举报

8

主题

104

回帖

138

积分

初级会员

积分
138
发表于 2020-8-11 09:37:29 | 显示全部楼层
把 .thumb_func 删掉,把@改成了;,只有这些吗,没看出来其它不同的呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-11 09:42:42 | 显示全部楼层
由崎星空 发表于 2020-8-11 09:37
把 .thumb_func 删掉,把@改成了;,只有这些吗,没看出来其它不同的呢

改了很多,左侧是原始的,右侧是修改的
1.png
回复

使用道具 举报

8

主题

104

回帖

138

积分

初级会员

积分
138
发表于 2020-8-11 10:12:27 | 显示全部楼层
eric2013 发表于 2020-8-11 09:42
改了很多,左侧是原始的,右侧是修改的

好像咋们说的不是一个文件,我在git上面下了一个STM32L475的例程有IAR和CubeIDE的,里面有2个启动文件,其中一个就是初始化ThreadX底层的.s文件,我看错以为哥你改的是这个文件 微信截图_20200811100913.png


回复

使用道具 举报

8

主题

104

回帖

138

积分

初级会员

积分
138
发表于 2020-8-11 10:13:56 | 显示全部楼层
想把这两个文件整合是吧。明白了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-11 10:31:11 | 显示全部楼层
由崎星空 发表于 2020-8-11 10:13
想把这两个文件整合是吧。明白了

xxx.S芯片原有的启动文件保持不变,仅修改下ThreadX提供的tx_initialize_low_level.s
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
发表于 2020-8-11 11:10:46 | 显示全部楼层
有MDK AC5版例程下载吗?AC6改的太多了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-11 11:16:34 | 显示全部楼层
rgzdb 发表于 2020-8-11 11:10
有MDK AC5版例程下载吗?AC6改的太多了。

这周发布首版ThreadX GUIX教程

届时全部上线。
回复

使用道具 举报

3

主题

1231

回帖

1240

积分

至尊会员

积分
1240
发表于 2020-8-11 15:25:32 | 显示全部楼层
eric2013 发表于 2020-8-11 11:16
这周发布首版ThreadX GUIX教程

届时全部上线。

太给力了,硬汉大哥
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2020-8-11 21:00:23 | 显示全部楼层
你这个与我修改的那个没有啥区别。。。。我之前传到论坛里的那个就是F7的
回复

使用道具 举报

17

主题

132

回帖

183

积分

初级会员

积分
183
发表于 2020-8-11 21:14:47 | 显示全部楼层
给力,等待中。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-11 22:56:47 | 显示全部楼层
yjwpm 发表于 2020-8-11 21:00
你这个与我修改的那个没有啥区别。。。。我之前传到论坛里的那个就是F7的

这个
BL      _tx_execution_isr_enter  

BL      _tx_execution_isr_exit
你那边能加上AC5的汇编条件编译不
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2020-8-12 17:25:48 | 显示全部楼层
eric2013 发表于 2020-8-11 22:56
这个
BL      _tx_execution_isr_enter  

可以的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-12 17:43:29 | 显示全部楼层

可以了,发现是这个问题
QQ截图20200812174320.png
回复

使用道具 举报

16

主题

203

回帖

251

积分

高级会员

积分
251
发表于 2020-8-13 07:52:48 | 显示全部楼层
eric2013 发表于 2020-8-12 17:43
可以了,发现是这个问题

对的,我这边也是空格了。。。 www.PNG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-8-13 11:45:32 | 显示全部楼层
yjwpm 发表于 2020-8-13 07:52
对的,我这边也是空格了。。。

找到根源了

邪门了,MDK AC5汇编条件编译语句IFEF和ENDIF不能挨着左侧边界,否则报错
http://www.armbbs.cn/forum.php?m ... 9349&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-10-30 17:32:08 | 显示全部楼层
eric2013 发表于 2020-8-12 17:43
可以了,发现是这个问题

硬汉,这个条件编译能用原有的(#ifndef)形式吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-10-31 09:02:17 | 显示全部楼层
Jacob_xsbn 发表于 2020-10-30 17:32
硬汉,这个条件编译能用原有的(#ifndef)形式吗?

AC6可以。

AC5不行
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-10-31 13:09:10 | 显示全部楼层
硬汉,问一下,IMPORT  |Image$$RO$$Limit|   这个地址为什么需要加两个竖线?IMPORT  Image$$RO$$Limit这样不行吗?之前遇到的都是直接使用Image$$RO$$Limit这个地址。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
 楼主| 发表于 2020-11-1 10:00:35 | 显示全部楼层
Jacob_xsbn 发表于 2020-10-31 13:09
硬汉,问一下,IMPORT  |Image$$RO$$Limit|   这个地址为什么需要加两个竖线?IMPORT  Image$$RO$$Limit这 ...

C里面可以不用加。

汇编里面你不加上试试看。
回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2020-11-2 11:51:13 | 显示全部楼层
eric2013 发表于 2020-11-1 10:00
C里面可以不用加。

汇编里面你不加上试试看。

是的,汇编和C的引用不一样,汇编中需要加|  |
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 06:40 , Processed in 0.347517 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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