Как объявить матрицу, которая хранится в PROGMEM

Я пытаюсь написать заголовочный файл, который будет управлять светодиодной матрицей, но я застрял с синтаксической ошибкой, которую я не могу устранить

Я уже добавил "; " везде, где я думал, что это необходимо, и проверял 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 
    }  
};

ОШИБКА IS: Ошибка: max7219.h(15), # включается из: p2.c: ';' ожидаемый

строка 15 содержит символы [96][5] PROGMEM = ...

2 ответа

Решение
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, чтобы поместить во вспышку. Также я предполагаю, что вам нужно сделать два массива.

Пытаться:

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

     const char * const strings[] PROGMEM = {c1, c2};
Другие вопросы по тегам