0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51单片机的启动文件内容

Q4MP_gh_c472c21 来源:老马识途单片机 作者:老马识途单片机 2022-04-24 09:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在我们使用kei c51创建一个51单片机项目时,会有如下图所示的提示:

57708142-c2f5-11ec-bce3-dac502259ad0.jpg

keil创建新项目时,提示是否添加启动文件

一般情况下,需要选择“是”。当然,也可以选择不加。那么,这个启动文件的作用是什么?什么情况下需要加,什么情况下可以不加?

今天我们就来详细了解一下这个启动文件的内容,看明白这个内容后,我们就会有种恍然大悟的感觉:“哦,原来是这样啊!”

启动代码第一段

▼以下是启动代码原文第一段:

$NOMOD51;------------------------------------------------------------------------------;  This file is part of the C51 Compiler package;  Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.;  Version 8.01;;  *** <<< Use Configuration Wizard in Context Menu >>> ***;------------------------------------------------------------------------------;  STARTUP.A51:  This code is executed after processor reset.;;  To translate this file use A51 with the following invocation:;;     A51 STARTUP.A51;;  To link the modified STARTUP.OBJ file to your application use the following;  Lx51 invocation:;;     Lx51 your object file list, STARTUP.OBJ  controls;;------------------------------------------------------------------------------;;  User-defined  Power-On Initialization of Memory;;  With the following EQU statements the initialization of memory;  at processor reset can be defined:;;  IDATALEN: IDATA memory size <0x0-0x100>;      Note: The absolute start-address of IDATA memory is always 0;            The IDATA space overlaps physically the DATA and BIT areas.IDATALEN        EQU     80H;;  XDATASTART: XDATA memory start address <0x0-0xFFFF> ;      The absolute start address of XDATA memoryXDATASTART      EQU     0     ;;  XDATALEN: XDATA memory size <0x0-0xFFFF> ;      The length of XDATA memory in bytes.XDATALEN        EQU     0      ;;  PDATASTART: PDATA memory start address <0x0-0xFFFF> ;      The absolute start address of PDATA memoryPDATASTART      EQU     0H;;  PDATALEN: PDATA memory size <0x0-0xFF> ;      The length of PDATA memory in bytes.PDATALEN        EQU     0H;;

以下是启动代码第一段的翻译:

不使用预先定义的SFR。就是告诉汇编器不使用预定义的寄存器名,因为汇编器内部定义了51的寄存器名,但在实际使用时会用51的扩展芯片例如52之类的,如果包含了52的头文件就会出现重复定义所以要先声明一下不适用汇编器内部定义的寄存器名。

这个文件是C51编译器包的一部分

版权所有(c) 1988-2005 Keil Elektronik GmbH和Keil Software, Inc。

版本8.01

*** <<使用上下文菜单中的配置向导>>> ***

----------------------------------------------------

STARTUP.A51里面的代码在处理器复位后执行

用下面的命令行语句调用A51进行编译产生目标文件,

A51 STARTUP.A51

用下面的命令行语句调用BL51连接器把STARTUP.OBJ目标文件连接到程序代码中,

Lx51 invocation:

Lx51调用

---------------------------------------------------

Lx51 调用目标文件列表, 由STARTUP.OBJ 目标文件控制

用户自定义上电后需要初始化的储存区域(初始化RAM区的数据)

在处理器复位时通过下列EQU伪指令来初始化内存(RAM单元)

IDATALEN:IDATA存储区的大小<0-256>,可以根据自己的选择修改

IDATA绝对的起始地址总是0

IDATA区涵盖DATA和BIT区(DATA区(直接寻址区)以及 BIT区 (位寻址区)),;至少要保证与C51编译器运行库有关的存储器的空间进行0初始化

XDATA存储区的起始地址<0x0-0xFFFF>

XDATA内存的绝对起始地址。

XDATA存储器空间的绝对起始地址为0,

XDATA空间的大小

XDATA空间的长度以字节为单位

说明xdata的字节数清0,该值默认为0

PDATA空间的大小

PDATA存储器的空间的绝对起始地址

需用0进行初始化的PDATA存储器的空间字节数

在51系列中data、idata、xdata、pdata的区别:

  • data:固定指前面0x00-0x7f的128个RAM。

  • idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。

  • xdata:外部扩展RAM,一般指外部0x0000-0xffff空间。

  • pdata:外部扩展RAM的低256个字节。

57893700-c2f5-11ec-bce3-dac502259ad0.jpg

