问题标签 [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 回答
300 浏览

string - 努力让 Arduino Uno 上的 ESP8266 与 AT 通信可靠地工作

我正在努力将 ESP8266 连接到作为网络服务器可靠工作的 Arduino Uno。我的 ESP8266 的固件是 1.1.1 - 我目前没有更新它的选项(或知识)。下面是我的代码。如果我提供一个小字符串,它几乎不会起作用。但是,如果我尝试从浏览器加载页面三到四次,它通常会关闭连接或永远加载(崩溃?)。最终,我需要提供一个嵌入了 json 的网页,该网页将加载由 esp8266 提供的第二个页面,一个 json 文件。我有一个工作演示,但在几次检索后它崩溃了。我知道我的 html 页面对于字符串来说太长了,所以一直试图转移到 PROGMEM,最初只用一个短字符串进行测试。我正在正确存储和检索它(我认为,至少我可以Serial.print它)但是一旦我尝试将其写入 ESP8266,我的浏览器中就会出现永无止境的负载。

我在哪里错了?是导致问题的字符串/PROGMEM 还是我在 AT 命令中缺少的其他内容(例如某种 ping 以保持连接打开)?

0 投票
1 回答
432 浏览

c++ - Arduino - PROGMEM a avr/pgmspace.h 的问题

我试图在静态字符上使用 progmem 来节省一些有价值的空间。一切似乎都很好,但是串行和液晶显示一些奇怪的换行符而不是我的文本。

我想做什么:

打印时我在液晶显示器上得到了什么: https ://imgur.com/2waPkgZ

有人能帮我吗?

0 投票
1 回答
387 浏览

c++ - 指针和 PROGMEM 的问题

我在 Arduino UNO 上编程,遇到了一个非常烦人的路障。

我对 PROGMEM 有一个非常奇怪的问题,我已将其缩小为指针数组的问题。

当我用变量 j 索引 PROGMEM 数组时。它会根据天气返回不同的结果,变量 j 是由静态数字设置的,还是由另一个变量设置的。

程序编号是存储在对象中的整数,并且仅按如下方式设置,内存被分配并且变量保持其值。我已经对此进行了测试。

将 j 设置为 0 直接产生正确的地址

但是,如下使用 progam 变量设置 j 会产生不正确的地址

甚至试图解决这个集合问题,比如对 *(this->program) 进行一些算术运算或将其发送到返回相同值的整数的函数也无济于事。唯一有效的是循环遍历所有整数,如下所示:

上述工作是确认 malloc 工作正常的更多理由,因为 *(this->program) 在将其与 j 进行比较时返回正确的值。

这是一个非常糟糕的解决方法,因为它的效率非常低,并且会在我的程序中浪费主要的周期,这对时间非常敏感。

任何指向解决方案的指针或指针表现得有趣的原因都会非常有用。

该问题来自一个非常大的项目,因此为了帮助缩小错误范围,我在一个小得多的 .ino 文件中重新创建了该问题

整个代码是这样的。上传我的 arduino UNO 时产生了同样的错误

编辑:

  1. 经过进一步调查,将 j 设置为在我的主项目中不是常量的任何变量(因此该变量不能在项目中的任何其他内容中更改)似乎会以与所述相同的方式破坏 PGM。
0 投票
0 回答
20 浏览

avr-gcc - 将像素阵列移动到闪存并使用 CRGB HTML 颜色代码

我正在尝试使用 PROGMEM 属性将大型像素阵列移动到闪存

但编译器抱怨说

variable 'crab' with dynamic initialization put into program memory area.

当然,我可以直接使用 HTML 颜色(例如 0xff0000),但我想保留 FastLed 提供的人类可读值。

有什么方法可以同时实现:在闪存中使用阵列并使用 CRGB::Red?

0 投票
2 回答
110 浏览

c++ - 为什么 AVR-GCC 编译器在使用相同的变量但作为 PROGMEM 重载时会引发错误?

我的问题更像是:为什么编译器“认为”PROGMEM 变量”“普通变量”相同?是因为PROGMEM 关键字“只是”一个宏,仅此而已?还是出于其他原因?有什么解决方法..?

问题演示:

让我们考虑下面的例子:

它抛出error: 'object::object(int*)' cannot be overloaded好像它是一样的。

结局:

不久前我在开发图书馆时遇到了这个问题,我在arduino-forum上问过这个问题,但我没有任何答案,所以我想在很长一段时间后再次问这个问题,在这里.

0 投票
1 回答
54 浏览

avr - avr-gcc 如何将字符串放入程序中?

我有疑问如何将字符串放入程序中?这是示例程序。

有没有办法在函数调用中将字符串参数声明为 PROGMEM?我知道“经典”方式,例如:

..但就我而言,如果可能的话,我更喜欢单行。示例程序是 meninglles,但在实际情况下,有许多参数和许多“ParAdd”调用。但找不到使用类似的解决方案:

有人知道解决方案吗?arduino中的F()宏之类的东西?

0 投票
0 回答
51 浏览

c++ - 在 C++ 中使用 PROGMEM 字符串 (avr-gcc)

要将字符串存储在 PROGMEM 中,avr-gcc您必须编写如下内容:

当你想使用这个字符串时,你必须使用很多不同的函数(pgm_read_byte, strcpy_P,...)。

因为我不想记住所有这些功能,所以我更喜欢实现一个类来隐藏所有这些功能。实现很简单:

要使用它,您唯一需要记住的是编写 PROGMEM 和数组的正确大小:

但是这个实现有两个基本问题:

  1. 用户可以将字符串的大小写成小。例如:

我想测试字符串的长度是否真的是 N。一种方法(不起作用)是:

  1. 不得不写 2 次 PROGMEM 这个词很奇怪。如果可以的话,我更愿意写来定义我的字符串,例如:

以及要在类中编写的 PROGMEM。这也行不通。

有什么帮助吗?谢谢。

0 投票
0 回答
23 浏览

c++ - C++ ESPAsyncWebServer - 无法从 PROGMEM 读取一些占位符

在 AsyncWebServer中使用模板,您可以在 %% 中定义变量,如下所示:

%% 之间的值被替换为处理器函数:

其中 var 是“var_name”。

它在 90% 的情况下都能正常工作,但有些变量无法读取(“module_name”、“pm_constant” - 如您所见,没有特殊字符等)。如果我用“module_nam”替换“module_name”,它会再次运行良好。变量作为一堆随机特殊字符传递给函数,例如“????” 或“<?:D?”。

代码用于 ESP32、Arduino IDE。多个 ESP32、重启、多次闪烁、更改变量位置等问题仍然存在。

为什么?PROGMEM 和变量替换究竟是如何工作的?