我有一个大的char [],其中包含一个位图字体,用于在OLED显示屏上显示数字。数组的初始化是在我的cpp文件的开头,这使文件更难阅读。我不得不相信有一种方法可以在一个单独的文件中定义这个数组,但我没有想法。
我有一个Arduino ino文件,我将ino文件大部分留空,这样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.
当代码全部在ino文件中时,它工作正常,但出于可读性原因,我不希望在同一个文件中使用巨大的字体位图char []。
我相信我可以用字体创建一个库,但这是解决这个问题的最佳方法吗?
答案 0 :(得分:0)
尝试在
之前添加extern
const unsigned char font[];
oled.cpp
中的
如果没有extern
,编译器会尝试为变量定义和分配缓冲区。
然后,不知道应该为不完整类型分配多少内存,它就会失败。
答案 1 :(得分:0)
把
extern const unsigned char font[];
在头文件中并从两个地方包含它,而不是将它放在您使用它的任何地方。这可以防止声明和定义之间的错位。