Работа с EEPROM - почему в ардуино механизм хуже чем в AVR?
- Войдите на сайт для отправки комментариев
обычно со всеми библиотеками ситуация такая, что в ардуино библиотеки удобнее чем в AVR, не обязательно потимальнее (скорее наоборот), но зато удобнее
а вот с EEPROM получается все наоборот - и не удобнее и "кривее". Может я что-то не так понимаю?
в AVR если включить <avr/eeprom.h> то кроме простых макросов для записи и чтения любых типов переменных есть еще очень удобный атрибут - EEMEM. Если в ардуино предлагается самому выбирать начальный адрес расположения переменной в EEPROM то в AVR это можно отдать компиляторы. Более того, если где-то внутри библиотеки тоже используют EEPROM то в ардуино сложно избежать конфдикта, а в AVR это автоматом. Например если так обхявить переменные:
uint16_t var1 EEMEM = 5; uint8_t var2 EEMEM = 2;
то &var1 автоматически получит 0 для расположения в EEPROM, а &var2 - 2. Если где-то ранее в библиотеках или приложении были определены другие eeprom переменные, то &var1 и &var2 автоматом получат смещение в EEPROM. Так же AVR формирует файл .eep и если его записать в EEPROM - автоматом будет инициализация EEPROM
У компилятора ардуино можно сказать что нет своей библиотеки, он использует библиотеку avr/eeprom.h
Тупо переадресует вызов фунции
Вот исходник EEPROM.cpp
А что Вам мешает использоввать в своем коде библиотеку <avr/eeprom.h> ?
Что то мне идея не пришла в голову внутрь посмотреть) спасибо
получается красивая обертка и все при этом в AVR функций готовых намного больше чем те на которые ардуино ссылается
я собственно и хочу понять - ардуино отработает корректно атрибут EEMEM? Это не вопрос библиотеки, а вопрос компоновщика, который эти данные должен разместить в области именно EEPROM и проставить в коде верные адреса
есть у кого опыт?
Я думаю что проще будет попробовать и тем самым проверить
Компилятор который использует Arduino, WinAvr
Компилятор который использует Arduino, WinAvr
В Arduino используется компилятор GCC.
В WinAVR - тоже.
Я в курсе. Можно еще перечислить 1000 процов у которых компилятор GCC
Только у GCC нет графической оболочки, это консольное приложение
Зачем так углублятся, это только запутает пользователя Поэтому Ардуино я привел в качестве примера
да нет это как раз важно что gcc, значит и toolchain должен быть один. есть такой замечательный большой документ avr-libc-user-manual.pdf - в нем как раз toolchain и описан со всеми примудростями. Если он один то и EMEM в ардуино работать будет
пердлагаю изыскания ограничить теоретическим уровнем - тогда можно считать, что EMEM будет и не будет работать одновременно, а тему переименовать в "EMEM Шредингера".
к чему это? Мне важен был опыт, его ни у кго нет, есть понимание, что должно работать. Ну и хорошо.
Проверить не проблема, можно было бы и тему не создавать, меня смутило, что мне не попадались скетчи ардуино где EMEM бы использовался. Дьявол как говорят в нюансах... Можно тему закрывать, за неимением чужого опыта приобрету свой