需用0进行初始化的IDATA存储器空间的字节数,IDATALEN只是一个标号(与IDATA不一样哦),EQU只是做宏一样的替换,类似于C语言中的#define uint (unsigned int),以上的代码使得程序以后在碰到IDATALEN时替换成80H。

IDATALEN可以定义为你自己喜欢的名字如MyDataLen等。之所以用IDATALEN,一是为了好记,二是为了表明和IDATA有关。

579e528e-c2f5-11ec-bce3-dac502259ad0.jpg

各种常数名及其含义

启动代码第二段

我们继续来看看51单片机的启动代码里面都有哪些东西。

下面先列出51单片机启动代码第二部分的原文:


;------------------------------------------------------------------------------;; Reentrant Stack Initialization;;  The following EQU statements define the stack pointer for reentrant;  functions and initialized it:;;  Stack Space for reentrant functions in the SMALL model.;   IBPSTACK: Enable SMALL model reentrant stack;      Stack space for reentrant functions in the SMALL model.IBPSTACK        EQU     0       ; set to 1 if small reentrant is used.;   IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>;      Set the top of the stack to the highest location.IBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1  ; ;;  Stack Space for reentrant functions in the LARGE model.      ;   XBPSTACK: Enable LARGE model reentrant stack;      Stack space for reentrant functions in the LARGE model.XBPSTACK        EQU     0       ; set to 1 if large reentrant is used.;   XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>;      Set the top of the stack to the highest location.XBPSTACKTOP     EQU     0xFFFF +1   ; default 0FFFFH+1 ; ;;  Stack Space for reentrant functions in the COMPACT model.    ;   PBPSTACK: Enable COMPACT model reentrant stack;      Stack space for reentrant functions in the COMPACT model.PBPSTACK        EQU     0       ; set to 1 if compact reentrant is used.;;    PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>;      Set the top of the stack to the highest location.PBPSTACKTOP     EQU     0xFF +1     ; default 0FFH+1  ; ;

原文全是伪指令、宏定义这些东东,看起来确实很头疼啊。我们简单的翻译一下吧。

以下是第二段启动代码翻译:

再入函数模拟初始化;

以下用EQU指令定义了再入函数模拟堆栈指针的初始化;

使用SMALL存储器模式时再入函数的堆栈空间;

IBPSTACK EQU 0 ; 使用SMALL存储器模式再入函数时将其设置成1;

IBPSTACKTOP EQU 0FFH+1 ; 将堆栈顶设置为最高地址+1;

使用LARGE存储器模式时再入函数的堆栈空间;

XBPSTACK EQU 0 ; 使用LARGE存储器模式再入函数时将其设置成1;

XBPSTACKTOP EQU 0FFFFH+1; 将堆栈顶设置为最高地址+1;

使用COMPACT存储器模式时再入函数的堆栈空间;

PBPSTACK EQU 0 ; 使用COMPACT存储器模式再入函数时将其设置成1;

PBPSTACKTOP EQU 0FFFFH+1; 将堆栈顶设置为最高地址+1。

三种模式解析

这里提到了SMALL,LARGE,COMPACT三种模式。这三种模式究竟有什么含义呢?我们下面就来了解一下。

不同内存模式下的堆栈。Keil 编译器中有三种模式设置。这是由51处理器繁多的寻址模式导致的,不同的寻址模式有不同的效率。

small模式:在small模式中,所有默认变量均装入单片机内部的RAM中,51单片机默认内部RAM只有128B;52单片机默认256B。该模式下的优点是访问速度快,缺点是空间有限。

compact模式:在compact模式中,所有默认变量均位于单片机的256B RAM中,和在small模式中使用关键字 pdata来定义数据变量的效果一样,在该模式下程序总变量空间不能超过256B。

large模式:在large模式中,所有默认变量可放在多达64KB的RAM中,包括内部RAM和外部RAM,这和使用关键字xdata 来定义变量的效果一样。

  • small:变量存储在内部ram里。

  • compact:变量存储在外部ram里,使用页8位间接寻址。

  • large:变量存储在外部Ram里,使用16位间接寻址。

我们一般使用small来存储变量,就是说单片机优先把变量存储在内部ram里,如果内部ram不够了,才会存到外部去。

compact的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部ram很少,只有256个字节,那么对该256个字节的读取就比较快。如果超过256字节,那么要不断地进行切换的话,就比较麻烦。compact模式适用于比较少的外部ram的情况。

