一、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
上一篇:STM8使用----STVD(COSMIC)定义变量指定其类型和位定义
下一篇:学习STM8 关于数据类型的定义心得
推荐阅读
史海拾趣
为了适应公司业务的快速发展和满足市场需求的不断增长,EEMB集团于2017年在汉川市修建了新工厂。新工厂占地面积120亩,使用面积达27000平方米,配备了先进的生产设备和技术。一期工程全面投入生产后,公司的产能得到了显著提升,能够更好地满足客户的订单需求。同时,新工厂的建成也进一步提升了公司的生产效率和产品质量。
随着电子行业的快速发展和变革,BETA Transformer Technology Corp公司面临着前所未有的挑战。为了应对这些挑战,公司不断加大研发投入,加强技术创新,推出了一系列符合市场需求的新产品。同时,BETA公司还积极调整生产结构,优化供应链管理,降低成本,提高产品质量。这些举措使得BETA公司在激烈的市场竞争中保持了领先地位。
Advanced Photonix一直注重研发团队的建设和培养。公司投入大量资源用于研发创新,鼓励团队成员不断探索新技术和新应用。在这种氛围下,公司的研发团队不断取得新的突破和进展。他们成功开发出了一系列具有自主知识产权的光电产品和解决方案,这些产品不仅提升了公司的技术实力,也为公司的长期发展奠定了坚实的基础。
在ELMEC Technology Of America Inc公司初创时期,创始人李明和他的团队面临着一个巨大的挑战:如何开发一款能在市场上脱颖而出的电子产品。经过无数次的实验和失败,他们最终成功研发了一款高效能、低功耗的半导体芯片。这款芯片的问世不仅为公司带来了第一笔可观的收入,也奠定了ELMEC在电子行业的技术领先地位。
2013年,绿索超容在南京江宁区智能电网产业园正式成立。公司自创立之初,就明确了“制造中国可靠性最高的超级电容”的目标,以及“引领超容行业,做绿色能源模范”的使命。这一清晰的发展定位,为绿索超容后续的技术创新和市场拓展奠定了坚实的基础。公司初期虽然面临资金和技术挑战,但通过不懈努力,逐步建立了自己的研发团队和生产体系。
在20世纪中期,随着电子技术的快速发展,电线电缆行业也面临着巨大的变革。Belden公司紧跟时代步伐,积极投入研发,推出了一系列具有创新性和前瞻性的产品。这些产品不仅满足了市场对高性能电线电缆的需求,还为公司赢得了众多行业奖项和荣誉。同时,Belden还建立了严格的质量控制体系,确保每一根电线电缆都符合最高的质量标准。
ThinkPad笔记本一直备受企业和个人用户的青睐,除了其良好的稳定性、耐用性和舒适性之外,一些个性化的硬件设计及与之相配套的软件亦是其中一个重要因素。下面,就让我们通过ThinkPad电源管理软件来感受一下“黑砖头”中蕴藏的个性化风格,让你能够 ...… 查看全部问答∨ |
|
较多的PCB工程师,他们经常画电脑主板,对Allegro等优秀的工具非常的熟练,但是,非常可惜的是,他们居然很少知道如何进行阻抗控制,如何使用工具进行信号完整性分析.如何使用IBIS模型我觉得真正的PCB高手应该还是信号完整性专家,而不仅仅停留在连连线,过 ...… 查看全部问答∨ |
|
printf("input a 4 hexadecimal:\\n"); scanf("%.2X %.2X %.2X %.2X",&bb[0],&bb[1],&bb[2],&bb[3]); printf("\\n%.2X %.2X %.2 ...… 查看全部问答∨ |
|