ru_reprap


RepRap: трёхмерный принтер, кот. печатает себя


Previous Entry Share Next Entry
avr-gcc, вопросы
поумнеть
nicka_startcev wrote in ru_reprap
вопросы про авр-гцц/авр-г++.

что на самом деле означает этот варнинг (в чужих исходниках), как по факту скомпилируется такой код (куда ляжет переменная) и как стОит его исправлять? В общем, что-где смотреть про (авто)размещение переменных в флеше?

inc/Marlin.h:61: warning: only initialized variables can be placed into program memory area

ага, это я включил предупреждения при компиляции сырцов прошивки для репрапа и слегка офигел.

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

не. в исходном коде переменная принудительно указана как "хранящаяся в программной памяти", на вид она константа, а компилятор не смог ее туда положить.

А можно посмотреть кусочек кода?

указанные строки выглядят так:
6: #define OVERSAMPLENR 16
[...]
10: const short temptable_1[][2] PROGMEM = {
11: {       23*OVERSAMPLENR ,       300     },
[...]
59: {       1008*OVERSAMPLENR,       0       } //safety
60: };
61:


то есть, там явно константы, там явное указание, что их надо класть в progmem, но компилятор отказывается класть их в прогмем.

Вроде все правильно... А если указать размер массива явно? Сколько там строчек - 49?

10: const short temptable_1 [49] [2] PROGMEM = {

если указать явно - та же фигня вылезает.

You are viewing ru_reprap