历史上的今天
今天是: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灯来判断代码执行到了什么位置。
史海拾趣
|
冲动是魔鬼之——维修德生R-911的资料总集(checked) 本帖最后由 辛昕 于 2018-5-3 16:34 编辑 说起来,我早已忘记当年那个美女研究生小姐姐长什么样了,也根本没成功约过人家....... 倒是这一次疯狂的维修......... 没想到我后来的工作,甚至直到如今,都没改变这种毫无章法的风格.......... 真 ...… 查看全部问答> |
|
我想利用DCO产生一个320K的时钟给SMCLK用。看了手册没明白该怎么设置,手册上所说的8个离散频率是多少啊 有谁会告诉我下,该怎么设置DCO到320K,或告诉我怎么用具体的我自己设置… 查看全部问答> |
|
此实验在本人设计的LPC1114/LPC1343/LPC11U14开发板是验证成功:下面先秀秀图吧,下面是三种芯片三种开发板。SD卡在背面。。。 ...… 查看全部问答> |
|
在板厂制版的时候,大家可能会遇到要求发送光绘文件的情况,关于gerber文件的后缀分别代表什么意思呢?那就看看下面这个说明吧:GTL---toplayer 顶层GBL---bottomlayer 底层GTO---TopOverlay 顶层丝印层GBO---Bottomlayer 底层丝印层GTP---TopPaste ...… 查看全部问答> |
|
中国国际光电产业博览会暨第十七届中国国际激光、光电子及光显示产品展览会 展会场馆:北京朝阳区三环东路六号中国国际展览中心举办时间: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 ...… 查看全部问答> |
|
DRV8833 为玩具、打印机及其他机电一体化应用提供了一款双通道桥式电机驱动器解决方案。 该器件具有两个H 桥驱动器,并能够驱动两个直流(DC) 电刷电机、一个双极性步进电机、螺线 管或其他电感性负载。 每个H 桥的输出驱动器模块由N 沟道功率MOS ...… 查看全部问答> |
|
用CCS 5 单步 调试时,如果遇到__delay_cycles(782000);怎么直接跳出,这个好像不是函数??? 如果是for循环语句又怎么跳出?? 还有什么调试技巧吗??… 查看全部问答> |




