历史上的今天
返回首页

历史上的今天

今天是:2024年09月09日(星期一)

正在发生

2021年09月09日 | s3c2440学习之路-003 汇编给C传参数 点亮不同led灯

2021-09-09 来源:eefocus

硬件平台:jz2440

软件平台:Ubuntu16.04 arm-linux-gcc-3.4.5

源码位置: https://github.com/lian494362816/C/tree/master/2440/004_led_parma


1原理分析

当使用汇编调用C函数,碰到需要传参时,可以使用R0-R3来传递参数。

R0代表第1个参数,R1代表第2个参数.......当参数超过4个时,就需要靠SP来实现了。

更详细的说明可以去查“ATPCS规则“。

这里只讨论参数不超过4个时的情况。


2源码

led_on.c


void delay(int delay_time)

{

    while(delay_time --)

    {

        /* nothing */

    }

}


int led_on(int led_num)

{

    unsigned int *pGPF4CON = (unsigned int *)0x56000050;

    unsigned int *pGPFDAT = (unsigned int *)0x56000054;


    if (4 == led_num)

    {^M

        *pGPF4CON = 0x100;

    }

    else if (5 == led_num)

    {

        *pGPF4CON = 0x400;

    }


    *pGPFDAT = 0x0;


    return 0;

}


先看C文件,包含了2个函数,delay 和 led_on。

led_on:传入4或5来点亮2个不同的LED灯

delay:对传进来的参数做递减, 以此来实现简单的延时


start.s


.global _start

_start:


    ldr sp, =4096 /* for nand */

    /*ldr sp, =0x40000000 + 4096  /* for nor */


    mov r0, #4

    bl led_on

    ldr r0,=10000

    bl delay

    mov r0, #5

    bl led_on


loop:

    b loop


如之前所说的,R0代表第1个参数。 而led_on 和delay都只接收1个参数,所以需要把参数的值都赋值给R0。


(1)先将4赋值给R0然后调用led_on, 相当于调用led_on(4),

(2)然后把10000赋值给R0,再调用delay, 相当于调用delay(10000),

(3)再次把5赋值给R0, 然后调用led_on,相当于调用led_on(5)

这样就实现了汇编给C传参,点亮不同的led灯。 这样简单的led函数可以在调试u-boot时使用,尤其是当串口还未初始化时,可以通过点亮/熄灭 不同的led灯来判断代码执行到了什么位置。

推荐阅读

史海拾趣

Advanced Energy公司的发展小趣事

AE公司一直将创新作为企业发展的核心动力。公司不断投入研发资源,推动电源技术的持续创新。同时,AE公司也积极与各大电子企业建立合作伙伴关系,共同推动电子行业的发展。通过与合作伙伴的紧密合作,AE公司不仅获得了更多的市场机会,也提升了自身的技术水平和创新能力。

FOCI Fiber Optic Communications Inc公司的发展小趣事

AE公司一直将创新作为企业发展的核心动力。公司不断投入研发资源,推动电源技术的持续创新。同时,AE公司也积极与各大电子企业建立合作伙伴关系,共同推动电子行业的发展。通过与合作伙伴的紧密合作,AE公司不仅获得了更多的市场机会,也提升了自身的技术水平和创新能力。

BREL International Components公司的发展小趣事

BREL International Components公司深知合作共赢的重要性。公司积极与上下游企业建立紧密的合作关系,共同开发新产品、拓展新市场。通过与供应商的深度合作,BREL确保了原材料的稳定供应和成本控制;通过与客户的紧密沟通,BREL及时了解市场需求,调整产品策略。此外,BREL还积极参与行业交流和合作,与同行共同推动电子行业的发展。

BJB公司的发展小趣事

BJB公司的创立源于对照明电器领域的深刻理解和市场需求的敏锐洞察。创立初期,公司面临着资金短缺、技术挑战和市场竞争等多重困难。然而,通过创始人的坚定信念和团队的共同努力,BJB逐渐攻克技术难关,推出了一系列高质量的照明配件产品,初步在市场中获得了认可。

富芯森美(FUXINSEMI)公司的发展小趣事

随着新能源汽车产业的快速发展,富芯森美敏锐地捕捉到了这一市场机遇。公司投入大量资源研发车规级功率半导体器件,产品设计遵循APQP标准,制造管理符合IATF 16949要求,质量检验则严格遵循AEC-Q101标准。这些举措使得富芯森美的车规级产品能够满足汽车行业的严苛要求,成功打入新能源汽车供应链体系,为公司带来了新的增长点。

