не понимаю, что от меня хочет компилятор
- Войдите на сайт для отправки комментариев
Чт, 30/04/2015 - 21:51
Здравствуйте. Скачал программу с++ и хочу заставить ее работать на arduino. Но компилятор на что то ругатеся. Привожу весь код в прикрепленном файле
вот, что говорит компилятор
sun.ino: In function 'double get_lon(double)': sun.ino:490:1: error: unable to find a register to spill in class 'POINTER_REGS' sun.ino:490:1: error: this is the insn: (insn 301 300 304 5 (set (reg:SF 124 [ D.4715 ]) (mem:SF (post_inc:HI (reg:HI 16 r16 [orig:149 ivtmp.78 ] [149])) [2 MEM[base: _224, offset: 0B]+0 S4 A8])) sun.ino:478 99 {*movsf} (expr_list:REG_INC (reg:HI 16 r16 [orig:149 ivtmp.78 ] [149]) (nil))) sun.ino:490: confused by earlier errors, bailing out Ошибка компиляции.
Заранее спасибо!
Наверное компилятор просит исправить ошибку в 490 строке.
Да, КЭП это я
В для капитана приведу строку 490
Я понимаю, что он ругается на саму процедуру, но не хватает знаний понять, что в ней не так.
Может кому то будет не лень посмотреть, а я с телефона считать 490 строку не буду, точно собьюсь. Вообще, обычно вставляют исходник с нумерацией строк и под спойлер, тогда и считать не нужно и посмотреть можно и без компа. Может посмотрю позже.
Arduino какая? Здесь сплошные double. Только массивы в начале занимают 1860 байт. На mega2560 (8К памяти) еще куда ни шло, но на UNO (2K) - можно смело сказать, что оно не будет работать, даже если скомпилируется.
Компилятор не может прожевать следующие конструкции:
При разбивке такой конструкции на следующую, компилятор прожевывает:
Таких фрагментов несколько, ищите и заменяйте.
Но если у Вас не mega2560, то в чистом виде скетч работать не будет.
PS Надеюсь, что пустые setup & loop - это пока еще не дописаное, потому что в таком виде скетч работать не будет вообще, даже если скомпилируется.
Я изменил setup & loop на:
Поличились следующие данные по памяти:
Это подтверждение моим словам. Компилировал для Mega2560. ArduinoIDE v1.6.3.
кстати, подскажите, как мне убрать в процедуру этот массив, что бы раз в сутки его в память загонять, м.б. его на флешке хранить?
банально попробовал в "главную процедуру" перенести инициализацию переменных - начал ругаться на их отсуствие в других процедурах. их туда стоит "передавать" ?
Да, забить его во флеш, поскольку он не меняется. Считать будет медленней,но если это не критично, то пофиг.
На счёт "передавать" все равно его где то надо хранить, создавать динамически не думаю, что будет лучше.
На счёт *(sk1+n) и sk1[n] это одно и тоже и можно не менять, код будет тот же.
2k для меги2560 не напряжно, можно не париться.
я немного переработал код с целью сократить используемую память, исключил глобальные переменные.
код не мой, поэтому комментарии сохранены
теперь его можно вклинивать в программу, пользуйтесь последней функцией, предварительно расчистив память, и не мучайтесь :-) как я