历史上的今天
今天是:2024年09月08日(星期日)
2018年09月08日 | STM8L的RAM与内存模型
2018-09-08 来源:eefocus
一、RAM空间
在内存映射图上可以看到STM8L的RAM划分为2部分,如下:
2K的RAM空间包含513个字节的Stack,经过深入研究发现,其实RAM被划分为:short range、long range、stack这3个部分。如下:
可以在STVD中通过project setting设置上述3部分的大小,具体如下:Project->Settings->linker->input:
Short range空间的最大值是256个字节,库函数有时也会占用几个字节,因此,在此区定义变量时要特别小心,如果越界,编译器提示如下错误:
#error clnk Debug\test.lkf:1 segment .ubsct size overflow (6)
The command: "clnk -m Debug\test.map -l"D:\Program Files\COSMIC\Lib" -o Debug\test.sm8 Debug\test.lkf " has failed, the returned value is: 1
exit code=1.
此错误说明段.ubsct超出6个字节,段.ubsct表示在short range内存中未初始化的数据。
Long range的空间根据需求配置,如果数据大小超出范围,编译器提示如下错误:
#error clnk Debug\test.lkf:1 segment .bss size overflow (1)
The command: "clnk -m Debug\test.map -l"D:\Program Files\COSMIC\Lib" -o Debug\test.sm8 Debug\test.lkf " has failed, the returned value is: 1
exit code=1.
此错误说明段.bss超出1个字节,段.bss表示在long range内存中未初始化的数据。
Stack是从RAM的最高字节开始的,因此Stack空间为RAM的最高值与long range的最高值之间的差,一方面stack空间不能定义的太小,另一方面,不要定义太大的局部变量,局部变量一般存放在stack中。
另外,如果使用long range,还需要修改Project->Settings->C Compliler中的一项内容,如下:
如果Memory Models设置为short stack模式,则寻址空间只能达到256bytes,此模式下只能使用short range部分,因此如果要使用long range部分,应当设置为Long Stack模式。
二、内存模型
根据代码空间的大小,在工程配置中,可以使用不同的模型。对于代码空间小于64K的情况,可以使用mods0或modsl0;对于代码空间大于64K的情况,可以使用mods或modsl。
1、代码空间小于64K
函数指针和数据指针默认使用@near(2bytes)。
1)、mods0:全局变量默认定义在short range区,可以使用@near把全局变量显示定义的long range区。如:
unsigned char dat1[10];//数据存放在short range
@near unsigned char dat2[10];//数据存放在long range
2)、modsl0:全局变量默认定义在long range区,可以使用@tiny把全局变量显示定义在short range区。如:
unsigned char dat1[10];//数据存放在long range
@tiny unsigned char dat2[10];//数据存放在short range
2、代码空间大于64K
函数指针默认使用@far(3bytes),数据指针默认使用@near(2bytes),可以使用@far把数据指针显示设置为3bytes。
1)、mods:全局变量默认定义在short range区,可以使用@near把全局变量显示定义的long range区。如:
unsigned char dat1[10];//数据存放在short range
@near unsigned char dat2[10];//数据存放在long range
2)、modsl:全局变量默认定义在long range区,可以使用@tiny把全局变量显示定义在short range区。如:
unsigned char dat1[10];//数据存放在long range
@tiny unsigned char dat2[10];//数据存放在short range
史海拾趣
|
protel dxp中为什么没有intel的元件,到那可以下载到啊,谁能告诉我一下。 另外,在99se中有元件库Intel Databooks.ddb,怎么把他导入dxp中使用。… 查看全部问答> |
|
一、前言 模拟传感器的应用非常广泛,不论是在工业、农业、国防建设,还是在日常生活、教育事业以及科学研究等领域,处处可见模拟传感器的身影。但在模拟传感器的设计和使用中,都有一个如何使其测量精度达到最高的问题。而众多的 ...… 查看全部问答> |
|
Altium Designer Summer 08 集成库 pcb封装 sch封装 这是Altium Designer Summer 08 集成库 是三年用这个软件自己做的所有封装,里面基本上涵盖了所有的常用元件,单片机封装,很实用。对于单片机学习者相当的有帮助! [ 本帖最后由 water1987 于 2010-1-11 10:40 编辑 ]… 查看全部问答> |
|
现在想做一个加油站的加油数据采集和无线传输,数据采集和数据传输功能需要哪些设备?特别是无线数据传输这块,预计采用GPRS网络进行传输,不知道完成这个传输功能应该采用什么设备? 1.是基于GPRS网卡的二次开发? 2.直接使用GPRS DTU,这个价格 ...… 查看全部问答> |
|
我在课件上看到,STC89C52RC单片机的地址,只有80H-FFH这段地址能用程序来控制, 这就是在REG52.H头文件中被定义了,至于00H-7EH这段是被称为\"直接或间接寻址寄存器\", 一共分为四个区的,请问这四个区, 既然不能被程序控制,那么它是用在存放什么数据的 ...… 查看全部问答> |
|
前段时间抄了一块超声波电子白板的原理图,现在样品也做出来了,不过对超声波信号接收总是存在波动。估计是前端接收到的超声波信号放大处理存在问题,请哪位大神帮我分析下下面超声波信号的放大处理电路。 1.MK是超声波接收头,频率40K。 2.DS1 ...… 查看全部问答> |




