#26 2017-09-30 16:24:23

Валерий Книнский
Гость

Re: построение программы в Arduino

Спасибо за быстрый ответ, буду разбираться. Но по ходу есть еще вопрос:
  Гоняю программу тестирования печатной платы, которая работает следующим образом: после включения она гоняет тест и при каждом прогоне выкидывает в технологический монитор сообщения "Запуск прохода" и "Конец прохода".
  Останавливаю тест, включаю Ethernet (плата стоит сервером на Ethernet). Контролирую в том же технологическом мониторе, что запрос с компа пришел правильный.
  Запускаю опять тест, теперь в строках сообщений в технологическом мониторе передаются какие-то строки из ОЗУ. Т.е. программа при исполнении модуля Serial.println("Запуск прохода") устанавливает указатель не туда.
  Я подозреваю, что мне просто не хватает какой-то библиотеки, например <avr/pgmspace.h>, которая позволит контроллеру отделить массивы, располагаемые в ОЗУ от массивов, располагаемых в ПЗУ.
  Где эту библиотеку взять?
  Или проблема не в этом?

#27 2017-09-30 18:10:41

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: построение программы в Arduino

Валерий Книнский, если всё так как Вы написали, то просто кодировка.)

#28 2017-10-01 00:13:50

Валерий Книнский
Гость

Re: построение программы в Arduino

Вячеслав!
Большое спасибо за подсказку, а также всем поучавствовашим. Формат подсмотрел по ссылке
https://www.arduino.cc/en/Reference/PROGMEM
Немножко странный формат, ну да ладно, в Си для встроенных контроллеров это всегда так. При отладке немного поплутал. Меня смутило, что библиотеки SPI.h, Ethernet.h светятся красным, а avr/pgmspace нет.
С кодировкой все в порядке, но указатели "убегали" по очень простой причине. Буфер был величиной 650 байт, а формат указателя byte. Это я с самого начала проглядел.

#29 2017-10-01 00:25:27

Валерий Книнский
Гость

Re: построение программы в Arduino

Это сразу в глаза не бросается, вариант 1 не работает
// option 1
                        static short address_short = *index_ROM;
                        static char c;
                        for (int i = 0; i < len_index; i++) {
                          c = pgm_read_byte_near(address_short++i);
                          Serial.write(c);
                        }
а вариант 2 работает, хотя с точки зрения СИшного кода оба варианты правильны
// option 2
                        static char c
                        for (int i = 0; i < len_index; i++) {
                          c = pgm_read_byte_near(index_ROM + i);
                          Serial.write(c);
                        }

#30 2017-10-01 22:25:26

Green
Участник
Зарегистрирован: 2015-11-08
Сообщений: 464

Re: построение программы в Arduino

Сначала одно, затем другое... Похоже второй Сима.(

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела