单片机程序的存放

1)对于烧录在单片机里面的程序,程序的代码段,data段,bss段,rodata段等都存放在单片机的Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到单片机的RAM中,并建立好堆栈,开始调用程序的main函数。以后,便有了程序存储器和数据存储器之分,程序运行时从Flash(即指令存储器,代码存储器)中读取指令 ,从RAM中读取与写入数据。

2)RAM->存放data段,bss段,堆栈段;

ROM->存放代码段(code 段)与只读数据段(rodata段);

3)bss段的理解:(Block Started By Symbol)通常是指用来存放程序未初始化的全局变量和静态变量的一块内存区域,特点是可读写的;在程序执行之前bss段会自动清零,所以未初始化的全局变量与静态变量在程序执行之前就已经初始化为0了。

注:bss段与data段的区别:bss段存放的是未初始化的全局变量与静态变量;data段存放的是初始化后的全局变量与静态变量;

4)rodata段的理解:rodata段存放的是程序只读数据,一般是程序里面的只读变量(如const修饰的变量)与字符串常量。单独设立".rodata"段有很多好处,不光是在语义上支持const字,操作系统加载时可以将".rodata"段的属性设置为只读,保证了程序的安全。

时间: 2024-10-18 05:53:29

单片机程序的存放的相关文章

51单片机特别功用存放器和位界说

接下来的几节,我们会带着人人编写第一个单片机程序.在此之前,我们先来理解一些 51 单片机特有的程序语法以及 Keil 软件的根本操作步调,请人人必定要有耐烦.我们次要是用 C 言语来对单片机编程,而有的单片机有那么几条很特别的独有的编程语句,51 单片机就有,先引见 2 条.第一条语句是:sfr  P0 = 0x80;sfr 这个症结字,是 51 单片机特有的,他的感化是界说一个单片机特别功用存放器(special function register).51 单片机外部有许多个小模块,每一个模

第一个单片机程序(C言语编写)

忙活了半天,预备任务做了那么多,终于要编写我们的程序代码了.假如学过 C 言语的话,你应当很轻松的跟着我的编程本人写出来,假如没学过 C 言语也没紧要,你先照着我的抄,我会在适宜的地位写出来对 C 言语语法的说明,如许抄几回后再看看说明,就应当很明确了,抄的时分必定要仔细,特别标点符号弗成以搞错.第一个单片机程序: #include <reg52.h> //包括特别功用存放器界说的头文件 sbit LED = P0^0; //位地址声明,留意:sbit 必需小写.P 大写! void main

51单片机程序技巧

本系列文章探讨的主题都是在Keil uVision3集成编译环境下完成的,针对的是51系列单片机. 下面就介绍一下在我的单片机程序里必须要包含的一个头文件----"const.h",完整内容如下: #ifndef _CONST_H_ #define _CONST_H_ #include <intrins.h> #define TRUE 1 #define FALSE 0 typedef unsigned char BYTE; typedef unsigned int WOR

单片机入门指南系列(十五) 单片机程序下载失败总结

前面介绍了点亮第一个LED的全过程,很多人可能很幸运的点亮了LED,然而也很可能不少人非常不幸没有把程序下载进去.初学者常会遇到程序无法下载的情况,很多人在尝试多次未果后比较受打击,因此放弃了学习,实在太可惜了.鉴于此,这里列举了单片机程序下载失败的各种出错原因.判断方法和解决方法,是前人所遇到的种种原因的总结. STC单片机下载程序主要分为三部分:单片机最小系统.下载电路.计算机端.下载失败一般主要就从这三个方面来解决问题. 快速排错方法 如果你有或者能向别人借到一套可以正常下载程序的电脑.单

【KEIL&#183;单片机&#183;扫盲贴】关于ARM单片机程序内存使用情况的细致讨论。

接触了两年多时间的单片机编程本人对关于单片机程序内存如何耗费的问题一直懵懵懂懂,直到在近日看到某篇有关于MDK MAP文件介绍的帖子后才有种醍醐灌顶的感觉,这里我将分享在此之上的观点与见解以供大家讨论学习. 大家都知道ARM单片机的内部存储空间极其匮乏无论是从Flash还是RAM上,每每给单片机机编程都有一种惜字如金的感觉,工程师们一般会在容量有限的情况下规范其编程习惯简化代码避免冗余,那么首先我们如何知道的程序下载到单片机上到底占用了多少Flash程序运行又会使用多少RAM? 首先上一张图:

单片机入门指南系列(十) 单片机程序下载相关知识

原文发表自我的个人主页,欢迎大家访问 http://purplesword.info/mcu-primer-10 注:本篇在写<单片机入门指南系列>之前就已经写过,现在发现这篇比较合理的位置,应该是放在<单片机入门指南系列(六) 单片机最小系统--麻雀虽小,五脏俱全>之后的,但是由于之前考虑不周,所以只好放在这里了,也就不重新修改文章的位置了. 作为基础知识补充,本篇详细介绍了串口.51单片机的ISP下载等知识,虽然这些知识并不一定要很了解也能学习单片机,但是有一些概念有时对解决问

STM32 Keil C++编写单片机程序

C++ 属于面向对象的编程语言,OOP的思想不必多说,特别对于复杂的软件工程来说,利用OOP绝对是事半功倍,相对于传统的C来说: 当然用C来写单片机程序无可厚非,已经延续了一个传统,从大学时学的开始到工作岗位,好多人都是一直用C来做,但是既然Keil支持C++编译, 可以用C++来编写你的代码,可以利用高级语言来结构化,清晰化你的程序,为嘛不用呢!哈哈,个人看法!下面进入正题: C++ 兼容C,所以STM32的库都是可以被C++使用的,既然这样,那就简单了!在建立好新的STM32工程时候,那就可

时间片轮调的单片机程序结构

时间片轮调的单片机程序结构 作者:佚名 来源:本站原创 我们使用单片机去做一些任务的时候,通常把程序写成顺序结构,基本可以解决大部分的设计要求了.而且这种结构便于理解,而且程序易构成模块化,在各个模块中调用实现更复杂的任务. 然而顺序结构的写法,有时候避免不了沉重冗长的时间等待.例如键盘扫描,你就给我弄了一个delay_20ms()函数,而在这延时的过程,其实 MCU可以做很多事情的,这不白白的浪费掉这段时间吗?其实,delay的这段时间用数码管显示代替,也就是在等待的过程,我们可以做一下显示.

单片机程序模板

#include <reg52.h>           //头文件调用,写程序时都要加上,#define uint unsigned int  //宏定义,为了后面定义变量书写简便#define uchar unsigned charuchar mm=0;                    //全局变量uchar flag_get=0;            //定义标志位,为1则灯亮/***************************************************