2015-12-04 4 views
0

У меня есть большой char [], который содержит растровый шрифт, который я использую для отображения чисел на OLED-дисплее. Инициализация массива находится в начале моего файла cpp, который просто делает файл более трудным для чтения. Я должен поверить, что есть способ определить этот массив в отдельном файле, но я не в идеях.Arduino IDE Инициализировать char [] в отдельном файле

У меня есть Arduino ина файл, и я оставил файл Ина в основном пустым, так что есть меньше шансов программного обеспечения Arduino спутать:

#include <SPI.h> 
#include <Adafruit_SSD1306ms.h> 
#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <RFduinoBLE.h> 

Я тогда новую вкладку font.cpp, которая содержит массив определения шрифта:

#include <Arduino.h> 

extern const unsigned char font[] PROGMEM = { 
    B00000000, B00000000, B00000000, B00000000, B00000000, 
    B00000000, B00000000, B00001111, B11110000, B00000000, 
    B00000000, B00000000, B01111111, B11111110, B00000000, 
    B00000000, B00000000, B11111111, B11111111, B00000000, 
... 
    B00000000, B00000000, B00000000, B00000000, B00000000 
}; 

Я тогда еще вкладка oled.cpp, который содержит код для отображения номера на дисплее:

#include <SPI.h> 
#include <Adafruit_SSD1306ms.h> 
#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <RFduinoBLE.h> 

const unsigned char font[]; 

void DrawNumber(char aValue[], uint size) { 
// draws the proper numbers on the display using the font 
} 

void setup() { 
} 
void loop { 
} 

Выход из компилятора выглядит следующим образом:

Arduino: 1.6.6 (Windows 7), Board: "RFduino" 

oled.cpp:7: error: uninitialized const 'font' [-fpermissive] 
const unsigned char font[]; 

        ^
oled.cpp:7: error: storage size of 'font' isn't known 
const unsigned char font[]; 
         ^
exit status 1 
uninitialized const 'font' [-fpermissive] 

    This report would have more information with 
    "Show verbose output during compilation" 
    enabled in File > Preferences. 

Когда код все в файл ина, он отлично работает, но я предпочитаю не иметь огромный символ растрового шрифта [] в том же файл с кодом для удобочитаемости.

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

+0

Ну, ошибка ясна. Теперь идите и исправьте. Вы должны быть более конкретными. – Downvoter

+0

Почему возникает первая ошибка? Я не понимаю, почему oled.cpp уже не имеет шрифта [] в области, когда он определен как extern и инициализирован. –

+0

Поскольку определение 'font []' находится в другой единицы перевода (что-то вроде файла), и поэтому компилятор (а не компоновщик) не знает, что определение e, ists. – MikeCAT

ответ

0

Попробуйте добавить extern до того

const unsigned char font[]; 

в oled.cpp

Без extern, компилятор попытаться определить и выделить буфер для переменной. Тогда, не зная, сколько памяти должно быть выделено для неполного типа, он не работает.

+0

Вот и все! Я думал, что я уже пробовал это, но, видимо, нет. Мой прокручивающий палец благодарит вас. –

0

поставил

extern const unsigned char font[]; 

в файле заголовка и включить его в обоих местах вместо того, чтобы положить его везде, где вы его использовать. Это предотвратит несоосность между декларацией и определением.

Смежные вопросы