Arduino IDE在单独的文件中初始化char []

时间:2015-12-04 09:26:53

标签: c++ arduino

我有一个大的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 []。

我相信我可以用字体创建一个库,但这是解决这个问题的最佳方法吗?

2 个答案:

答案 0 :(得分:0)

尝试在

之前添加extern
const unsigned char font[];
oled.cpp

中的

如果没有extern,编译器会尝试为变量定义和分配缓冲区。 然后,不知道应该为不完整类型分配多少内存,它就会失败。

答案 1 :(得分:0)

extern const unsigned char font[];

在头文件中并从两个地方包含它,而不是将它放在您使用它的任何地方。这可以防止声明和定义之间的错位。