硬汉嵌入式论坛

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

[ThreadX全家桶] 好奇怪,我CM3的工程,按照教程修改low_level.s文件,还是报错FIRST/LAST

[复制链接]

5

主题

33

回帖

48

积分

新手上路

积分
48
发表于 2020-8-20 23:33:34 | 显示全部楼层 |阅读模式
RT,我是根据硬汉前面的教程修改的,用的AC6,代码如下,,还是报错,,郁闷了一下午。

  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. ;
  24.     IMPORT  _tx_thread_system_stack_ptr
  25.     IMPORT  _tx_initialize_unused_memory
  26.     IMPORT  _tx_thread_context_save
  27.     IMPORT  _tx_thread_context_restore
  28.     IMPORT  _tx_timer_interrupt
  29.     IMPORT  __main
  30.         IMPORT      __Vectors
  31.         IMPORT      __initial_sp
  32. ;
  33. ;
  34. SYSTEM_CLOCK        EQU     72000000
  35. SYSTICK_CYCLES      EQU     ((SYSTEM_CLOCK / 1000) -1)
  36. ;


  37.     AREA    RESET, CODE, READONLY
  38. ;
  39.     AREA ||.text||, CODE, READONLY
  40.         PRESERVE8
  41.             
  42.     EXPORT  Reset_Handler
  43. Reset_Handler
  44.     CPSID   i
  45.     LDR     R0, =__main
  46.     BX      R0


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

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

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


  157.     EXPORT  __tx_SVCallHandler
  158. __tx_SVCallHandler
  159.     B       __tx_SVCallHandler


  160.     EXPORT  __tx_IntHandler
  161. __tx_IntHandler
  162. ; VOID InterruptHandler (VOID)
  163. ; {
  164.     PUSH    {r0, lr}

  165. ;    /* Do interrupt handler work here */
  166. ;    /* .... */

  167.     POP     {r0, lr}
  168.     BX      LR
  169. ; }

  170.     EXPORT  __tx_SysTickHandler
  171.         EXPORT  SysTick_Handler
  172. __tx_SysTickHandler
  173. SysTick_Handler
  174. ; VOID TimerInterruptHandler (VOID)
  175. ; {
  176. ;
  177.     PUSH    {r0, lr}
  178.     BL      _tx_timer_interrupt
  179.     POP     {r0, lr}
  180.     BX      LR
  181. ; }

  182.     EXPORT  __tx_NMIHandler
  183. __tx_NMIHandler
  184.     B       __tx_NMIHandler

  185.     EXPORT  __tx_DBGHandler
  186. __tx_DBGHandler
  187.     B       __tx_DBGHandler

  188.     ALIGN
  189.     LTORG
  190.     END
复制代码



依然报错:(startup.s没有动)
WeChat Screenshot_20200820233250.png
是否还有哪里需要一并修改?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-8-21 08:28:14 | 显示全部楼层
楼主你搞错了,AC6不用改,是AC5要修改。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-8-21 08:29:11 | 显示全部楼层
详情在这个帖子里面有详细的说明:

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

使用道具 举报

5

主题

33

回帖

48

积分

新手上路

积分
48
 楼主| 发表于 2020-8-21 08:36:56 | 显示全部楼层
eric2013 发表于 2020-8-21 08:28
楼主你搞错了,AC6不用改,是AC5要修改。

我意思是改了AC6,用默认low.s,与AC5,改了low.s,效果是一样的,现在我感觉我的修改无关AC5/6,,,
我再找找是哪个细节错了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-8-21 08:48:15 | 显示全部楼层
ayuanshop 发表于 2020-8-21 08:36
我意思是改了AC6,用默认low.s,与AC5,改了low.s,效果是一样的,现在我感觉我的修改无关AC5/6,,,
我 ...

你描述的太绕口了。

FIRST/LAST是因为你重复添加启动代码造成的。

也就说你这部分的移植的确有问题
回复

使用道具 举报

17

主题

109

回帖

160

积分

初级会员

积分
160
发表于 2020-8-25 13:55:19 | 显示全部楼层
resethandler那
回复

使用道具 举报

5

主题

33

回帖

48

积分

新手上路

积分
48
 楼主| 发表于 2020-8-25 16:08:46 | 显示全部楼层

卧槽!原来是那句话??!!我一直以为只是个简单复位句柄
真是一言惊醒梦遗中人啊,,,谢谢谢谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 16:43 , Processed in 0.265001 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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