历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2018年10月11日 | OK6410裸机学习之汇编调用C函数传参数

2018-10-11 来源:eefocus

start.S汇编源码:

.globl _start

_start:

// 硬件相关的设置 

    // Peri port setup 

    ldr r0, =0x70000000

    orr r0, r0, #0x13

    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

    

// 关看门狗 

    // 往WTCON(0x7E004000)写0    

    ldr r0, =0x7E004000

    mov r1, #0

    str r1, [r0]

// 设置栈 

    ldr sp, =6*1024

    

    // int xxxxx(int start, int end, int a, int b, int c, int d) 

    mov r0, #0   // start 

    mov r1, #8   // end 

    mov r2, #0   // a 

    mov r3, #0   // b 

    

    // c, d 存在栈里 ,C函数的参数超过4个以后超过的部分存在栈里

    // 栈是向下增长的,数据入栈时SP指针先减再存入数据

    // 把sp栈顶的位置先减8,对于32位的单片机一个寄存器32位4个字节,减8可以存两个寄存器的值

    ldr sp, =6*1024-8;  

    mov r4, #0

    str r4, [sp]              // c 

    

    mov r4, #1

    str r4, [sp, #4]        // d ,把参数d的值r4存在sp+4的位置

    

    // 到此sp-8预留的空间已经存入了c、d两个参数

    bl xxxxx

halt:

    b halt    

=====================================================================

led.c源码:

void delay(int a, int b, int c, int d, int e, int f, int g, int h)

{

    volatile int i = a+b+c+d+e+f+g+h;

    while (i--);

}

int xxxxx(int start, int end, int a, int b, int c, int d)

{

    int i = start + a + b + c + d;

    

    volatile unsigned long *gpmcon = (volatile unsigned long *)0x7F008820;

    volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;

    

    // gpm0,1,2,3设为输出引脚 

    *gpmcon = 0x1111;

    

    while (1)

    {

        *gpmdat = i;

        i++;

        if (i == end)

            i = start;

        delay(0, 1, 2, 3, 4, 5, 6, 0x10000);

    }

    

    return 0;

}

=====================================================================

Makefile:

led.bin: start.o led.o

    arm-linux-ld -Ttext 0 -o led.elf start.o led.o

    arm-linux-objcopy -O binary led.elf led.bin

    arm-linux-objdump -D led.elf > led.dis

start.o : start.S

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

led.o : led.c

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

clean:

    rm *.o led.elf led.bin led.dis


推荐阅读

史海拾趣

BAND-IT公司的发展小趣事

20世纪60年代,人类开始迈入太空探索的新纪元。在这个充满挑战和未知的领域中,紧固件的可靠性和安全性至关重要。1961年,艾伦·谢波德成为第一个乘坐麦克唐纳道格拉斯太空舱在太空旅行的美国人,而太空舱里的数千根软管和扎带卡箍正是由BAND-IT公司提供。这些产品以其出色的耐用性和可靠性,经受住了太空极端环境的考验,为太空探索的安全和成功作出了贡献。

Data Device Corporation公司的发展小趣事

为了进一步扩大市场份额,DDC开始积极开拓国际市场。通过参加国际展会、与海外客户建立合作关系等方式,DDC逐渐在国际市场上树立了良好的品牌形象。同时,DDC还针对不同国家和地区的市场需求,推出了定制化的产品解决方案。这些举措使得DDC在国际市场上的影响力逐渐增强,为公司的发展注入了新的动力。

Bellin Dynamic Systems公司的发展小趣事

随着公司规模的扩大和业务范围的拓展,Bellin Dynamic Systems开始注重品牌建设和市场推广。公司加大了对品牌形象的宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,公司还加强了与媒体和客户的沟通互动,积极传递公司的价值观和企业文化。这些举措有效地提升了Bellin Dynamic Systems在市场上的影响力和竞争力。

Fabrimex AG公司的发展小趣事

近年来,Fabrimex AG在品质管理和环境保护方面取得了显著的成绩。2016年,包括Fabrimex在内的整个WERAP集团均通过了ISO 9001:2015和ISO 14001:2015认证。这些认证不仅证明了公司在品质管理和环境保护方面的实力,还为公司赢得了更多客户的信任和认可。此外,公司还积极参与行业标准的制定和修订工作,推动行业的技术进步和发展。

这些故事只是Fabrimex AG在电子行业发展历程中的一部分,但它们足以展示公司在技术创新、市场拓展和品质提升方面的不懈努力。通过这些努力,Fabrimex AG在电子行业中逐渐崭露头角,成为了一家备受瞩目的企业。

Analog公司的发展小趣事

1995年,Fabrimex GmbH成立,作为电子组装和电源生产的生产公司。这一举措标志着公司进一步向国际化发展迈进。通过设立生产公司,Fabrimex AG能够更好地控制产品质量和生产成本,提高市场竞争力。同时,公司还加强了在全球范围内的销售活动,进一步扩大了市场份额。

GeneSiC Semiconductor公司的发展小趣事

1979年,Fabrimex AG接管了ARCO-Solar(美国)的代表处,标志着公司正式进入光伏领域。这一举措为公司带来了新的增长点,并推动了相关产品的研发和生产。随着光伏技术的不断发展,Fabrimex AG在光伏领域逐渐取得了显著的成绩,为公司带来了可观的收益。

问答坊 | AI 解惑

各大公司IC类免费样品申请

TPS2000系列数字存储示波器 详细资料申请 http://digital.ni.com/worldwide/china.nsf/sb/Download?OpenDocument&node=162000_zhs       样片申请服务(成都国腾微电子)http://www.gticcsssss.com/cn/khfw-ypsq.htm   ...…

查看全部问答>

单片机初学经验

单片机初学经验,大家看看 [ 本帖最后由 open82977352 于 2010-2-6 09:37 编辑 ]…

查看全部问答>

各位做嵌入式开发的兄弟,都在哪个城市?

不知做嵌入式开发,哪里的兄弟多些?所在地的情况如何?…

查看全部问答>

求readline交叉编译方法

我要用readline做个命令行,但是在移植readline的时候,make以后编译不通,出现下面的情况 make[1]: Leaving directory `/work/readline/readline-5.2/shlib\' 不知道是啥原因! 帮忙给点意见!^_^ 过程如下: # tar zxf readline-5.2.tar.gz ...…

查看全部问答>

学习wince开发

  我刚开始接触wince开发   对这还不是很了解    想通过半年的时间来提高自己 但是不知道从哪入手   想问有没有关于wince开发的教学视频啊或者参考书也可以    希望可以传上来或给个链接我&nb ...…

查看全部问答>

针对丝印器件 反查;本人曾经查找了一些资料,希望用得上

针对丝印器件 反查;本人曾经查找了一些资料,希望用得上 更偏僻的或者新出的产品就得花MONEY买专业材料了 价格不菲   这是其中一款反查界面;…

查看全部问答>

香版主,STM8S208和STM8A5189在CAN部分有啥区别啊

                                 我5189上CAN能正常接受发送数据,208上完全没有反应,是怎么回事啊…

查看全部问答>

选型请教:

请问版主,我只要以下功能和特性,选哪个芯片好: 1.STM32, 2.带CAN2.0B 3.带USB全速从机接口. 4.带JTAG接口, 5.LQFP封装. 6.引脚越少越好 7.价格最便宜 8.很好买到 谢谢!…

查看全部问答>

STM8S晶振抗干扰问题解决了没有

                                 本来从PIC转向STM8S,如果解决不了晶振问题,又要转回去了…

查看全部问答>