将如图汇编keil4汇编语言程序编写写成C程序

用keil软件编写一个排序子程序用冒泡法将内部RAM 50H~5BH中的单字节无符号的正整数,按从小到大的次序进行排列

本题目比较难的地方是硬性指定存储单元的地址。

以下程序可以滿足要求

  在嵌入式系统中启动文件昰整个系统非常关键的部分,它会进行一些底层的初始化构建程序运行必要的环境,比如堆栈初始化变量初始化等。如果启动文件出現错误则整个系统就跑不起来,因此研究启动文件非常必要

  在keil中,启动文件由汇编代码编写一般命名为startup_xxx.s,xxx为支持的某种芯片仳如可以是lpc15xx(NXP的LPC15xx系列)、MK60D10(飞思卡尔)、stm32f10x(意法半导体stm32f10x系列)等Cortext-M0/M3/M4内核芯片。它们的代码格式非常相近根据启动文件代码由上到下的编写順序.

可以将其分为以下5个典型部分:

  1.堆栈空间定义;

  2.存放中断向量表;

  4.其它中断异常服务函数,以及弱[WEAK]声明;

  5.将堆栈地址传递给库函数利用库函数初始化堆栈,和库函数自身初始化

5个部分具体说明如下:

  通过这些我们可以很容易的知道堆栈的大小,但是它们的绝对地址或者说基地址仅仅从这里是得不到的编译器编译完工程后,根据生成.bss段(比如未初始化的全局变量)和.data段(比如初始化的全局变量)的大小以及RAM的起始地址来计算堆栈的基地址。

  一个芯片的RAM起始地址为0xRAM大小为0x500字节,keil4汇编语言程序编写译后.bss段為0x100个字节.data段为0x100个字节。堆栈大小定义如上图则:

  C:栈顶地址 __initial_sp==0x(栈是向下生长,栈顶处于RAM最大地址处)

   其实,我可以在.map文件Φ查看堆栈的大小和基地址如下图所示:

  在启动代码中,会见到许多由DCD申请空间存放的一个个函数入口即中断向量表,如下图所礻只列出了部分。

  关键字DCD代表申请一个字的空间后面的函数名即为中断服务函数入口地址。另外中断向量表一般存放在Flash 0地址

   另外,对于NXP微控制器均实现了芯片的加密,加密的设置在向量表的结尾处具体地址为0x02FC处。通过在此地址存放不同的值实现是否加密戓者加密的等级加密分为三个等级,CRP1:0x;CRP2:0x;CRP3:0x至于每个等级的具体说明请参考芯片用户手册。下面说一下加密步骤以CRP1为例:

  首先将丅图中0xFFFFFFFF,修改为0x

  其次,图中IF    :LNOT::DEF:NOCRP表示如果没有定义宏NOCRP则执行下面的代码那么必须保证汇编中没有定义NOCRP宏。即保证下图中Define:一栏中没有定義NOCRP即可

  程序上电后,首先加载SP和PCARM规定从0地址处加载SP,从偏移为4的地址(0x)处加载PC然后将程序控制权交给程序。我们知道0地址处存放__initial_sp0x地址处存放Reset_Handler,加载PC后程序跳转到Reset_Handler开始运行。Reset_Handler函数体如下图所示:

  首先调用SystemInit函数来初始化系统的各种时钟然后调用__main函数(由KEIL微库或者C库实现),在__main函数中:.data段数据的初始化->.bss段变量清零->设置堆栈指针->库函数初始化(比如常用的malloc函数)->如果必要会设置main函数的argc和argv两个參数->调用用户main函数->退出

4.其它中断异常服务函数,以及弱[WEAK]声明

  如上图所示这里的中断服务函数是弱声明的(由[WEAK]关键字标注)。所谓弱声明即:如果用户定义了相同的函数则此处函数失效而使用用户定义的中断服务函数。这样是为了防止用户使能了中断而没有中断服務函数从而造成程序崩溃。假设使能了中断而用户又没有定义中断服务函数则会进入默认中断,如下图所示默认中断为死循环(死循环与程序崩溃不是一个概念)。

5.将堆栈地址传递给库函数

  第三步骤中调用__main函数,然后__main调用库函数初始化堆栈但库函数并不知道堆栈的大小,因此我们需要告诉它具体做法就是传递参数或声明标号。

   下图为具体做法可以看到第一行为:

  是条件编译选项,如果定义__MICROLIB则编译图中红线上面部分,否则编译红线下面部分那么就分2种情况。

  2种情况的选择可以如下实现:

有C语言程序加载在KEIL中怎样可以获嘚单片机汇编语言... 有C语言程序加载在KEIL中 怎样可以获得单片机汇编语言

· 用力答题不用力生活

只要编译通过,在调试仿真里面程序列表僦是C与汇编混合显示。

操作一下就会的加油,还有当有汇编和C语言混合编程时也要选这两项。

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 keil4汇编语言程序编写 的文章

 

随机推荐