【经验】基于51架构MCU用C语言编程过程中启动文件的作用分析

2017-12-12 世强 John

SILICON LABSC8051FEFM8系列的芯片是基于51架构的MCU,一般我们在开发程序时都是使用C语言在开发,但细心的工程师会发现程序在在线调试时,从复位开始执行的并不是我们写的C语言的第一条指令,这是为什么呢?


这个现象的原因是C语言在编译的过程中会自动加入一段汇编的启动代码,这个启动代码文件就是STARTUP.A51文件,这个文件有什么作用呢?下面我们就来详细的分析一下这个文件。


在文件的开始定义了IDATA,XDATA,PDATA的长度,定义如下:

 IDATALEN        EQU     80H

XDATASTART      EQU     0

XDATALEN        EQU     0


接下来声明了C语言代码的函数及汇编代码的地址:

EXTRN CODE (?C_START)

PUBLIC  ?C_STARTUP

CSEG    AT      0

RSEG    ?C_C51STARTUP

STARTUP1:


其中?C_START就是C语言中的MAIN函数,STARTUP1就是芯片在执行程序时的第一条指令的标号,芯片在上电后就是从这里开始执行


接下来程序开始对IDATA区、XDATA区、PDATA区进行初始化,这几个区也就是程序中变量使用的区域,所以这个初始化的过程是将所使用的这几个区做一个清0的动作,IDATA区的清0代码如下(另外两个区域的程序段与这个是类似的):


IF IDATALEN <> 0

MOVR0,#IDATALEN - 1

CLRA

IDATALOOP:MOV@R0,A

DJNZR0,IDATALOOP

ENDIF


对DATA区的清0做完后,程序执行到给堆栈赋初值:

MOVSP,#?STACK-1


最后程序执行一条长跳转指令跳转到C语言的MAIN函数:

LJMP?C_START


到这STARTUP文件就启动完了,那么我们什么时候需要修改这个文件呢?一个是我们要在上电的第一条指令处关闭看狗门时,一个是我们在写BOOTLOADER程序时。


第一种情况下,如果我们将关闭看门狗的指令放到C语言的代码中,上电不会第一时间执行,所以我们要在STARTUP.A51中放入关闭看门狗的指令,以EFM8SB芯片为例,我们要在STARTUP1的标号处写这样的代码:

; Disable the WDT.

            anl   PCA0MD, #NOT(040h)      ; clear Watchdog Enable bit

这就可以保证在上电的第一时间关闭芯片内部的看门狗。


第二种情况是我们在写BOOTLOADER时要考虑应用程序的中断向量的入口,一般BOOT程序是放在第一扇区,而APP是放到其它扇区的,所以在写BOOT程序时要将中断向量的地址跳转到APP对应的向量地址处,以下的代码定义了部分中断的入口:


PUBLIC START_APPLICATION            ;The entry point (relocated reset vector)

START_APPLICATION     EQU  0200h    ;for the application FW project


INTVEC_TABLE          EQU  START_APPLICATION+3  ;Interrupt vector table starts here

INTVEC_SEPARATION     EQU  3        ;Interrupt vector separation is 3 Bytes


      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 0)  ;03h (Intr. 00)

      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 0)


      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 1)  ;0Bh (Intr. 01)

      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 1)


      CSEG  AT HW_INTVEC_TABLE + (HW_INTVEC_SEPARATION * 2)  ;13h (Intr. 02)

      AJMP  INTVEC_TABLE + (INTVEC_SEPARATION * 2)


概括来说,对于C语言的开发者,启动文件的内容还是要了解一些,这有助于优化自己的代码实现更稳定的性能及功能。


世强元件电商版权所有,转载请注明来源及链接。

  • +1 赞(0)
  • 收藏

评论

登录   |    立即注册

提交评论

最新评论

  • 你的样子 Lv3 . 高级工程师 2017-12-26
    收藏来等以后有需要找出来看看
  • ggss Lv7 . 资深专家 2017-12-12
    不错的资料,学习了。
  • FTQ Lv3 . 高级工程师 2017-12-12
    讲解的正是我的疑惑之处,谢谢!!
  • 苏牛 Lv4 . 资深工程师 2017-12-12
    这个内容有点意思
没有更多评论了
有问题?向百人技术专家提问
我要提问

400-887-3266(工作日 9:00-18:00)

service@sekorm.com

世强元件电商
最好的电子研发服务平台

  • 领先国内半年新元件/新技术/新方案
  • 全品类覆盖数百个原厂资料
  • 正品低价/供货保障
  • 大量现货,支持快速购买
下载世强元件电商APP
工程师创新研发的神器
知、选、研、用一站式服务

搞研发 找元件
上世强元件电商

我的资料
我的消息
我的