ADI Electronics Inc公司的发展小趣事

随着全球化进程的加速,ADI也逐渐将业务拓展至全球范围。公司不仅在全球各地设立了研发中心和销售网络,还与众多国际知名企业建立了战略合作关系。这些合作不仅为ADI带来了更多的商业机会,也使其能够更好地了解全球市场的需求和趋势,为公司的长远发展奠定了坚实基础。

这五个故事展示了ADI Electronics Inc公司从创业初始到发展成为电子行业领军企业的过程。通过不断创新、并购重组和全球化拓展,ADI成功地在激烈的市场竞争中脱颖而出,成为一家备受尊敬的企业。

请注意,由于无法实时获取ADI的最新发展动态,上述故事中的部分细节可能已随时间发生变化。如需获取更详细和准确的信息,建议查阅ADI的官方网站或相关新闻报道。

问答坊 | AI 解惑

冲动是魔鬼之——维修德生R-911的资料总集(checked)

本帖最后由 辛昕 于 2018-5-3 16:34 编辑 说起来,我早已忘记当年那个美女研究生小姐姐长什么样了,也根本没成功约过人家....... 倒是这一次疯狂的维修......... 没想到我后来的工作,甚至直到如今,都没改变这种毫无章法的风格.......... 真 ...…

查看全部问答>

msp430 DCO 怎么设置

     我想利用DCO产生一个320K的时钟给SMCLK用。看了手册没明白该怎么设置,手册上所说的8个离散频率是多少啊      有谁会告诉我下,该怎么设置DCO到320K,或告诉我怎么用具体的我自己设置…

查看全部问答>

大家一开始是如何学习硬件设计的

小弟是个菜鸟,还没有入门,现在想学硬件,不知该从何学起,都要学习什么课程,希望大家不涩赐教。…

查看全部问答>

LPC11U14实现SD卡U盘

此实验在本人设计的LPC1114/LPC1343/LPC11U14开发板是验证成功:下面先秀秀图吧,下面是三种芯片三种开发板。SD卡在背面。。。                             ...…

查看全部问答>

gerber文件格式的简写

在板厂制版的时候,大家可能会遇到要求发送光绘文件的情况,关于gerber文件的后缀分别代表什么意思呢?那就看看下面这个说明吧:GTL---toplayer 顶层GBL---bottomlayer 底层GTO---TopOverlay 顶层丝印层GBO---Bottomlayer 底层丝印层GTP---TopPaste ...…

查看全部问答>

Launchpad上面有没有5V的输出啊~~~

我用电表测了一下,发现Vcc是3.3V,不知道launchpad上面有没有5V的电压输出啊~~~…

查看全部问答>

2012年10月份北京举办的一些重要行业展会和研讨会

  中国国际光电产业博览会暨第十七届中国国际激光、光电子及光显示产品展览会 展会场馆:北京朝阳区三环东路六号中国国际展览中心举办时间:2012年10月16日~2012年10月18日 第九届中国国际机器视觉展览会暨机器视觉技术及工业应用研讨会展 ...…

查看全部问答>

Launchpad官网价格翻番9.9刀,论坛活动中正在以25元的价格发售(加触摸板)

Launchpad价格已经翻了一番,论坛参加活动还能够25元获得launchpad+触摸板, 活动链接:https://bbs.eeworld.com.cn/TI/201303_MSP430_Launchpad/index.html 这个价格怕是最后一拨了,存货完了,launchpad就回不到25的时代咯。 [ 本帖最后由 wstt ...…

查看全部问答>

双通道 H 桥电机驱动器

DRV8833 为玩具、打印机及其他机电一体化应用提供了一款双通道桥式电机驱动器解决方案。 该器件具有两个H 桥驱动器,并能够驱动两个直流(DC) 电刷电机、一个双极性步进电机、螺线 管或其他电感性负载。 每个H 桥的输出驱动器模块由N 沟道功率MOS ...…

查看全部问答>

CCS 5程序 调试的一些方法

用CCS 5    单步 调试时,如果遇到__delay_cycles(782000);怎么直接跳出,这个好像不是函数??? 如果是for循环语句又怎么跳出?? 还有什么调试技巧吗??…

查看全部问答>