历史上的今天
返回首页

历史上的今天

今天是:2025年02月18日(星期二)

正在发生

2020年02月18日 | ARM学习笔记14——C语言和汇编相互套用

2020-02-18 来源:eefocus

这里,我们要准备两个文件,一个是汇编文件start.S,另一个是C文件led.c。汇编文件套用C文件中的开关灯函数,C文件套用汇编文件中延时函数。


//start.S 


.global led_init 


led_init:    


  @;GPC1CON  


  @;GPC1PUD


loop:  


  mov r0,#1    @将1存到寄存器r0中,实现LED开灯效果


  bl led_ops   @调用C文件中的led_ops函数,此时led_ops函数调用的参数会自动从寄存器中取,即r0


   mov r0,#0    @将0存到寄存器r0中,实现LED关灯效果


  bl led_ops


   b loop      @执行循环,使LED灯不停闪烁


delay:  


  sub r0,r0,#1  


  cmp r0,#0  


  bne delay  


  mov pc,lr



下面是C文件


//led.c 


void led_ops(int a){  


  if(a){   


volatile int *p=(int *)0xe0200080;   //volatile关键字确保本条指令不会因编译器的优化而省略,且要求每次直接读值,注意这个关键字在嵌入式C中非常重要


    *p=*p | (1<<3);  


  }


  else{   


    volatile int *p=(int *)0xe0200080;   


    for(int i=0;i<3;i++){          //执行位清零操作


      *p++=0x00000000;   


    }  


  }  


  delay(0xff0000);             //调用汇编文件中delay标签,执行延时


}


编译方法如下:

arm-linux-gcc led.c -o led.o

arm-linux-gcc start.S -o start.o

arm-linux-gcc -nostartfiles -nostdlib start.o led.o 

推荐阅读

史海拾趣

台湾兆欣(EMTEK)公司的发展小趣事

在立足台湾市场的同时,兆欣也积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,成功将产品打入国际市场。特别是在亚洲地区,兆欣的产品受到了广泛欢迎和认可。这种多元化的市场布局为公司的快速发展提供了有力支持。

APSA公司的发展小趣事

APSA公司在创业初期,专注于电子行业中某一特定领域的技术研发。通过团队的不懈努力和持续创新,公司成功开发出一款具有竞争力的产品,填补了市场空白。这一技术突破不仅为APSA公司赢得了首批客户,也为公司的后续发展奠定了坚实的基础。

Capax Technologies Inc公司的发展小趣事

Capax Technologies Inc在市场定位和产品策略上表现出色。公司深入调研市场需求,发现高端电子设备市场对于高性能、高可靠性的组件有着旺盛的需求。于是,Capax Technologies Inc将产品定位为高端市场,专注于研发和生产高品质的电子组件。通过精准的市场定位和优质的产品,Capax Technologies Inc迅速在高端市场中占据了一席之地。

BOOKHAM公司的发展小趣事

BOOKHAM公司深知人才是企业发展的核心。因此,公司一直致力于引进和培养高素质的人才。通过与高校和研究机构的合作,公司吸引了大批优秀的科研人员和工程师加入。同时,公司还建立了完善的培训体系,为员工提供持续的学习和发展机会。这些措施使得BOOKHAM公司拥有一支技术实力强大、富有创新精神的人才队伍,为公司的发展提供了有力保障。

GSG公司的发展小趣事
通过无线通信技术,可以实现对压力测量点的远程监控和数据传输。
Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

Excelics Semiconductor自创立之初,就致力于半导体技术的研发与创新。在公司成立的初期,他们成功研发了一款高性能、低功耗的芯片,这一技术突破迅速赢得了市场的认可。随着技术的不断迭代和升级,Excelics Semiconductor逐渐在半导体领域建立了自己的技术壁垒,成为了行业的领军者。

问答坊 | AI 解惑

语音单片机WT588D

Ü 外挂2M~32M的Flash,时间从32—1054秒。掩膜为内置ROM,最长支持400秒(@6K采样)。采样率支持6K~22K Ü DAC输出:13Bit,PWM输出:12Bit Ü 内置0.5W功放,可直接推动0.5W/8Ω扬声器 Ü 支持加载MP3/WAV/WMA三种音频 ...…

查看全部问答>

刚从京东订的主机就出问题了~

每次重启电源后开机,cpu、显卡风扇转一下就停了,主板无法上电,主板上的LED灯不亮,再按开机键就没有任何反应了,只能再次重启电源才能复现上述情况。 请问这是怎么回事啊?电源供电不足?还是主板烧了(为什么每次重启电源后风扇都能转一下呢) ...…

查看全部问答>

要做电源管理,有什么好的建议没?

功能一、    检测充电器的插拔         【我的想法:】可以用中断来做,这个好做 功能二、检测电池的电量:         只能用AD,将电压转成数字信号了, 就不知道怎么实 ...…

查看全部问答>

求教高手解决vxworks 启动盘制作问题

我在制作启动盘时如果选择bootrom_uncmp image则使用mkboot a: bootrom_uncmp指令时,弹出如下的对话框 D:\\Tornado2.2\\target\\config\\PCPENT~4>mkboot a: bootrom_uncmp VxSys 1.6 (c) Wind River 1993-2002 Boot sector installed OK. obj ...…

查看全部问答>

怎样用residentFlash保存用户数据

我用的是2410+wince4.2,flash用的是K9F1208UOM.在wince系统运行时,我能够看到ResidentFlash文件夹,而且好像用属性查看剩于空间也就是出去os镜像的大小.但是好像因为没有指定flash剩于空间的起始位置的原因吧,只要拷东西进这个文件夹,下次wince就别 ...…

查看全部问答>

早晨浏览见到个地铁应急灯大家看下,我看老好了

  这款地铁应急灯是为应付地铁突发状况准备的。当地铁突然停运,电源切断的时候,乘客们可以将把手取下,充当应急电筒使用。通过挤按把手上的按钮,就能够轻松将把手与带子分离。当然,只有在地铁熄灯之后才能启动这一按钮。   &n ...…

查看全部问答>

VHDL类属参数在verilog中怎么对应?

在VHDL中,类属参数可以在不同层次的模块间传递。可以在顶层修改这些参数,下面各层随之改变。 verilog中怎么实现这一功能? 谢谢!…

查看全部问答>

信号链基础知识合集2

  自《电源开关设计秘笈30例》推出以来,得到广大工程师的热烈反响, 已推出的由德仪资深工程师William P. (Bill) Klein 主笔的《信号链基础知识合辑》反响也非常好,   应大家的强烈要求,现隆重推出《信号链基础知识合辑2》   ...…

查看全部问答>