【问题标题】:Use of memory in c++c++中内存的使用
【发布时间】:2013-08-28 09:08:53
【问题描述】:

我不知道如何提出这个问题,但它是这样的:

  1. 在我的 Atmel MCU 上使用 c++ 进行编程时,我倾向于在同一个数据存储器中混合使用“程序”变量和“用户”变量。这在时间上很麻烦,因为我想做一些可以加载或保存的预设。而且我不希望保存“程序”变量,因为程序将根据“用户”值生成正确的值。将其拆分在内存中是常见的做法吗?例如。 PGM-Memory 中的 timercounter,DATA-memory 中的 thresholdByUser?

  2. 在我的程序中,我创建了几个不同的函数,它们都有自己的一组用户变量。 例如:设置有 5 个用户变量,生成器有 6 个用户变量等... 你会制作 1 个大数组,然后将 #define settingsgeneratorSpeed 1, #define settingsBacklight 2 作为地方,所以你可以这样称呼它们:Array[generatorSpeed], Array[settingsBacklight] 还是你仍然会拆分它并使用 struct orso 收集它们?

在 STK500 上使用 ATMEGA644 处理 atmelstudio 4.0。

感谢您提供的所有帮助!

【问题讨论】:

  • 您是在问低功耗嵌入式硬件的限制条件吗?您的担忧对于一般的 C++ 编程并不真正有效。
  • 嗨,我不是在问约束。我正在寻求有关编程结构的帮助。上述问题的常见做法是什么。
  • 好吧,正如我所说,您的担忧在一般 C++ 编程中无效。编译器将构造数据,找出寻址模式,每次计算偏移量和所有这些东西。既然您提到了“相同的数据内存”,我假设您的目标是功能有限的硬件,一些嵌入式平台有自己的棘手领域。无论如何,如果您想将相关设置“打包”在一起,为什么不直接使用结构呢?这也将确保正确对齐。
  • 请指定您的架构。 AVR 的答案与 ARM 的答案大不相同。
  • 我正在使用 atmelstudio 4.0(我更喜欢 6.0)

标签: c++ arrays atmel


【解决方案1】:

假设您使用的是 AT(X)Mega,当提到 Atmel MCU 时:IIRC 这取决于您使用的编译器套件。使用 gcc,如果您有类似静态 int 的东西,它将转到 PGM 并在程序运行时复制到 RAM。因此,如果您希望变量不在 PGM 内存中,则必须将它们设置为堆栈或堆变量。常量和静态将始终存在于两者中。如果你不想只拥有 PGM 常量,你可以指定它,但这需要特殊的读取操作。

【讨论】:

  • 谢谢,你的目标是'#include ',有'pgm_read_byte'之类的功能吗?因为这就是我正在做的事情。大量数据驻留在 PGM 内存中(如菜单文本等)并通过“pgm_read_byte”等读取。
【解决方案2】:

对于问题 2,我会使用 const int& settingX = array[Xoffset] 而不是定义。但这假设有一些需要遍历数组,否则我只需定义单独的变量。

【讨论】:

  • 不错!我试试看!
猜你喜欢
  • 2012-11-15
  • 2011-04-17
  • 2010-12-13
  • 2012-03-09
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多