如何声明存储在PROGMEM中的矩阵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何声明存储在PROGMEM中的矩阵相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个驱动LED矩阵的头文件,但我遇到了语法错误,我无法解决

我已经添加了“;”到处我认为有必要并检查https://www.nongnu.org/avr-libc/user-manual/pgmspace.html

#ifndef max7219_H_
#define max7219_H_

#include <io.h>
#include <pgmspace.h>
#include <delay.h>
#include <stdint.h>

#define SLAVE_SELECT PORTB &= ~( 1<<PB4 );     
#define SLAVE_DESELECT PORTB |= ~( 1<<PB4 ); 

char characters[96][5] PROGMEM = 
{ 
   {
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000 
    }  
};

错误是:错误:max7219.h(15),#include from:p2.c:';'预期

第15行是char字符[96] [5] PROGMEM = ...

答案
const PROGMEM uint8_t characters[96][5] = {
    {
      0b00000000,
      0b00000000,
      0b00000000,
      0b00000000,
      0b00000000 
   },
    ... // 95 more symbols
 };

注意,如果用维度声明的数组,它应该包含初始化器中的所有数据,即所有96个符号。

UPD:错误可能是由pc2.c之前的#include "max7219.h"中的代码引起的。如果你有几个“包含”,那么检查前一个。即:

#include "a.h"
#include "b.h"
#include "max7219.h"

错误可能在b.h的末尾

另一答案

你需要将它声明为const以放入flash。另外我猜你需要制作两个数组。

尝试:

     const char c1[] PROGMEM = "1";
     const char c2[] PROGMEM = "2";

     const char * const strings[] PROGMEM = {c1, c2};

以上是关于如何声明存储在PROGMEM中的矩阵的主要内容,如果未能解决你的问题,请参考以下文章

将数据存储在程序存储器(PROGMEM)中并通过usb串行通信发送到puTTY屏幕

Arduino PROGMEM静态存储区的使用介绍

如何将浮点矩阵作为 2D 纹理传递给片段着色器?

将字符串转换为 Const Char XYZ[] PROGMEM

如何让片段中的多个视图调用片段类中声明的相同 onClick 函数?

如何使用模块化代码片段中的LeakCanary检测内存泄漏?