ARM汇编

[复制链接]
 楼主| keer_zu 发表于 2021-6-24 09:36 | 显示全部楼层 |阅读模式
将一个stm32f40X的keil项目该城ARM-NONE-EABI-xxx的,使用make管理项目
发现keil和gcc对内联汇编的格式是不一样的,下面需要从keil转成gcc的:

  1. //THUMB指令不支持汇编内联
  2. //采用如下方法实现执行汇编指令WFI  
  3. __asm void WFI_SET(void)
  4. {
  5.         WFI;                  
  6. }
  7. //关闭所有中断(但是不包括fault和NMI中断)
  8. __asm void INTX_DISABLE(void)
  9. {
  10.         CPSID   I
  11.         BX      LR          
  12. }
  13. //开启所有中断
  14. __asm void INTX_ENABLE(void)
  15. {
  16.         CPSIE   I
  17.         BX      LR  
  18. }
  19. //设置栈顶地址
  20. //addr:栈顶地址
  21. __asm void MSR_MSP(u32 addr)
  22. {
  23.         MSR MSP, r0                         //set Main Stack value
  24.         BX r14
  25. }
复制代码


转了前三个函数,不知道有没有问题:
  1. //THUMB指令不支持汇编内联
  2. //采用如下方法实现执行汇编指令WFI  
  3. void WFI_SET(void)                //鎵цWFI鎸囦护
  4. {
  5.         __asm volatile( "wfi" );
  6. }

  7. //关闭所有中断(但是不包括fault和NMI中断)
  8. void INTX_DISABLE(void)//鍏抽棴鎵€鏈変腑鏂?
  9. {
  10.         __asm volatile( "cpsid i" );
  11.         __asm volatile( "bx lr" );
  12. }

  13. //开启所有中断
  14. void INTX_ENABLE(void)//寮€鍚墍鏈変腑鏂?
  15. {
  16.         __asm volatile( "cpsie i" );
  17.         __asm volatile( "bx lr" );
  18. }

  19. //设置栈顶地址
  20. //addr:栈顶地址
  21. void MSR_MSP(u32 addr)        //璁剧疆鍫嗘爤鍦板潃
  22. {

  23. }
复制代码


 楼主| keer_zu 发表于 2021-6-24 09:47 | 显示全部楼层
这是改写之后的结果:
  1. //THUMB指令不支持汇编内联
  2. //采用如下方法实现执行汇编指令WFI  
  3. void WFI_SET(void)                //鎵цWFI鎸囦护
  4. {
  5.         __asm volatile( "wfi" );
  6. }

  7. //关闭所有中断(但是不包括fault和NMI中断)
  8. void INTX_DISABLE(void)//鍏抽棴鎵€鏈変腑鏂?
  9. {
  10.         __asm volatile
  11.         (
  12.                 "cpsid   i     \n"
  13.                 "bx       lr    \n"
  14.         );
  15. }

  16. //开启所有中断
  17. void INTX_ENABLE(void)//寮€鍚墍鏈変腑鏂?
  18. {
  19.         __asm volatile
  20.         (
  21.                 "cpsie   i     \n"
  22.                 "bx       lr    \n"
  23.         );
  24.        
  25. }

  26. //设置栈顶地址
  27. //addr:栈顶地址
  28. void MSR_MSP(u32 addr)        //璁剧疆鍫嗘爤鍦板潃
  29. {
  30.         __asm volatile
  31.         (
  32.         "        msr psp, r0                                                        \n"
  33.         "        bx r14                                                                \n"
  34.         );
  35. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1479

主题

12921

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部