Перейти к содержанию
    

Как ПРАВИЛЬНО программировать на С++

Тут пришёл поручик Ржевский и всё опошлил.

 

Скажите, Quasy, а нафига козе боян зачем вообще нужна ваша атомарность?

Я пока не вижу особых критических моментов.

Выставили байт - подали отдельно строб.

Тем более что при вашем битовом анализе всё равно вручную всё обеспечивать.

Какой строб, господи? Я просил пример реализации записи числа в определенную группу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто сказал про "класс"? Я просил результирующий асм-код и критикую его. Где будет решаться проблема неатомарности - это я и хотел понять. Причем критика не понедельничного злого бодуна, а вполне конструктивная: я предлагаю путь.

Тут по-моему уже се запутались в вопросе - что вы собственно предлагаете то?

Топикстартер показал решение предложенной вами задачи, используя его инструментарий. Показал на тестовом примере + ассемблерный листинг.

Продемонстрируйте свой вариант и асм листинг. Тогда можно будет предметно говорить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кто сказал про "класс"? Я просил результирующий асм-код и критикую его. Где будет решаться проблема неатомарности - это я и хотел понять. Причем критика не понедельничного злого бодуна, а вполне конструктивная: я предлагаю путь.

На самом деле вы ничего не предлагается. Вы ведете себя как Гуру, который достиг просветления и ему стали понятны какие-то более высокие материи, чем всем остальным. И куда уж нам тут всем, до Вас - небожителей.

Вместо того, чтобы привести четкий и понятный код, хоть на Си, хоть на ассемблере - и сказать: "Я считаю, что так правильно потому-то и потому-то" (ведь каждый может иметь мнение и опыт, на котором оно основано), вы пишите какими-то намеками, недомолвками и т.п.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут по-моему уже се запутались в вопросе - что вы собственно предлагаете то?

Топикстартер показал решение предложенной вами задачи, используя его инструментарий. Показал на тестовом примере + ассемблерный листинг.

Продемонстрируйте свой вариант и асм листинг. Тогда можно будет предметно говорить.

Как, опять непонятно? Как, это я со стропами-стробами запутался? :) Еще раз: я показал автору слабые места и вариант куда грести. Могу и больше подсказать, если надо. И предлагаю уважаемому (без всяких колкостей - уважаемому за свой труд) автору в хорошем смысле слова разозлиться(вот сверхзадача моих постов) и отшлифовать свою библиотечку, чтобы она стала бриллиантом. Для XMEGA уже хорошо. Вот для просто меги - пусть разозлится.

 

На самом деле вы ничего не предлагается. Вы ведете себя как Гуру, который достиг просветления и ему стали понятны какие-то более высокие материи, чем всем остальным. И куда уж нам тут всем, до Вас - небожителей.

Вместо того, чтобы привести четкий и понятный код, хоть на Си, хоть на ассемблере - и сказать: "Я считаю, что так правильно потому-то и потому-то" (ведь каждый может иметь мнение и опыт, на котором оно основано), вы пишите какими-то намеками, недомолвками и т.п.

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

Что ж, мне жаль вас, не видящим предложений хотя бы по замене RMW-записи в порт операциями SBI & CBI. Повторюсь, если автору потребуется - помогу более детально. По крайней мере как я вижу возможности различить варианты RMW порта и побитовые операции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой строб, господи? Я просил пример реализации записи числа в определенную группу...

Ну, записали число в группу...

Дальше что?

И для чего атомарность?

И что такое CBI/SBI?

Или по-вашему, кроме AVR, других контроллеров не существует?

Осмелюсь доложить, что в msp430 нет битовых команд.

Кроме того, компилятор, как правило, сам выбирает оптимальную реализацию - с помощью маски или битовых манипуляций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще раз: я показал автору слабые места и вариант куда грести.

Вы про атомарность? Не нужна она здесь в явном виде! Более того - вредна. Посмотрите пример STL - там об атомарности ничего не говорится, а писали ее далеко не дураки.

Единственно, для себя я бы возможно добавил флаг атомарности в шаблон класса

 

Могу и больше подсказать, если надо.

Покажите, это многим будет интересно. Как говорится - с миру по нитке..

 

И предлагаю уважаемому (без всяких колкостей - уважаемому за свой труд) автору в хорошем смысле слова разозлиться(вот сверхзадача моих постов) и отшлифовать свою библиотечку, чтобы она стала бриллиантом. Для XMEGA уже хорошо. Вот для просто меги - пусть разозлится.

Так вы конкретно напишите: на Си (не обязательно круто - главное чтоб идею понять), просто словами (внятно). Что по-вашему необходимо добавить / исправить в библиотеке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что ж, мне жаль вас, не видящим предложений хотя бы по замене RMW-записи в порт операциями SBI & CBI. Повторюсь, если автору потребуется - помогу более детально. По крайней мере как я вижу возможности различить варианты RMW порта и побитовые операции.

