STM8L的RAM与内存模型

一、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

STM8L的RAM与内存模型相关推荐

  1. 从底层吃透java内存模型(JMM)、volatile、CAS

    前言 随着计算机的飞速发展,cpu从单核到四核,八核.在2020年中国网民数预计将达到11亿人.这些数据都意味着,作为一名java程序员,必须要掌握多线程开发,谈及多线程,绕不开的是对JMM(Java ...

  2. 探索 Linux 内存模型--转

    引用:http://www.ibm.com/developerworks/cn/linux/l-memmod/index.html 理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计 ...

  3. 并发编程-02并发基础CPU多级缓存和Java内存模型JMM

    文章目录 CPU多级缓存 CPU多级缓存概述 CPU 多级缓存-缓存一致性协议MESI CPU 多级缓存-乱序执行优化-重排序 JAVA内存模型 (JMM) 计算机硬件架构简易图示 JAVA内存模型与 ...

  4. java内存模型 原子性_Java内存模型JMM 高并发原子性可见性有序性简介 多线程中篇(十)...

    JVM运行时内存结构回顾 在JVM相关的介绍中,有说到JAVA运行时的内存结构,简单回顾下 整体结构如下图所示,大致分为五大块 而对于方法区中的数据,是属于所有线程共享的数据结构 而对于虚拟机栈中数据 ...

  5. 【深入Java虚拟机JVM 03】Java内存模型

    说明:文章所有内容均摘自<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的 ...

  6. java if在内存中_全面理解Java内存模型

    Java 内存模型的抽象 在 java 中,所有实例域.静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用"共享变量"这个术语代指实例域,静态域和数组元素).局部变量( ...

  7. java线程内存模型_深度解析Java多线程的内存模型

    内部java内存模型 硬件层面的内存模型 Java内存模型和硬件内存模型的联系 共享对象的可见性 资源竞速 Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操 ...

  8. 聊聊高并发(三十三)Java内存模型那些事(一)从一致性(Consistency)的角度理解Java内存模型

    可以说并发系统要解决的最核心问题之一就是一致性的问题,关于一致性的研究已经有几十年了,有大量的理论,算法支持.这篇说说一致性这个主题一些经常提到的概念,理清Java内存模型在其中的位置. 一致性问题更 ...

  9. java 及时释放内存_JMM(一):初识Java内存模型

    在并发编程中,线程之间的通信是一个很关键的问题,而该问题解决方案主要可分为两大类:消息传递.共享内存.前者有以Erlang语言为代表的Actor模型,而后者中典型的则是Java语言.对于消息传递机制而 ...

最新文章

  1. 领域驱动设计之聚合与聚合根实例一
  2. leetcode-1-两数之和
  3. RabbitMQ –使用Spring集成Java DSL串行处理消息
  4. CocoaAsyncSocket 套接字
  5. 【模型加速】TensorRT详解
  6. 支持向量回归预测怎么做_机器学习如何在油气开发预测中发挥作用?
  7. mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
  8. 被捧上天的 GPT-3,商业化之路怎么走?
  9. 免费批量化音频切割软件 AutoVoiceCut
  10. android gsm功能,Android手机-GSM网络与WCDMA网络选择的设置
  11. Express 路由
  12. 论文阅读--SAP-SSE: Protecting Search Patterns and Access Patterns in Searchable Symmetric Encryption
  13. iphone11返回上一级手势怎么设置_iPhone 11 系列手势操作大全你了解吗?
  14. 让你的断舍离不再无处安放 享物说发起小红花联盟
  15. 计算机屏保是不是休眠,计算机上屏保、待机、休眠、睡眠、关机的区别
  16. 深度学习CNN模型预测电影评论中的情感问题
  17. 大学生综测评分计算管理系统
  18. Linux网卡驱动程序详解
  19. 网站建设学习(十四)——XML介绍及语法
  20. 初学者:python调用gurobi入门混合整数规划小案例

热门文章

  1. I2C 连接 12864 OLED 屏幕
  2. 招标投标中各流程时间期限的规定
  3. [Android Pro] 将你的安卓手机屏幕共享到PC或Mac上
  4. kubectl插件管理工具krew
  5. 用键盘控制鼠标移动!!
  6. FFplay序列号分析
  7. 中小型网络系统总体规划与设计方法(二 )
  8. 从零开始的Nginx详解(2)【Nginx-HTTP服务器】
  9. 无胁科技-TVD每日漏洞情报-2022-6-23
  10. qbo_camera包 stereovision.cpp 代码分析