|
|
  |
Как ПРАВИЛЬНО программировать на С++, Вопросы по программированию на С++ для микроконтроллеров. |
|
|
|
Sep 17 2010, 13:39
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123

|
Цитата(Sergey_B @ Sep 17 2010, 17:36)  Я заменил их макроопределениями типа USE_PORTA, которые объявляю в файле подобном avr/io.h для нужных мне контроллеров. Да, ручками-то конечно можно определения писать, но не хочется.
|
|
|
|
|
Sep 20 2010, 11:37
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123

|
Добавил поддержку компилятора от IAR в свои списки линий. В общем работает. Обновления в Git репозитории: http://github.com/KonstantinChizhov/AvrPro.../master/avrcpp/ЗЫ. Что-то меня не впечатлил этот хвалёный компилятор от IAR Systems для AVR. Я нашел тоько два вида оптимизации которые он делает лучше чем GCC: - Common subexpression elimination, - умеет работать с однобайтовыми указателями. А в остальном как-то не впечатляет.
|
|
|
|
|
Sep 20 2010, 11:53
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(neiver @ Sep 20 2010, 15:37)  ЗЫ. Что-то меня не впечатлил этот хвалёный компилятор от IAR Systems для AVR. Я нашел тоько два вида оптимизации которые он делает лучше чем GCC: - Common subexpression elimination, - умеет работать с однобайтовыми указателями. А в остальном как-то не впечатляет. Не совсем в тему, но всё-таки местами он (ИАР) гораздо лучше работает. В mspgcc при всех моих потугах мне так и не удалось достичь иаровского размера бинарника. Разница как минимум 20%. Существенно, когда балансируешь на грани невпихуемости. Хотя, глючки иногда подкидывает специфические и трудноуловимые. Например, коллега целый день бился, пока не поменял bool на char. И это при нулевой оптимизации. Преимущество ИАРа в том, что его лучше затачивают под конкретную платформу (под каждую из). Недостаток - при этом он код теряет переносимость, вследствие специфических приёмов.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Sep 23 2010, 06:43
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-09-10
Пользователь №: 59 665

|
Вопрос автору этого инструмента: как будет выглядеть после трансляции асм-код для ATmega128 при записи в группу из 4-х бит число 0x0A. Группа такая (начиная с младшего в группе): PA.0, PB.0, PD.3, PD.4? Хотелось бы посмотреть именно "боевой", (не учебный) код, который будет сгенерирован в этом случае. Спасибо.
|
|
|
|
|
Sep 25 2010, 09:56
|
Местный
  
Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123

|
to Quasy. Исходный код: Код #include <avr/io.h> #include "iopins.h" #include "pinlist.h" #include "util.h"
using namespace IO; typedef PinList<Pa0, Pb0, Pd3, Pd4> Pins;
int main() { Pins::Write(0x0A); } Асм листинг для атмега128: Код 000000be <main>: be: d8 98 cbi 0x1b, 0; 27
c0: c0 98 cbi 0x18, 0; 24
c2: 82 b3 in r24, 0x12; 18 c4: 87 7e andi r24, 0xE7; 231 c6: 80 61 ori r24, 0x10; 16 c8: 82 bb out 0x12, r24; 18
ca: 80 e0 ldi r24, 0x00; 0 cc: 90 e0 ldi r25, 0x00; 0 ce: 08 95 ret Как-то так. Писать в виртуальные порты константы не интересно - запись любого набора бит в один порт будет соптимизирована не более чем до: Код in r24, PORTx andi r24, Mask; ori r24, Value out PORTx, r24 Интереснее запись занчеия неизвестного во время компиляции - там будет перетасовка бит из входного значения в резистры. ЗЫ. Интересно, что вам мешает взять исходный код и поэкспериментировать самостоятельно.
|
|
|
|
|
Sep 27 2010, 06:15
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-09-10
Пользователь №: 59 665

|
Как, это уже и есть боевой код? Но согласитесь, в таком виде его применять просто нельзя. Где в вашем варианте элементарные мероприятия по защите от неатомарности портовой операции "чтение-модификация-запись"?
|
|
|
|
|
Sep 27 2010, 06:57
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-09-10
Пользователь №: 59 665

