graphitemaster / incbin

Include binary files in C/C++
The Unlicense
938 stars 87 forks source link

INCBIN`d var throws an error when accessed #55

Closed ChaserVasya closed 2 years ago

ChaserVasya commented 2 years ago

VSCode, PlatformIO ESP8266 nodeMCU v3.0 PIO`s INCBIN lib https://github.com/AlexIII/incbin-arduino?utm_source=platformio&utm_medium=piohome (just a small add-on to this lib)

I can't take any datum from incbin`d array. It throws exception.

#include "Arduino.h"
#include "incbin.h"

INCBIN( my, "path/to/file.extension");

void setup(){
  Serial.begin(9600);
  Serial.println();

  Serial.println("assigning");
  uint8_t datum = *gmyData;
  Serial.println("assigned");

  Serial.println(datum);
}

void loop() {}

monitor output

assigning

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Exception (3):
epc1=0x402010f1 epc2=0x00000000 epc3=0x00000000 excvaddr=0x40238b74 depc=0x00000000

LoadStoreError: Processor internal physical address or data error during load or store
  epc1=0x402010f1 in setup at ??:?
  excvaddr=0x40238b74 in ethernet_input at ??:?

>>>stack>>>

ctx: cont
sp: 3ffffe00 end: 3fffffc0 offset: 0190
3fffff90:  feefeffe 00000000 3ffee564 402010eb  
3fffffa0:  feefeffe 00000000 3ffee69c 40201e60  
3fffffb0:  feefeffe feefeffe 3ffe85dc 40100cc1  
<<<stack<<<

0x402010eb in setup at ??:?
0x40201e60 in loop_wrapper() at core_esp8266_main.cpp:?
0x40100cc1 in cont_wrapper at ??:?

File is a "primary" certificate gtsltsr.crt from point 1.b from https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#using_a_long-term_mqtt_domain

Also didn't work gmyData[0], ButSerial.write( gmyData, gmySize) works and prints correct result and doesn't throw exception. WTF???

AlexIII commented 2 years ago

Use pgm_read_byte() to read from program memory.

PGM_P p = reinterpret_cast<PGM_P>(gmyData);
uint8_t datum = pgm_read_byte(p);