Класс!!! Я о такой и не знал. Раньше всегда две функции приходилось писать, чтобы выводить данные из flash и RAM
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
версия от Атмел, которая в составе Atmel studio? (напомню тема тут: AVR studio в вопросах и ответах). У меня пару проектов было сделано в Atmel studio, глянул - было делано так:
Я Ваш код не проверял, но подтверждаю, __flash и __memx действительно работают, как и подсказал ARV PS. Меня до этого pgmspace.h не сильно напрягало, но с применением __flash код стал более читаем и его легче адаптировать с атмела на PIC. Меньше корректировать код. Ну а с применением __memx вообще нет нужды дублировать функции только из-за того, что одна работает с ram, а другая с flash. Хотя может и раньше это можно было обойти, ноя не программист, пишу, как соображалки хватает
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Ваш "суслик" не совсем багю Ниже если почитать, то в том МК нет просто отдельных инструкций LPM для загрузки из флэша. А адресное пространство флэша и ОЗУ там и так линейно. Поэтому такое и не работает. Там просто линкером надо секцию во флэш поместить и всё.
Проверте пожалуйста, кто нибудь, последний код, в последней Atmel studio (неужто теперь заработало).
Давно всё работает, что тут проверять-то. К тому же никто не мешает со студией использовать любой тулчейн. Я без проблем подключал туда avr-gcc 9.0. Актуальные сборки avr-gcc есть тут если что: https://blog.zakkemble.net/avr-gcc-builds/
Но как быть с библиотечными функциями типа strlen_P(const char *s);? Чем их заменить то?
На те же функции без суффикса _P. Компилятор сам всё сделает. А XC8 сам по себе платный. В бесплатной версии он выдает очень плохой код. Для AVR его использовать не вижу смысла. Это с PIC он необходимое зло получается.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Да проверил на древней AVR Studio 4.19 - установил последний тулчейн с родного сайта. Ура - на меге48 конст __флэш заработало. Там, правда теперь gcc 5.4.0. Но на тини10 по прежнему деготь в бочке меда. Тини10 использую регулярно.
итог: в топку const __flash и __memx иже с ним (мое имхо) з.ы. "Там просто линкером надо секцию..." "Я без проблем подключал туда avr-gcc 9.0..." - не для новичков
На те же функции без суффикса _P. Компилятор сам всё сделает.
вы уверены?
Ну а как еще? Функции с суффиксом _P работают с переменными с атрибутом PROGMEM. Они соб-но используют ф-ии pgm_* для загрузки данных. А т.к. с атрибутом __flash мы работаем с переменной как с обычной константой с любыми функциями, то и подобные функции также нужны обычные. Тут уже компилятор при обращении к переменным __flash должен знать как их обработать. Надо будет проверить.
Добавлено after 20 minutes 19 seconds: oleg110592, в топку PROGMEM, потому что устарело. Как и 4ая студия - мамонт. Тулчейн вы обновили, а avr-libc? У меня нет такой проблемы, собирается под т10 без проблем с const __flash. Более того, у меня например нет ф-ии strlen_P для PROGMEM под т10:
Код:
/tmp/ccX6CWPS.o: In function `strlen_P': /home/nstorm/avr8-gnu-toolchain-linux_x86_64/avr/include/avr/pgmspace.h:1782: undefined reference to `__strlen_P'
Ну конечно, а почему нет? Функции с суффиксом _P работают с переменными с атрибутом PROGMEM. Они соб-но используют ф-ии pgm_* для загрузки данных. А т.к. с атрибутом __flash мы работаем с переменной как с обычной константой с любыми функциями, то и подобные функции также нужны обычные. Тут уже компилятор при обращении к переменным в любом месте сам знает, что надо вызывать LPM/ELPM.
Попробовал я заменить strlen_P на просто strlen. Компилятор не ругается, но длина строки не вычисляется.
ARV, вопрос к Вам. Почему у меня студия не знает __flash в редакторе? В списке подсказок такого нет. Хотя и работает все. И выдает свежее при этом Warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
__flash это не стандартное ключевое слово, потому студия и не подсвечивает. вероятно, и навигация по типам и переменным тоже сбивается... в Eclipse я знаю, как с этим бороться (костыль), что делать в студии - не знаю.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
PROGMEM, потому что устарело. Как и 4ая студия - мамонт
AVR тоже мамонт - мамонту мамонтово
Цитата:
Тулчейн вы обновили, а avr-libc?
ставил на свежую девственную вин10 последних версий, правда хоум. Там нечего обновлять - студия и чистый Атмел тулчейн со своим же родным avr-libc. 7 студию ставить не хочу - она засирает конкретно систему, лучше уж вижуал студия 2012 с VisualGDB, но там свой тулчейн
Новый avr-gcc 9.2.0 уже вполне себе ругается при попытке собрать __flash под t10:
Код:
t10.c:7:12: error: address spaces are not supported for reduced Tiny devices 7 | const char __flash test2[] = "TEST2"; | ^~~~~~~
Как объясняют на avrfreaks, т.к. в reduced core тиньках адресное простанство линейно, нет нужды использовать __flash или PROGMEM. Можно просто юзать const. Инструкция LD вполне себе оттуда данные загрузит. Проверил:
int main() { volatile char test4[12]; // локальная переменная, чтобы не в bss секцию попало strcpy(test4, test2); DDRB = test4[1]; / / Просто чтобы проверить.
Проблема решена. проверил xc8 - чистый const спокойно кушает и для мега48 и для тини10. Там обычный такой же тулчейн avrgcc 5.4.0. - все сразу из коробки, без доп. мучений. Листинг похоже вполне нормальный. Оптимизацию -Os поволяет. Ждет аврщиков дорога Migrating to MPLAB® X IDE from Atmel Studio IDE https://microchipdeveloper.com/mplabx:m ... n-atstudio coming soon
имхо, AVR-щиков дорога должна ждать в сторону Eclipse. хотя, конечно, тем, кто без аппаратного отладчика и байт не обнулит, Eclipse будет не по душе...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
проверил xc8 - чистый const спокойно кушает и для мега48 и для тини10. Там обычный такой же тулчейн avrgcc 5.4.0. - все сразу из коробки, без доп. мучений. Листинг похоже вполне нормальный. Оптимизацию -Os поволяет. Ждет аврщиков
Вы путаете компилятор и среду. XC8 - отдельный проприетарный компилятор. Или avr-gcc, или XC8 - это два разных компилятора. А то, что у вас на скрине - среда MPLAB X IDE.
Выпуск MPLAB XC8 v2.05 расширил поддержку AVR, объединив многие новые функции компилятора AVR, и вместе с новейшей MPLAB X IDE этот компилятор позволяет программистам разрабатывать код для любого 8-разрядного устройства Microchip.
https://microchipdeveloper.com/xc8:avr-in-xc8 Да и какая разница - установка проста, все сразу из одного экзешника. Мплаб Х легко подхватывает и даже после установки сам предлагает качнуть. Удобство для начинающих. Можно использовать и в другом редакторе иль иде, хоть в эклипсе.
В каком месте они такое пишут? Не выдумывайте. Это два разных компилятора.
Цитата:
Да и какая разница
Разница огромная. Это два разных компилятора. К MPLAB X прикручиваются нативно оба. Но отличия в коде будут существенными.
И я прекрасно знаю, что со 2ой версии XC8 добавили поддержку AVR, только это не делает его avr-gcc еще. GCC - совсем другой компилятор. А XC8 вообще-то проприетраный и платный, в бесплатной версии имеющим многие ограничения, во всяком случае для PICов.
в бесплатной версии имеющим многие ограничения, во всяком случае для PICов.
мы ж в теме авр - пока ограничений авр не увидел, да и для пиков там только режим PRO отключен, несмертельно - можно забить, купить, древняя ломака еще работает.
помогите скомпилировать исходник bootloader`a под 328p мегу
Вот что выдает Студия:
Код:
Size before: 0 [main] sh 7668 sync_with_child: child 8008(0x19C) died before initialization with status code 0xC0000142 56762 [main] sh 7668 sync_with_child: *** child state waiting for longjmp /usr/bin/sh: fork: Resource temporarily unavailable make: *** [sizebefore] Îøèáêà 128 Build failed with 1 errors and 0 warnings...
koulja, вангую, что из-за кириллических имен в пути. Попробуйте без этого. Хотя нафига там студия, когда там есть makefile и прекрасно им собиратеся. Вот под мегу8 (т.к. конф только к ней приложен был): Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения