历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-20 来源:51hei

#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)

推荐阅读

史海拾趣

Giga公司的发展小趣事
用于设置提醒或自动执行某项任务。
Axon' Cable公司的发展小趣事

品质是Axon' Cable公司的生命线。公司始终坚持以客户需求为导向,不断提升产品品质和服务水平。Axon' Cable建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还注重持续改进和创新,不断优化生产流程和提高生产效率。这些努力使得Axon' Cable的产品在品质上始终保持领先地位,赢得了客户的信任和好评。

这些故事虽然无法涵盖Axon' Cable公司发展的全部细节,但试图展现了其在电子行业中的成长轨迹和取得的成就。通过这些故事,我们可以看到Axon' Cable公司凭借其坚定的信念、不懈的努力和创新精神,在电子行业中不断发展壮大,成为了一家具有全球影响力的知名企业。

Bytes公司的发展小趣事

随着市场规模的扩大,Bytes公司意识到供应链管理和成本控制的重要性。公司不断优化供应链结构,提高采购效率和质量,降低生产成本。同时,公司还通过精细化管理,降低运营成本,提高盈利能力。这些措施使得Bytes公司在激烈的市场竞争中保持了良好的财务状况。

General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。
FRIWO公司的发展小趣事

FRIWO公司自成立以来,始终在技术领域保持领先地位。从便携式收录机问世之初,FRIWO就凭借其先进的技术在该领域崭露头角。随后,随着技术的不断进步,FRIWO迅速将业务扩展到Atari计算机、摄影机等新兴领域,并成功成为这些领域的电源解决方案提供商。近年来,FRIWO更是专注于移动电话充电器市场,凭借其卓越的技术实力和创新能力,成为了世界上移动电话充电器的最主要供应商。这一系列的成功,彰显了FRIWO在电子行业中的技术领先地位和多元化发展战略。

台湾富晶(FORTUNE)公司的发展小趣事
使用滤波器或隔离器等设备隔离输入信号的干扰。

问答坊 | AI 解惑

伺服电机运动运动控制器运动控制系统

工业自动化1-36轴2相3相5相步进电机.伺服电机运动控制卡; 运动控制器; 运动驱动器;运动控制系统。 1、得到德国设计公司最先进的多轴运动控制技术方案,性能稳定可靠,高精密,电机运行噪音小 2、驱动控制2合1集成模板上,让你减少另外购买驱动器 ...…

查看全部问答>

AD0809,DA0832模块电路

本帖最后由 paulhyde 于 2014-9-15 03:59 编辑 最近在做各个常用模块,做了几个,效果还不错,不过,做到AD,DA转换的时候感觉有点困难,模块做得不是很理想, 我们主要做AD0809,DA0832这两款比较常见的芯片,可是总是无法总结出一个比较经典,实 ...…

查看全部问答>

学习AVR C语言重量级资料AVR c库函数介绍

CodeVisionAVR C Library Functions Reference CodeVisionAVR C 库函数介绍 译自CodeVisionAVR C Compiler Help …

查看全部问答>

求稳压电源的设计电路图?

求一个稳压电路的电路图,最好是用protel做的。谢谢…

查看全部问答>

关于WINCE下,继承CButton类,实现一个图形按钮类;发现无论如何都是刷新背景。

在WINDOWS下,Invalidate(FALSE)或者OnEraseBkgnd直接返回,就不会率刷新背景。 但在WINCE下,如果如何都刷背景。 按钮要实现如下效果:当鼠标移动按钮上面时,显示一副图,移开后显示另一副图,发现在WINCE下经常有闪屏的情况,本人认为就是绘 ...…

查看全部问答>

什么软件可以模拟单片机开发环境?

请问是否有这中软件,自己编写程序输入到计算机模拟的某个软件上,再通过计算机模拟软件搭建电路来实现其功能。…

查看全部问答>

新手请教一个总线读写的问题

#define TYPE_R          (0x30000008) Type = *(UCHAR *)(TYPE_R) 这个是访问EPLD的读操作,EPLD的数据port宽度定义为了8bit。 我不太明白的是*(UCHAR *)(TYPE_R)的语法代表什么意思,难道不是把地址0x30000008 ...…

查看全部问答>

pdf417条形码的truetype字库

我自己的FON字体似乎visual studio 2005 不支持,大家知道为什么么? 最近作pdf417条形码,缺少一个字库,请问大家有么?能否共享一个? qq:61060673…

查看全部问答>

IPM驱动信号正常,但是输出不正常查出的原因

IPM驱动信号正常,但是输出不正常。找了很久的原因才发现原来是IPM自带的欠压保护起作用了。…

查看全部问答>

ST的芯片印刷为什么字是横的,容易害人!

                                 一般芯片,圆点1脚放正了,字也是正的,而ST的字向右倒90度。我一个朋友就吃这个亏了,我认为应该正过来!…

查看全部问答>