- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚在 LinkedIn Learning 上观看了这段视频,内容是关于查找表,它提到如果没有“const”限定符,数组将在 RAM 中分配,初始分配在启动期间发生,整个表将被存储两次 - RAM 和 ROM 中。
有人可以更详细地向我解释一下吗?为什么会存储两次?这是否意味着所有没有“const”的变量/数组都会存储两次? switch case 会比没有 const 的查找表更好吗?
提前致谢。
最佳答案
微 Controller (除了无闪存的微 Controller )通常具有比 RAM 更多的闪存。将常量数据放在 RAM 中是一种浪费。
当您使用 const
关键字时,大多数工具链会将数据放置在位于只读存储器 - 闪存中的 .rodata 部分中。某些 uC 类型(例如 AVR)需要使用特殊机制来访问这些数据,对于大多数现代 uC 来说几乎没有区别(快速 uC 需要使用等待状态减慢读写操作,因为 FLASH 比 SRAM 慢)
您还可以使用属性和编译指示强制将static const
自动变量放置在ROM中
(gcc) static const char __attribute__((section(".rodata"))) x;
(部分可能有不同的名称 - 检查您的工具链文档)
但它仅适用于全局变量 - 大多数实现将自动 const
变量放置在位于 RAM 中的堆栈上
static const
也可以仅存储在 ROM 中。但几年前,我对 uC gcc 分支之一有过一次糟糕的经历。为了确保这一点 - 检查您的工具链如何处理这些变量。
因此,const
对于查找表来说并不是必需,但保存(通常)非常有限的资源 - SRAM 是合乎逻辑的。
关于c - 嵌入式软件 - 为什么查找表中需要 'const'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52356610/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我想知道,在可能的情况下,switch 还是 const table 更有效? 例如,什么会表现更好: switch(input) { case 0: value = VALUE_0; b
我是嵌入式软件的初学者。我尝试使用 C 代码和基于 ARM Cortex-M4F 的 MCU Tiva C LaunchPad 构建简单的实时操作系统内核,并在 IAR Embedded Workbe
我是一名优秀的程序员,十分优秀!