'memcpy' forming offset 8 is out of the bounds
Вот интересная ерунда получается: скопировал код работы с FLASH из STM32F103 на STM32F072. Компилирую с теми же флагами, но на 103 все просвистывает без проблем, а на 072:
При чем здесь, интересно, тип __varsstart (объявленной в линкер-файле), если мне нужен лишь ее адрес?
Бред какой-то. Надо пойти погулять...
UPD: я написал static, а в оригинале его не было. Похоже, gcc ругается, если такое вытворять с локальными объектами... (хотя, честно говоря, я ничего не понял).
Все-таки, несмотря на уже приличное количество накопленного кода, он на сниппеты у меня не очень годится: перед использованием все равно приходится тратить время на "причесывание".
flash.c: In function 'flashstorage_init': flash.c:101:9: error: 'memcpy' forming offset 8 is out of the bounds [0, 4] of object '__varsstart' with type 'uint32_t' {aka 'long unsigned int'} [-Werror=array-bounds] memcpy(&the_conf, &Flash_Data[currentconfidx], sizeof(user_conf)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from flash.c:39: flash.h:44:17: note: '__varsstart' declared here extern uint32_t __varsstart;
При чем здесь, интересно, тип __varsstart (объявленной в линкер-файле), если мне нужен лишь ее адрес?
static const user_conf *Flash_Data = (const user_conf *)(&__varsstart);
Бред какой-то. Надо пойти погулять...
UPD: я написал static, а в оригинале его не было. Похоже, gcc ругается, если такое вытворять с локальными объектами... (хотя, честно говоря, я ничего не понял).
Все-таки, несмотря на уже приличное количество накопленного кода, он на сниппеты у меня не очень годится: перед использованием все равно приходится тратить время на "причесывание".