Меня жалеть не нужно.

Научитесть на форуме общаться конструктивно. Телепатов тут нет. Есть мысль, предложение, обоснование - дайте код, который можно будет обсуждать. Предыдущее сообщение я написал, чтобы подчеркнуть только этот аспект.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы про атомарность? Не нужна она здесь в явном виде! Более того - вредна. Посмотрите пример STL - там об атомарности ничего не говорится, а писали ее далеко не дураки.

Единственно, для себя я бы возможно добавил флаг атомарности в шаблон класса

 

 

Покажите, это многим будет интересно. Как говорится - с миру по нитке..

 

 

Так вы конкретно напишите: на Си (не обязательно круто - главное чтоб идею понять), просто словами (внятно). Что по-вашему необходимо добавить / исправить в библиотеке?

Весной накропал подобную библиотека для ATXMEGA. Но она на простом Си и активно использует макросы. Если подождать несколько дней - я приведу ее в удобоваримый вид и выложу для критики. Если от нее что-то останется, то, после того, как меня высушат после помоев, можно вместе ее портировать для ATmegи.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Весной накропал подобную библиотека для ATXMEGA. Но она на простом Си и активно использует макросы. Если подождать несколько дней - я приведу ее в удобоваримый вид и выложу для критики.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня жалеть не нужно.

Научитесть на форуме общаться конструктивно. Телепатов тут нет. Есть мысль, предложение, обоснование - дайте код, который можно будет обсуждать. Предыдущее сообщение я написал, чтобы подчеркнуть только этот аспект.

А телепатия и не нужна. Задача: Есть например, группа бит на портах: A.0, B.0, C.3, С.4. Надо записать в нее число 0x0A. То есть GROUP(0х0А); Вот вариант-образец как напишем без всяких инструментов: cbi PortA, 0; sbi PortB, 0; cbi PortC, 3; sbi PortC, 4; Хотелось бы знать, не может ли эта библиотека сделать подобный код? Все!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я прекрасно понимаю, о каких проблемах говорит Quasy.

Он имеет ввиду ситуацию когда прерывание происходит между in и out и в этом прерывании происходит запись в тот-же порт.

При этом значение записанное в прерывании потеряется.

В этом случае атомарность записи действительно нужна, но ее легко добится использованием того-же ATOMIC_BLOCK.

В остальных случаях она лишняя.

 

 

  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

 

Кстати комманды SBI & CBI выполняются за 2 такта. In/Out/andi/Ori - каждая за один такт. По тактам одинаково выходит даже в этом примере.

 

 

Да, для MSP430 я этот подход уже адаптировал. Компилируется под mspgcc и под IAR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А телепатия и не нужна. Задача: Есть например, группа бит на портах: A.0, B.0, C.3, С.4. Надо записать в нее число 0x0A. То есть GROUP(0х0А); Вот вариант-образец как напишем без всяких инструментов: cbi PortA, 0; sbi PortB, 0; cbi PortC, 3; sbi PortC, 4; Хотелось бы знать, не может ли эта библиотека сделать подобный код? Все!

Я вам более реальный пример приведу.

Прибегает снабженец и говорит такую речь:

У атмеля проблемы с поставками, поэтому вместо ATMega128 я закупил ящик msp430f149.

У вас неделя, чтобы привести в порядок документацию.

 

Вопрос: что будет делать ваша библиотека?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, ну это хоть сейчас... Вот группа : PORTA.0, PORTB.0, PORTR.1 и PORTR.5. Даю макрос: Записать в нее (а именно в регистр DIR порта) число 09. Листинг вот он:

203 PUT_CONST_GROUP( 0, _DIR, 0x09 );

\ 000000D8 9A80 SBI 0x10, 0x00

\ 000000DA 9881 CBI 0x10, 0x01

\ 000000DC E200 LDI R16, 32

\ 000000DE 930007E1 STS 2017, R16

\ 000000E2 E002 LDI R16, 2

\ 000000E4 930007E2 STS 2018, R16

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А телепатия и не нужна. Задача: Есть например, группа бит на портах: A.0, B.0, C.3, С.4. Надо записать в нее число 0x0A. То есть GROUP(0х0А); Вот вариант-образец как напишем без всяких инструментов: cbi PortA, 0; sbi PortB, 0; cbi PortC, 3; sbi PortC, 4; Хотелось бы знать, не может ли эта библиотека сделать подобный код? Все!

 

Это можно реализовать. Но я не уверен, что нужно. Это оптимизация под один частный случай использования под определенной семейство МК. В этой библиотеке есть более важные варианты использования, которые надо оптимизировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я прекрасно понимаю, о каких проблемах говорит Quasy.

Он имеет ввиду ситуацию когда прерывание происходит между in и out и в этом прерывании происходит запись в тот-же порт.

А, ну вот, единственный случай.

"-Доктор, когда я так делаю...

- А вы так не делайте!"

Ну и, писали уже - атомик блок. Без вариантов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...