问题标签 [progmem]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
424 浏览

c++ - PROGMEM 从字符串数组中获取单个字符?

我正在尝试从字符串数组中获取单个字符以写入 Arduino 上的 LCD 显示器。只有我没有真正得到任何有效数据。

液晶写代码:

字符串池.h:

字符串池.cpp:

该函数getChar似乎没有返回正确的数据。

我将如何从程序中的字符串数组中读取单个字符?

0 投票
2 回答
1038 浏览

c - 从 PROGMEM 中查找 C 中十六进制字符数组的大小

我正在研究 AT90 微控制器,并且正在努力在屏幕上显示不同的字体。作为我的字体定义的一部分,我在下面有一个十六进制的 char 数组。出于这个问题的目的,我将 char 数组缩短为仅代表 4 个字符。

现在,如果我运行sizeof(font5x7),它会给我正确的答案,即 20。但是当我运行我的真实时font5x7,它会返回475而不是正确的数字225。这是真实的:

0 投票
1 回答
191 浏览

memory-management - 在程序变量上保存 Arduino 草图

我想在程序变量上保存一个 Arduino 草图,我想以字符串的形式保存它,但它会占用很多空间,但后来我考虑保存十六进制。你对如何做到这一点有任何想法吗?要使用的语法?

0 投票
1 回答
2017 浏览

arduino - 从 Arduino PROGMEM 中的结构读取字符串

我想从存储在 Arduino PROGMEM 中的结构中读取字符串:

此代码可以很好地打印字符串:

此代码炸弹并重新启动程序:

返回指针的代码是什么cmd.name

0 投票
1 回答
864 浏览

c++ - 如何制作二维 PROGMEM 数组的 PROGMEM 数组

我在 PROGMEM 中有几个二维数组。

我想将它们存储到另一个数组中,因此有一个 2d PROGMEM 数组的 PROGMEM 数组。

然后我想读出数据。

这就是我所拥有的

我的错误是:

我该怎么做?我一直在阅读并试图弄清楚这一点超过一个小时。我不知道我做错了什么。

有用的参考页面:

  1. http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
  2. http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga963f816fc88a5d8479c285ed4c630229
  3. https://www.arduino.cc/en/Reference/PROGMEM
0 投票
1 回答
947 浏览

c++ - PROGMEM 中的 Arduino 结构数组

我正在使用带有两个压电元件的独立ATmega328P来生成一些音乐。

我已经用音符的频率定义了一些常数。然后我定义了一个结构,其中包含第一个和第二个压电的注释以及注释的长度。然后我制作了更多这些结构的数组来描述每首歌曲。

问题是这样我很快就会耗尽内存。我试图将结构数组存储在 PROGMEM 中,以避免这个问题。我尝试使用一个名为 PROGMEM_readAnything 的小型库、memcpy_P() 或 pgm_read_word() 和 pgm_read_byte() 函数,但在所有情况下我都会遇到同样的问题。

当我遍历 NOTES 数组时,它会跳过一些元素,而正确读取和播放其他元素。它总是跳过相同的元素,而不仅仅是随机元素。

我什至尝试更换微控制器,认为芯片的某些部分可能已被某些东西损坏,但上传相同的草图我得到了相同的结果,因此微控制器可能完好无损。

这是代码:

我添加了一些行以在串行监视器中查看会发生什么。它读取正确的长度...

串行监视器的输出如下:

为什么会这样?或者有没有更好、更有效的方法来解决这个问题?

0 投票
3 回答
800 浏览

c++ - Arduino 程序读回乱码数据

我正在开发一个小型 HTTP 服务器。我正在构建一个路由器,由于可能有很多路由,我想将它们放入闪存中,这样我就不必使用宝贵的 SRAM。但是,由于我似乎无法从闪存中读回存储的数据,因此要么我没有正确理解某些事情,要么发生了一些奇怪的事情。

我有一个包含函数指针和字符指针的结构。我想将这些结构的数组存储到闪存中并将它们读回。但是,通过一个小的调试打印,我可以看到我无法正确读回 char 指针。它将乱码打印到串行端口。

这是一个小例子。

0 投票
1 回答
464 浏览

c - PROGMEM variable discarded even if declared as (used)

I'm using ATMEL Studio 6.2 and its toolchain with avr-gcc (avr8-gnu-toolchain). I have a variable that needs to be placed in flash (PROGMEM) and I declare it as a global:

The compiler doesn't complain and the linker doesn't complain, but when I open the .lss file, there is no gPrgLen to be found. In the .map file we can see that it has been listed under "discarded input sections"

It is built as a release, but a debug build gives the same result. How can I force the linker to include this variable in the *(.progmem*) section?

EDIT
Added static but still the same result.

Here is the linker part:

0 投票
1 回答
305 浏览

c++ - Arduino 访问数组会产生意想不到的结果

我正在尝试在我的 Arduino UNO 上读取闪存中某些字符串的长度。数组string_table给我带来了问题,如果我用编译器优化为常数的东西得到它的索引,那么我得到预期值。如果我在运行时使用变量来访问它,那么每次我这样做都会得到不同的答案。

我认为这不是 Arduino 特有的,因为我似乎没有调用任何 Arduino 特定功能。

代码:

结果:

0 投票
1 回答
1196 浏览

c - 通过 usart 发送大数组

我正在使用具有 16kb 闪存和 1kb Sram 的 AVR 控制器 atmega16。我已将数据存储在静态数组中,即static char raw_data[15361];并尝试使用以下功能通过 usart 发送它:

我的问题是,当我将数组放入 usart 时,它显示内存已满。 USART_SendString(raw_data);.我在网上搜索,发现我的函数正在将所有数组加载到 RAM 中,因此导致错误。我发现有一种方法可以通过 usart 发送存储在闪存中的数据,PROGMEM attribute但它仅适用于const string type. 那么我应该如何通过usart发送存储在闪存中的数据而不会导致内存满错误?