|
А проблема в том, что, в предлагаемом виде генерируемый код фигурально выражаясь, подпадает под статью "Вредительство". По крайней мере в стране эмбедеров  ) Применять его пока нельзя. И мне очень бы хотелось посмотреть генерируемый вашим инструментом вариант боевого код с учетом неатомарности. Или вы предлагаете программисту, применяющему ваш код, надеяться что не будет прерываний? Или вы предлагаете самому программисту позаботиться об атомарности? Очень хочется посмотреть вариант Безопасного кода записи в группу. Спасибо. Дилемма. Без организации критической секции код применять нельзя. С организацией критической секции ваш код займет 11 тактов, что недопустимо. А все потому, что ваш код не научился делать четыре операции SBI/CBI.
|
|
|
|
|
Sep 27 2010, 07:33
|

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

|
Цитата(Quasy @ Sep 27 2010, 09:57)  Или вы предлагаете программисту, Ключевое слово "программисту". Которому голова дана не только чтобы в нее есть. Цитата(Quasy @ Sep 27 2010, 09:57)  Или вы предлагаете программисту, применяющему ваш код, надеяться что не будет прерываний? У меня нет махания ногами в прерываниях. Нафига мне лишний оверхед с вашей атомарностью? Цитата(Quasy @ Sep 27 2010, 09:57)  А все потому, что ваш код не научился делать четыре операции SBI/CBI. Зал притих - покажите, на примере порта E.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 27 2010, 07:52
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-09-10
Пользователь №: 59 665

|
Цитата(Сергей Борщ @ Sep 27 2010, 11:33)  Ключевое слово "программисту". Которому голова дана не только чтобы в нее есть. У меня нет махания ногами в прерываниях. Нафига мне лишний оверхед с вашей атомарностью? Зал притих - покажите, на примере порта E. Залу не надо притихать! Он и так 8 страниц переливал из пустого в порожнее и не обсуждал самое главное - безопасность применения. Про PORTE? Ну, вам-то я скажу по секрету: у Atmega 128 (про который речь) его адрес 03  SBI & CBI. У меги128 90% портов в битовом пространстве. Цитата(neiver @ Sep 27 2010, 11:34)  Вы предлагаете использовать везде операции SBI/CBI и выводить значение побитно? А что, если мы будем записывать значение неизвестное во время компиляции побитно? Попробуйте сами написать, хоть на Си, хоть на ассемблере. Покажите как должно быть правильно. Мы пока говорим про константы. Если настало время - я скажу и про переменные. Там для предложенной группы нет альтернативы варианту с побитовым анализом переменной и операциям SBI/CBI.
|
|
|
|
|
Sep 27 2010, 08:02
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(Quasy @ Sep 27 2010, 13:15)  Как, это уже и есть боевой код? Но согласитесь, в таком виде его применять просто нельзя. Где в вашем варианте элементарные мероприятия по защите от неатомарности портовой операции "чтение-модификация-запись"? А вы все операции с портами ввода-вывода оборачиваете в критические секции? Даже те, которые абсолютно не зависят от прерываний? Надеюсь, что нет. Тогда какой смысл оборачивать в критические секции операции в "библиотечном" классе? Разумно это отдавать на откуп пользователю у меня это например реализовано так: Код template <class ELEMENT, class SYNC_OBJ> class TClQueue;
|
|
|
|
|
Sep 27 2010, 08:06
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-09-10
Пользователь №: 59 665

|
Цитата(Dima_G @ Sep 27 2010, 12:02)  А вы все операции с портами ввода-вывода оборачиваете в критические секции? Даже те, которые абсолютно не зависят от прерываний? Надеюсь, что нет. Тогда какой смысл оборачивать в критические секции операции в "библиотечном" классе? Разумно это отдавать на откуп пользователю у меня это например реализовано так: Код template <class ELEMENT, class SYNC_OBJ> class TClQueue; Кто сказал про "класс"? Я просил результирующий асм-код и критикую его. Где будет решаться проблема неатомарности - это я и хотел понять. Причем критика не понедельничного злого бодуна, а вполне конструктивная: я предлагаю путь.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|