large模式,是指变量会优先分配到外部ram里。

3种存储方式都支持内部256字节和外部64k字节的ram。区别是变量的优先(或默认)存储在哪里的区别。除非你不想把变量存储在内部ram,才使用后面的compact、large模式。因为变量存储在内部ram里,运算速度比存储在外部ram要快的多,大部分的应用都是选择Small的模式。

END

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 51单片机
    +关注

    关注

    278

    文章

    5716

    浏览量

    135091
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

    51907
  • 变量
    +关注

    关注

    0

    文章

    616

    浏览量

    29566

原文标题:51单片机的启动代码里面都有啥?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    8XC51FX:高性能8位单片机的全方位解析

    8XC51FX:高性能8位单片机的全方位解析 在单片机的世界里,8XC51FX系列以其卓越的性能和丰富的功能脱颖而出,成为众多电子工程师在设计项目时的热门选择。今天,我们就来深入探讨一
    的头像 发表于 03-29 13:15 244次阅读

    单片机里的程序运行方式

    我们想要理解单片机是如何运行程序的,我们首先需要了解单片机的组成,我们这里以80C51单片机为例来理解程序在单片机中是如何运行的。
    发表于 01-16 06:57

    单片机启动&amp;库函数的构成

    文件启动文件以“.s”后缀出现,意为start_up。 2.启动文件由汇编语言编写,单片机
    发表于 11-18 08:15

    C语言和单片机C语言有什么差异

    区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。 3、单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C
    发表于 11-14 07:55

    51单片机RS485编程实例资料

    详细介绍51单片机RS485通信接线和编程代码
    发表于 10-20 14:57 6次下载

    怎么测单片机系统频率

    单片机系统频率是指单片机工作时的时钟频率,它直接影响单片机的运行速度和处理能力,准确测量系统频率对单片机应用开发、程序调试和性能优化具有重要意义。测量
    的头像 发表于 07-25 11:39 1072次阅读

    单片机怎么驱动电机?

    、高效的控制。       单片机本身的输出电流和电压较小,通常无法直接驱动功率较大的电机,这是因为电机在启动和运行时需要较大的电流,若直接由单片机供电,可能会因过载损坏单片机。因此,
    的头像 发表于 07-25 09:31 1287次阅读

    单片机怎么烧程序

    单片机烧程序是将编写好的程序代码写入单片机内部存储单元,让单片机按照预设逻辑工作的过程,是单片机应用开发中不可或缺的环节。无论是简单的灯光控制程序,还是复杂的工业控制算法,都需要通过烧
    的头像 发表于 07-23 11:47 1971次阅读

    大一暑假适合学51单片机吗?

    大一暑假学 51 单片机,简直是老天爷赏饭吃的黄金窗口。我当时就是靠着这两个月,把从课本上看来的 C 语言指针、循环语句,变成了能让 LED 按节奏跳舞的真本事。
    的头像 发表于 07-16 11:42 781次阅读
    大一暑假适合学<b class='flag-5'>51</b><b class='flag-5'>单片机</b>吗?

    AT89C51 单片机中文资料

    电子发烧友网站提供《AT89C51 单片机中文资料.pdf》资料免费下载
    发表于 06-24 15:29 1次下载

    单片机原理及应用

    本书全面系统地介绍了 MCS-51 系列单片机的基本结构、工作原理及应用技术。主要内容包括:微型计算机的基础知识、MCS-51 单片机的基本
    发表于 06-16 16:58

    图解单片机功能与应用(完整版)

    从基础知识的介绍出发,图文并茂,直观、系统地介绍了单片机的内部结构、工作原理和应用技巧。全书分为10章,内容包括51单片机编程资源图解、51
    发表于 06-16 16:52

    2.4寸TFT彩屏配套测试程序-51单片机

    如题,2.4寸TFT彩屏配套测试程序-51单片机
    发表于 06-04 16:26 0次下载

    51单片机笔记(建议收藏!)

    简单汇总下51单片机的资源和学习方法 一页纸讲清单片机 也许有人问:有没有那么简单呀? 当然不会那么简单啦,首先你要把书读薄,然后再把书读后,最后把书放进自己脑子里,形成自己的一套思路。 理解
    发表于 05-21 17:24

    基于51单片机的温湿度检测与调节系统电路图

    电子发烧友网站提供《基于51单片机的温湿度检测与调节系统电路图》资料免费下载
    发表于 05-12 17:23 4次下载