2440裸机编程之二 C语言调用汇编语言编程

发布者:salahc1983最新更新时间:2019-11-18 来源: 51hei关键字:裸机编程  C语言调用  汇编语言  编程 手机看文章 扫描二维码
随时随地手机看文章

和C调用汇编一致,前四个参数用R0-R3传递,后面的用堆栈传递

测试这个程序:


//******************************************************
//main.C

extern int test(int, int, int);
int n;

int main(void)
{
n = test(2,4,6);
while(1);
}

int add(int a, int b, int c)
{
return a+b+c;
}
//******************************************************


;****************************************************
;test.S

IMPORT add    ;引进add
EXPORT test   ;供出test

AREA test,CODE,READONLY
CODE32

STR LR,[SP],#-4    ;保存LR:入栈
BL  add            ;调用C程序
LDR LR,[SP,#4]!    ;LR出栈
MOV PC,LR          ;返回main

END
;***************************************************

过程说明:main调用n = test(2,4,6),使2、4、6分别通过R0、R1、R2传递给汇编函数test,然后test调用C程序add,R0、R1、R2分别传给a、b、c,然后求和结果用R0返回test,test又将R0返回main函数,所以最后 n = 12;

如图:


注意汇编程序中IMPORT和EXPORT的用法:
IMPORT add:进口,指add在外部文件中,当前文件要调用EXPORT test:出口,指test在当前文件中,可以给外部文件调用同样在C文件中,如果要调用外部文件,使用extern关键字申明函数,如:extern int test(int, int, int);


这些关键字是必须的,如果在没有使用这些关键字的情况下,调用外部函数,编译器要报错的。

关键字:裸机编程  C语言调用  汇编语言  编程 引用地址:2440裸机编程之二 C语言调用汇编语言编程

上一篇:malloc函数及用法
下一篇:S3C2440中断过程详解(ADS,TQ2440)

推荐阅读最新更新时间:2024-11-05 15:33

【STM32 Cotex-M3处理器系列编程】定时器输出PWM波
//使用定时器TIM4的3通道CH3输出占空比为25%的PWM波 #include stm32f10x.h int main(void) { // SystemInit(); //配置IO口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE,ENABLE);//IO口使能设置 GPIO_InitTypeDef GPIO_InitStructure; //定义结构体 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM3的C
[单片机]
关于启动代码2440init.s(一)
停滞了这么长的时间没有写博客,这次献上启动代码吧,也就是我们通常所说的bootloader了。这里献上别人整理出来的东西,光看启动代码我都花了挺长的时间,关键是为了通过启动代码知道开机时板子是怎么运作的,对硬件理解非常有用。顺便说一下,启动代码每个程序都有,文件叫做2440init.s,汇编的哈,看之前好好去看看汇编的内容去吧。哇咔咔~废话少说,献上程序,程序从ENTRY开始执行,看到前面眼花缭乱那些其实是宏来的,一开始从ResetEntry执行。慢慢分析去吧,作者XXX讲的挺详细的了。 ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,sta
[单片机]
提高PLC程序运行速度的编程方法
怎样来提高PLC程序运行速度,可以采用以下几种编程方法,仅供参考:  1:根据工程实际需求,进行功能块规划,编写子程序  在PLC中 ,子程序是为一些特定的控制目的编制的相对独立的程序。执行子程序调用指令CALL等,如果条件不满足子程序调用时,程序的扫描就仅在主程序中进行,不再去扫描这段子程序,这样就减少了不必要的扫描时间。  2:用字或双字数据传送给DO点方法来控制输出  在PLC的应用中通常都会有大量的输出控制,用字或双字数据传送给DO点方法来控制输出可以提高速度,只要根据实际应用的要求,合理分配输出地址,变换控制输出控制字,可以大大减少PLC程序执行的步数,从而加快PLC的程序运行速度。  3:脉冲触发SET、RESET  P
[嵌入式]
基于S3C2440A定时器的正确使用方法
S3C2440A有5个16位定时器。其中定时器0、1、2和3具有脉宽调制(PWM)功能。定时器4是一个无输出引脚的内部定时器。定时器0还包含用于大电流驱动的死区发生器 定时器0和1共用一个8位预分频器,定时器2、3和4共用另外的8位预分频器。每个定时器都有一个可以生成5种不同分频信号(1/2,1/4,1/8,1/16和TCLK)的时钟分频器。每个定时器模块从相应8位预分频器得到时钟的时钟分频器中得到其自己的时钟信号。8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK 每个定时器有它自己的由定时器时钟驱动的16位递减计数器。当递减计数器到达零时,产生定时器中断请求通知CPU定时器操作已经
[单片机]
基于S3C<font color='red'>2440</font>A定时器的正确使用方法
mini2440(2) LED灯裸机硬件控制程序
查找mini2440的原理图,找到LED部分的原理图: 然后查找nLED_1到nLED_4分别连接的S3C2440的引脚: 由图可知: nLED_1---GPB5 nLED_2---GPB6 nLED_3---GPB7 nLED_4---GPB8 在S3C2440的引脚划分中,这四个引脚都属于Port B,因此可以通过配置Port B的控制寄存器对这四个引脚的功能进行配置: 如果要让LED灯亮,nLED_1到nLED_4端需要低电平,因此GPB5到GPB8引脚需要: (1)输出:GPBCON 因此,GPBCON寄存器的11,13,15,17位要设置为0,而10,12,14,16位要设置为1,而且我们还知道GPBCO
[单片机]
mini<font color='red'>2440</font>(2) LED灯<font color='red'>裸机</font>硬件控制程序
在Multisim环境中对Xilinx 可编程逻辑设备进行编程
       Multisim 11.0.1软件进一步提升了 可编程逻辑器件 (PLD)原理图设计仿真与硬件实现一体化融合的性能。这个最新版本的Multisim使您能够在Multisim设计环境下,直接对您的Xilinx逻辑器件进行编程。这将使得理论概念与硬件实现之间的关系从未变得如此简单。   Multisim环境中的可编程逻辑设备   在Multisim软件环境内,您可以使用可编程逻辑器件原理图中的专业可编程逻辑器件组件,以图形化的形式定义可编程逻辑器件(PLD)的内部结构。当您完成了数字化设计和通过仿真验证电路功能行为时,您准备将该设计文件导入到目标硬件开发板上进行实现。现在使用Multisim 11.0.1软件,
[嵌入式]
ARM的启动代码为什么要用汇编语言
在ARM中讲到ARM的启动代码必须有汇编语言写成,一直不是很了解。 书上给的原因是 C语言不具备上电立即运行的条件: 全局变量没有初始化、系统堆栈没有初始化等。 那单片机的C语言怎么就不要启动代码?(keil带有启动代码,但是处理不好会出错,一般不用也没事) 看来还是和编译器有关,今天看到了一个比较信服的答案。 编译器在编译C语言时 ,会在前加一段固定的代码**.O文件,他是编译器自带的一个文件, 即C语言执行的第一条指令不是C语言的main入口函数中,而是**.O中指令。 指令初始化后调用MAIN函数入口,但是并不能直接运行,我们必须写一段代码来取代他。 所以我们经常能看到一些超简单的启动代码: AREA |DATA|,CODE,
[单片机]
8051指令集和汇编语言程序设计
8051单片机有255条指令。基本上可以分为下面几大类。下面给出各个类别的速记。 1.数据转移类 MOV(Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;(没有MOV Rn,Rn这样的寻址方式) MOVC(Move Code)读取程序存储器数据表格的数据传送;(只有两条:MOVC A,@A+DPTR和MOVC A,@A+PC) MOVX (Move External RAM)对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved