реклама на сайте
подробности

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> Порты AVR и компиляция
sensor_ua
сообщение Oct 1 2007, 05:17
Сообщение #61


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
EEMEM, PROGMEM я типами данных просто не считаю.
Это, по моему мнению, просто те расширения компилятора которые позволяют
отводить/инициализировать область в eeprom/flash. + взятие адреса для выяснения куда писать.

Потому и руками допиливаются обычные функции и из них появляются особенные - так кроме
int printf(const char *__fmt, ...);
имеем
int printf_P(const char *__fmt, ...);
ЗЫ. Я пробую каждую свежую версию WinAVR и могу заметить, что семимильными шагами движется он в сторону IAR. Проекты под портируемость сразу протачиваем. Но пока это "утомительное застирывание".


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 1 2007, 10:38
Сообщение #62


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



to Сергей Борщ
Подскажите, а зачем нужна обвязка из do/while?
Код
#define _clrL(port,bit)         do { port |= (1 << bit); } while(0)

Почему не так?
Код
#define _clrL(port,bit)         port |= (1 << bit)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 1 2007, 11:16
Сообщение #63


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Непомнящий Евгений @ Oct 1 2007, 13:38) *
to Сергей Борщ
Подскажите, а зачем нужна обвязка из do/while?
Код
#define _clrL(port,bit)         do { port |= (1 << bit); } while(0)

Почему не так?
Код
#define _clrL(port,bit)         port |= (1 << bit)
В данном конкретном случае она не нужна. Сила привычки. Началось с того, что увидел такую обвязку в исходниках линукса и задал такой же вопрос в ru.embedded. ReAl мне там ответил, что если внутри макроса будет более одной команды, то их придется заключать в {} чтобы такой макрос можно было использовать как единое выражение в циклах или в конструкциях if(условие) macros(); И все будет работать до тех пор, пока не появится желание сделать if(условие) macros(); else something; - получим ошибку компиляции. Обрамление же в do {}while(0) позволяет использовать такой макрос в любом месте, где допустим вызов обычной функции и не несет никаких дополнительных накладных расходов - сам цикл выбрасывается оптимизатором, остается только его тело. Ну а здесь я их обрамил по привычке, на случай если вдруг придется добавить внутрь еще одно или несколько выражений. Кончно, если пользоваться только С++, то можно реализовать то же самое при помощи static inline функций, но пропадет универсальность в виде совместимости с С.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 1 2007, 11:36
Сообщение #64


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Сергей Борщ @ Oct 1 2007, 14:16) *
Конечно, если пользоваться только С++, то можно реализовать то же самое при помощи static inline функций, но пропадет универсальность в виде совместимости с С.

Подробнее можно? Почему пропадет совместимость, если в C тоже допускаются static inline функции.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 1 2007, 11:51
Сообщение #65


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(defunct @ Oct 1 2007, 14:36) *
Подробнее можно? Почему пропадет совместимость, если в C тоже допускаются static inline функции.
В C99. Но, к сожалению, не все компиляторы его поддерживают sad.gif В С89 inline нет, а если и есть - это расширение конкретного компилятора. В общем "Это работает - не трогай!" smile.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Oct 1 2007, 11:55
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



Цитата(Сергей Борщ @ Sep 30 2007, 05:09) *
on(LED); off(FLASH_CS); if(signal(KEY)) - тоже абсолютно портируемо на любой С-компилятор. И сгенеренный код будет идентичен тому, который надо написать вручную для xxx_on(); xxx_off();

Действительно удобное решение.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Oct 1 2007, 11:56
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(singlskv @ Sep 30 2007, 21:44) *
Вы имеете в виду IAR vs Gcc ?

Нет, я имел ввиду конвейер головного мозга. Это я так, философствую... Можно стремиться проще и короче выражать свои мысли, но действительно ли их так много, что это нужно делать?
Я только себя имел ввиду. И вообще - проехали smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 1 2007, 13:41
Сообщение #68


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Кстати, между прочим, переделав eeprom.s90 например на работу с 24xxx получаем удобный инструмент хранения переменных во внешней епромке. Кстати, структуры там тоже отлично хранятся... и массивы...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 1 2007, 18:04
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Rst7 @ Oct 1 2007, 16:41) *
Кстати, между прочим, переделав eeprom.s90 например на работу с 24xxx получаем удобный инструмент хранения переменных во внешней епромке. Кстати, структуры там тоже отлично хранятся... и массивы...

smile.gif
С точки зрения singlskv это неудобный неиструмент, который может ввести тебя в заблуждение при написании программы и привести десяткам ... нет сотням ошибок. Трудно вылавливаемых ошибок.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 2 2007, 06:42
Сообщение #70


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(SasaVitebsk @ Oct 1 2007, 21:04) *
smile.gif
С точки зрения singlskv это неудобный неиструмент, который может ввести тебя в заблуждение при написании программы и привести десяткам ... нет сотням ошибок. Трудно вылавливаемых ошибок.


Ээээ... А с Вашей?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 2 2007, 11:39
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Rst7 @ Oct 2 2007, 09:42) *
Ээээ... А с Вашей?

smile.gif
Я оцениваю это положительно. Сам до такого не додумался. А мне кстати бы не помешало такое решение.
И вообще - всё что сделано - остаётся на годы.

Тут вообще, на мой взгляд бессмыслено оценивать. Раз Вы сделали - значит Вам это понадобилось и для Вас это оказалось удобным. Соответственно моя оценка или оценка другим человеком Вашего труда - будет весьма субъективной.

Я считаю, что фактически, это разработка какой-то базы под себя. И это позволит Вам следующий раз сделать проект быстрее. Соответственно это очень положительное качество. С годами Вы, возможно, переработаете детали и вылижите что-то. Или вообще что-то измените, но наверняка наработанные знания и опыт останутся с Вами навсегда.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Oct 2 2007, 11:57
Сообщение #72


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(SasaVitebsk @ Oct 2 2007, 14:39) *
Я оцениваю это положительно. Сам до такого не додумался. А мне кстати бы не помешало такое решение.


А вообще, жалко, что нет штатных средств компилятора для создания таких адресных пространств под собственные нужды. Иногда очень бы упростило код и добавило бы красоты. Через епром - это конечно костыль, однако, с другой стороны, достаточно легко переносимый на другие платформы.

В принципе была еще одна идея, но это уже злой хак smile.gif Как известно, ИАР умеет компилировать для моделей памяти с озу >64К. Была идея патчить кодегенератор, дабы он делал не OUT в RAMP?, а out в нужный порт. В результате, можно было бы увеличивать объем озу просто навесив дополнительные адреса на какой-либо порт и не думая о том, как выполнить этот маппинг програмно, все бы на себя взял компилятор. Правда, идея до реализации не дошла (уже не помню почему, кажется, отпала надобность).


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Oct 2 2007, 14:18
Сообщение #73


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Была идея патчить кодегенератор, дабы он делал не OUT в RAMP?, а out в нужный порт.

Пытался. Используются несуществующие регистры RAMPx. Проблема (сомневаюсь, что показалось) нерешаема.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
singlskv
сообщение Oct 2 2007, 18:06
Сообщение #74


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Rst7 @ Oct 1 2007, 17:41) *
Кстати, между прочим, переделав eeprom.s90 например на работу с 24xxx получаем удобный инструмент хранения переменных во внешней епромке. Кстати, структуры там тоже отлично хранятся... и массивы...

Rst7, А как Вы считаете, встраивание возможности чтения EEPROM перед ее записью(или
не записью, если там ничего не изменилось) в свой код(или библиотеку) является
правильным/нужным (для увеличения ресурса EEPROM) ?

Время от времени на электрониксе возникают темы типа:
Как сохранить текущую конфигурацию прибора при пропадании питания.

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

Может все-таки стоит в подобных ситуациях озаботиться возможностью
"ВСЕГДА" иметь правильную конфигурацию в EEPROM ?
Правда для этого(часто) придется написать свой код общения с EEPROM. smile.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Oct 2 2007, 19:38
Сообщение #75


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Может все-таки стоит в подобных ситуациях озаботиться возможностью
"ВСЕГДА" иметь правильную конфигурацию в EEPROM ?

smile.gif А давайте вспомним обычную файловую операцию - сохранение файла. Чтобы записываемый файл не убил ещё целый оригинал, нужно писать в другое место. Далее возникают остальные вопросы - как разгребаться с мусоркой и т.п. Файловые системы типа JFFS и новомодная ZFS именно то же делают -записывают на свободное место, а потом разбираются с мусоркой (в JFFS - garbage collection). Но оказывается задачи подобного рода - гарантированная запись некоего блока данных - возникали и раньше, например, в бесконтактных фискальных системах (карточки Mifare). Дык там это не пальцы загибать, а денюжки хранить. ЧТо придумывать будем?wink.gif))


--------------------
aka Vit
Go to the top of the page
 
+Quote Post

6 страниц V  « < 3 4 5 6 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01516 секунд с 7
ELECTRONIX ©2004-2016