历史上的今天

今天是:2024年11月20日(星期三)

2019年11月20日 | ARM程序编写笔记

发布者:WhisperingRain 来源: 51hei关键字:ARM  程序编写  汇编程序 手机看文章 扫描二维码
随时随地手机看文章

#include"stdio.h"
#include"limits.h"
#include"time.h" 
#include
#include"math.h"
#include
#include"rt_misc.h"
#include
#include

在C语言中嵌入汇编程序,用__asm,asm前是两个下滑杠,汇编语言在其后的大括号实体中写出,例如:在C语言中定义一个整型f函数,自变量为整型x,则可按下列规格编写
                      int f(int x)
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             } 
函数名后加 __pure:为了通知编译器这是一个纯函数,在申明时需要将该函数定义为 __pure 。
                       int f(int x)__pure 
                          {
                               int r0;
                                __asm
                                    {
                                         ADD r0,x,1
                                 EOR x,r0,x
                                     }
                                 return x;
                             } 
////////////////////////////////////////////////////////////////////////////
Thumb状态编译C或C++时,内联汇编程序不编译,且自动切换到ARM状态,如果要在Thumb状态内编译汇编指令到代码中,需要将含有汇编指令的函数包含在
#pragma arm  和#pragma thumb之间。   
#pragma arm
   int add(int i,int j)
   {
     int res;
__asm
{
   ADD res,i,j
}
return res;
   } 
#pragma thumb 
需要注意的是,内连汇编不支持以下汇编指令
svc,
LDR Rn  ,  =expression伪指令,可用MOV Rn, expression代替
LDRT,LDRBT, STRT  ,STRBT
MUL,MLA,UMULL,SMULL,SMLAL
MOV 或MVN标志设定指令(当第二操作数为常数)
用户模式LDM指令
ADR和ADRL伪指令
====================================
嵌入C程序中的汇编函数如果想访问C中的常量表达式,可用__cpp关键字。例如
   mov   r0,#__cpp(expr)
例如  mov   r0,#__cpp(res)
         LDR  r1,=__cpp(res)
         BL  __cpp(res)

关键字:ARM  程序编写  汇编程序 引用地址:ARM程序编写笔记

上一篇:为你解颇ARM异常中断返回的几种情况
下一篇:ARM入门学习指导

推荐阅读

      为了减少拿出手机查看信息的麻烦,不少厂商推出了基于智能手表的解决方案。但拍照这件事,手表似乎很难做到让人满意,即便三星早在 2013 年 10 月的 Galaxy Gear 上就实验过。有趣的是,2018 年 11 月 13 日,美国专利商标局(USPTO)公布了苹果的一项“拍照手表”(Image-Capturing Watch)专利,其提交时间为 2016 年 9 月...
Advanced Energy Industries, Inc. (纳斯达克:AEIS)旗下的雅特生科技 (Artesyn Embedded Power) 宣布推出最新的一款直流/直流电源转换器模块。这款属AGQ500系列的500W电源转换器模块主要面向氮化镓(GaN)射频功率放大器的各种应用。 AGQ500系列模块采用业内标准的1/4砖大小封装,效率高达95%以上(典型值),而且输入电压范围非常宽广(36V至75V)。额...
11月18日,2020北京微电子国际研讨会暨IC WORLD学术会议在北京亦庄盛大开幕。本次会议由北京市经济和信息化局和北京经济技术开发区管委会主办,以“开创芯启程,领跑芯未来”为主题,汇聚政府、企业、高校、科研院所等个领域的专家和学者,围绕中国集成电路和微电子产业发展与资本运作、创新创业环境营造、产业高端要素整合等话题,邀请行业大咖,开展广...
2021年广州车展上,广汽全新发布“星灵”电子电气架构,新架构平台的“星”代表星辰大海的广度,“灵”代表架构灵魂的深度。“星灵”电子电气架构将重点展现三个部分,包括汽车数字镜像云、三个核心计算机群组(中央计算机、智能驾驶计算机、信息娱乐计算机)、高速以太网5G信息安全功能安全。新架构将高效支撑纯电、混动车型,车云一体化集中计算式电子电...

史海拾趣

问答坊 | AI 解惑

求助!中英文对照论文

求助一篇关于单片机的LED点阵显示屏控制设计的,与其有关的中英文对照论文,5000字,谢谢了!!!…

查看全部问答∨

关于VXWORKS任务

建立一个可以下载的工程,然后添加如下代码,就是自带的例子,关于例子程序有几点疑问, 有高手帮忙讲解下,谢谢了 1.程序入口在哪里?从progStart开始执行,在其中的return(OK)返回了,接下来执行什么?其他几个任务的代码怎么执行? 还是在&nb ...…

查看全部问答∨

socket数据接收处理问题C#

问题描述: 在“private void btnDiagnosticClicked(object sender, EventArgs e)”方法中 执行“RecData = MainMenu.socketHH.GetRecData();”“RecData”一直接收为空。 而在“private void ReceiveCallback(IAsyncResult ar)”方法中 “recB ...…

查看全部问答∨

arm linux驱动编写中,中断服务程序中可以进行ioremap吗?

发现只要在中断服务程序中执行到ioremap函数就会报错 nable to handle kernel NULL pointer dereference at virtual address 00000000 pgd = c355c000 [00000000] *pgd=338e5031, *pte=00000000, *ppte=00000000 Internal error: Oops: 817 [#1 ...…

查看全部问答∨

TLC116

  该TLC116系列可控硅采。采用优质玻璃钝化PNPN技术。 TLC116的绝对额定值为:(1)符号是IT(RMS),这个参数是有效值(360°导通状态电流传导角等于40℃)组合成的Tl型、价值3,单位是A;(2)符号是IT(RMS),这个参数是有效值(360°导通状态电流传 ...…

查看全部问答∨

HDL 实践

经过我仔细测试,发现如下问题;   ALTERA 的Quartus 9.0 以及以下版本不支持SYSTEM C; 但Quartus 9.1 支持SYSTEM C 语法。学习HDL的几点重要提示: 1.了解HDL的可综合性问题:HDL有两种用途:系统仿真和硬件实现。 如果程序只用于仿真,那么 ...…

查看全部问答∨

关于应用MSP430F449设计一个电流表的量程问题

我们在利用F449进行设计一个电流表,在对固定电阻取电压时考虑以下几个问题: 1.F449的供电电压是9v(我是说那个变压器),那么对于单片机进行AD转换时的驱动电压是多少?也就是我所能得到的电压的范围是多少?? 2.F449在进行AD转换过程中,所 ...…

查看全部问答∨

求助

#ifndef    MSP430XF449_H #include <msp430x44x.h> #endif 请问这几句话是什么意思,常见的不是 #ifndef   **** #define  **** #endif 吗?…

查看全部问答∨

51单片机

我用lcd1602和ds1302写一个时钟程序,想用红外遥控调时,想让它闪烁,不过检测到红外信号后不闪烁。有哪位高手遇到同样的问题,分享一下解决方案,不胜感激!…

查看全部问答∨

DSP2812编译时错误can't find input file 'Flash2812_API_V210.lib'

<Linking> >> C:\\CCStudio_v3.3\\MyProjects\\Boot_Program\\Boot_Program.cmd, line 118:   error:                can\'t find input file \'Flash2812_API_V210.lib\' ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved