硬汉嵌入式论坛

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

[MDK] MDK AC6的汇编文件可以单独选择编译器,人性化了很多

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2020-5-9 09:22:02 | 显示全部楼层 |阅读模式


QQ截图20200509092200.png
回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2020-5-9 13:26:21 | 显示全部楼层
mdk以前的版本用ac6工具链的话实际上用的是ac5的汇编器,这样看起来就很别扭,原因是ac6里的armclang最开始的汇编语法只支持gnu格式,现在可算把arm自己那套汇编语法兼容了,至于为什么ac6一开始不支持自家的汇编格式,有一个原因可能是为了吸引用惯gnu工具链的开发者吧,虽然两者转换很容易,但只搞一套不是更轻松?以后慢慢都会统一到gnu吧!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
 楼主| 发表于 2020-5-9 23:14:54 | 显示全部楼层
tangerious 发表于 2020-5-9 13:26
mdk以前的版本用ac6工具链的话实际上用的是ac5的汇编器,这样看起来就很别扭,原因是ac6里的armclang最开始 ...

现在好些软件包都喜欢将汇编底层做成三合一,像SEGGER的提供一些软件包喜欢MDK,IAR和GCC三合一的方式,之前发布的SEGGER HardFault就是。
MDK的那个老汇编不支持#if else

  1. ;/*********************************************************************
  2. ;*                SEGGER Microcontroller GmbH & Co. KG                *
  3. ;*                        The Embedded Experts                        *
  4. ;**********************************************************************
  5. ;*                                                                    *
  6. ;*       (c) 1995 - 2016 SEGGER Microcontroller GmbH & Co. KG         *
  7. ;*                                                                    *
  8. ;*       Internet: segger.com  Support: support_embos@segger.com      *
  9. ;*                                                                    *
  10. ;**********************************************************************
  11. ;*                                                                    *
  12. ;*       embOS * Real time operating system for microcontrollers      *
  13. ;*                                                                    *
  14. ;*       Please note:                                                 *
  15. ;*                                                                    *
  16. ;*       Knowledge of this file may under no circumstances            *
  17. ;*       be used to write a similar product or a real-time            *
  18. ;*       operating system for in-house use.                           *
  19. ;*                                                                    *
  20. ;*       Thank you for your fairness !                                *
  21. ;*                                                                    *
  22. ;**********************************************************************
  23. ;*                                                                    *
  24. ;*       OS version: 4.24                                             *
  25. ;*                                                                    *
  26. ;**********************************************************************
  27. ;
  28. ;----------------------------------------------------------------------
  29. ;File    : HardFaultHandler.S
  30. ;Purpose : HardFault exception handler for IAR, Keil and GNU assembler.
  31. ;          Evaluates used stack (MSP, PSP) and passes appropiate stack
  32. ;          pointer to the HardFaultHandler "C"-routine.
  33. ;------------- END-OF-HEADER ------------------------------------------
  34. ;*/

  35. #ifndef __IAR_SYSTEMS_ASM__
  36.   #ifndef __CC_ARM
  37.     #ifndef __GNUC__
  38.       #error "Unsupported assembler!"
  39.     #endif
  40.   #endif
  41. #endif

  42. ;/*********************************************************************
  43. ;*
  44. ;*     Forward declarations of segments used
  45. ;*
  46. ;**********************************************************************
  47. ;*/

  48. #ifdef __IAR_SYSTEMS_ASM__

  49.         SECTION CODE:CODE:NOROOT(2)
  50.         SECTION CSTACK:DATA:NOROOT(3)

  51. #elif defined __CC_ARM

  52.         AREA    OSKERNEL, CODE, READONLY, ALIGN=2
  53.         PRESERVE8

  54. #endif

  55. ;/*********************************************************************
  56. ;*
  57. ;*     Publics
  58. ;*
  59. ;**********************************************************************
  60. ;*/

  61. #ifdef __IAR_SYSTEMS_ASM__

  62.         SECTION .text:CODE:NOROOT(2)
  63.         PUBLIC  HardFault_Handler

  64. #elif defined __CC_ARM

  65.         EXPORT  HardFault_Handler

  66. #elif defined __GNUC__

  67.         .global HardFault_Handler
  68.         .type   HardFault_Handler, function

  69. #endif

  70. ;/*********************************************************************
  71. ;*
  72. ;*     Externals, code
  73. ;*
  74. ;**********************************************************************
  75. ;*/

  76. #ifdef __IAR_SYSTEMS_ASM__

  77.         EXTERN  HardFaultHandler

  78. #elif defined __CC_ARM

  79.         IMPORT  HardFaultHandler

  80. #elif defined __GNUC__

  81.         .extern HardFaultHandler

  82. #endif

  83. ;/*********************************************************************
  84. ;*
  85. ;*     CODE segment
  86. ;*
  87. ;**********************************************************************
  88. ;*/

  89. #ifdef __GNUC__

  90.         .syntax unified
  91.         .thumb
  92.         .balign 4
  93.         .text

  94. #else

  95.         THUMB

  96. #endif

  97. ;/*********************************************************************
  98. ;*
  99. ;*       Global functions
  100. ;*
  101. ;**********************************************************************
  102. ;*/

  103. ;/*********************************************************************
  104. ;*
  105. ;*      HardFault_Handler()
  106. ;*
  107. ;*  Function description
  108. ;*    Evaluates the used stack (MSP, PSP) and passes the appropiate
  109. ;*    stack pointer to the HardFaultHandler "C"-routine.
  110. ;*
  111. ;*  Notes
  112. ;*    (1) Ensure that HardFault_Handler is part of the exception table
  113. ;*/
  114. #ifdef __GNUC__
  115. HardFault_Handler:
  116. #else
  117. HardFault_Handler
  118. #endif
  119. #if (defined (__IAR_SYSTEMS_ASM__) && (__ARM6M__) && (__CORE__ == __ARM6M__)) || \
  120.     (defined (__CC_ARM) && (__TARGET_ARCH_6S_M))                              || \
  121.     (defined (__GNUC__) && (__ARM_ARCH_6M__))
  122.         ;// This version is for Cortex M0
  123.         movs   R0, #4
  124.         mov    R1, LR
  125.         tst    R0, R1            ;// Check EXC_RETURN in Link register bit 2.
  126.         bne    Uses_PSP
  127.         mrs    R0, MSP           ;// Stacking was using MSP.
  128.         b      Pass_StackPtr
  129. #ifdef __GNUC__
  130. Uses_PSP:
  131. #else
  132. Uses_PSP
  133. #endif
  134.         mrs    R0, PSP           ;// Stacking was using PSP.
  135. #ifdef __GNUC__
  136. Pass_StackPtr:
  137. #else
  138. Pass_StackPtr
  139. #endif
  140. #ifdef __CC_ARM
  141.         ALIGN
  142. #endif
  143.         ldr    R2,=HardFaultHandler
  144.         bx     R2                ;// Stack pointer passed through R0.

  145. #else
  146.         ;// This version is for Cortex M3, Cortex M4 and Cortex M4F
  147.         tst    LR, #4            ;// Check EXC_RETURN in Link register bit 2.
  148.         ite    EQ
  149.         mrseq  R0, MSP           ;// Stacking was using MSP.
  150.         mrsne  R0, PSP           ;// Stacking was using PSP.
  151.         b      HardFaultHandler  ;// Stack pointer passed through R0.
  152. #endif

  153. #ifdef __GNUC__
  154.         .end
  155. #else
  156.         END
  157. #endif

  158. ;/****** End Of File *************************************************/
复制代码


回复

使用道具 举报

0

主题

7

回帖

7

积分

新手上路

积分
7
发表于 2020-5-10 13:09:32 | 显示全部楼层
eric2013 发表于 2020-5-9 23:14
现在好些软件包都喜欢将汇编底层做成三合一,像SEGGER的提供一些软件包喜欢MDK,IAR和GCC三合一的方式,之 ...

segger这个方案把三者的差异呈现得一目了然
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 04:54 , Processed in 0.160210 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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