乐鑫技术交流
直播中

郝埃连

7年用户 1377经验值
私信 关注
[问答]

NodeMCU如何将位图数组放入PROGMEM (ILI9341)?

大家好,
我玩 ESP8266 NodeMCU 有一段时间了,我买了一个 ILI9341 2.8" 显示器并连接到 ESP(没有触摸屏)。
它从 DIY 气象站(由太阳能电池板)通过 TCP。
一切都很好,所以现在我想包括我所在地区的天气预报。
我正在使用通过 JSON 文件发送天气数据的本地天气预报提供商。
我可以解析 JSON 文件和提取数据,在所有这些数据中,还有对表示一种天气“状态”(多云、晴天等)的位图的引用。
这些位图是 18 个位图,72x68 像素...我不能使用 SD 卡存储所有这些位图,所以我想使用 PROGMEM 属性将它们“存储”在闪存中。
我使用 GIMP 将它们中的每一个转换为“.c”文件中的 C 数组。
生成的文件包含以下内容:
代码:全选/* GIMP RGB C-Source image dump (sereno.c) */

#define SERENO_WIDTH (72)
#define SERENO_HEIGHT (68)
#define SERENO_BYTES_PER_PIXEL (2) /* 2:RGB16, 3:RGB, 4:RGBA */
#define SERENO_PIXEL_DATA ((unsigned char*) SERENO_pixel_data)
const PROGMEM unsigned char SERENO_pixel_data[72 * 68 * 2 + 1]  =
("00000000000000000000000000000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000000000000000000000000000000"
"00000000000000000000000000000000000000000000000000000000000000000000000000............."
"


我在其中添加了“PROGMEM”但是当我编译时出现以下错误:
代码:全选sketchsereno.c:7:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'unsigned'
const PROGMEM unsigned char SERENO_pixel_data[72 * 68 * 2 + 1] =


如果我删除 PROGMEM 并在该行的开头添加“static”,则会加载位图,但只有其中的几个会导致内存空间不足。
为了显示位图,我使用 Adafruit GFX 库和“drawRGBBitmap”。
我该怎么做才能将所有位图保存到闪存中?

更多回帖

发帖
×
20
完善资料,
赚取积分