Quasy 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Тут пришёл поручик Ржевский и всё опошлил. Скажите, Quasy, а нафига козе боян зачем вообще нужна ваша атомарность? Я пока не вижу особых критических моментов. Выставили байт - подали отдельно строб. Тем более что при вашем битовом анализе всё равно вручную всё обеспечивать. Какой строб, господи? Я просил пример реализации записи числа в определенную группу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimaG 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Кто сказал про "класс"? Я просил результирующий асм-код и критикую его. Где будет решаться проблема неатомарности - это я и хотел понять. Причем критика не понедельничного злого бодуна, а вполне конструктивная: я предлагаю путь. Тут по-моему уже се запутались в вопросе - что вы собственно предлагаете то? Топикстартер показал решение предложенной вами задачи, используя его инструментарий. Показал на тестовом примере + ассемблерный листинг. Продемонстрируйте свой вариант и асм листинг. Тогда можно будет предметно говорить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Кто сказал про "класс"? Я просил результирующий асм-код и критикую его. Где будет решаться проблема неатомарности - это я и хотел понять. Причем критика не понедельничного злого бодуна, а вполне конструктивная: я предлагаю путь. На самом деле вы ничего не предлагается. Вы ведете себя как Гуру, который достиг просветления и ему стали понятны какие-то более высокие материи, чем всем остальным. И куда уж нам тут всем, до Вас - небожителей. Вместо того, чтобы привести четкий и понятный код, хоть на Си, хоть на ассемблере - и сказать: "Я считаю, что так правильно потому-то и потому-то" (ведь каждый может иметь мнение и опыт, на котором оно основано), вы пишите какими-то намеками, недомолвками и т.п. Из чего напрашивается вывод - либо вы сами не знаете, как... Либо вы боитесь показать тот код, который считаете правильным, поскольку он может быть подвергнут критике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasy 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Тут по-моему уже се запутались в вопросе - что вы собственно предлагаете то? Топикстартер показал решение предложенной вами задачи, используя его инструментарий. Показал на тестовом примере + ассемблерный листинг. Продемонстрируйте свой вариант и асм листинг. Тогда можно будет предметно говорить. Как, опять непонятно? Как, это я со стропами-стробами запутался? :) Еще раз: я показал автору слабые места и вариант куда грести. Могу и больше подсказать, если надо. И предлагаю уважаемому (без всяких колкостей - уважаемому за свой труд) автору в хорошем смысле слова разозлиться(вот сверхзадача моих постов) и отшлифовать свою библиотечку, чтобы она стала бриллиантом. Для XMEGA уже хорошо. Вот для просто меги - пусть разозлится. На самом деле вы ничего не предлагается. Вы ведете себя как Гуру, который достиг просветления и ему стали понятны какие-то более высокие материи, чем всем остальным. И куда уж нам тут всем, до Вас - небожителей. Вместо того, чтобы привести четкий и понятный код, хоть на Си, хоть на ассемблере - и сказать: "Я считаю, что так правильно потому-то и потому-то" (ведь каждый может иметь мнение и опыт, на котором оно основано), вы пишите какими-то намеками, недомолвками и т.п. Из чего напрашивается вывод - либо вы сами не знаете, как... Либо вы боитесь показать тот код, который считаете правильным, поскольку он может быть подвергнут критике. Что ж, мне жаль вас, не видящим предложений хотя бы по замене RMW-записи в порт операциями SBI & CBI. Повторюсь, если автору потребуется - помогу более детально. По крайней мере как я вижу возможности различить варианты RMW порта и побитовые операции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Какой строб, господи? Я просил пример реализации записи числа в определенную группу... Ну, записали число в группу... Дальше что? И для чего атомарность? И что такое CBI/SBI? Или по-вашему, кроме AVR, других контроллеров не существует? Осмелюсь доложить, что в msp430 нет битовых команд. Кроме того, компилятор, как правило, сам выбирает оптимальную реализацию - с помощью маски или битовых манипуляций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DimaG 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Еще раз: я показал автору слабые места и вариант куда грести. Вы про атомарность? Не нужна она здесь в явном виде! Более того - вредна. Посмотрите пример STL - там об атомарности ничего не говорится, а писали ее далеко не дураки. Единственно, для себя я бы возможно добавил флаг атомарности в шаблон класса Могу и больше подсказать, если надо. Покажите, это многим будет интересно. Как говорится - с миру по нитке.. И предлагаю уважаемому (без всяких колкостей - уважаемому за свой труд) автору в хорошем смысле слова разозлиться(вот сверхзадача моих постов) и отшлифовать свою библиотечку, чтобы она стала бриллиантом. Для XMEGA уже хорошо. Вот для просто меги - пусть разозлится. Так вы конкретно напишите: на Си (не обязательно круто - главное чтоб идею понять), просто словами (внятно). Что по-вашему необходимо добавить / исправить в библиотеке? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Что ж, мне жаль вас, не видящим предложений хотя бы по замене RMW-записи в порт операциями SBI & CBI. Повторюсь, если автору потребуется - помогу более детально. По крайней мере как я вижу возможности различить варианты RMW порта и побитовые операции. Меня жалеть не нужно. Научитесть на форуме общаться конструктивно. Телепатов тут нет. Есть мысль, предложение, обоснование - дайте код, который можно будет обсуждать. Предыдущее сообщение я написал, чтобы подчеркнуть только этот аспект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasy 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Вы про атомарность? Не нужна она здесь в явном виде! Более того - вредна. Посмотрите пример STL - там об атомарности ничего не говорится, а писали ее далеко не дураки. Единственно, для себя я бы возможно добавил флаг атомарности в шаблон класса Покажите, это многим будет интересно. Как говорится - с миру по нитке.. Так вы конкретно напишите: на Си (не обязательно круто - главное чтоб идею понять), просто словами (внятно). Что по-вашему необходимо добавить / исправить в библиотеке? Весной накропал подобную библиотека для ATXMEGA. Но она на простом Си и активно использует макросы. Если подождать несколько дней - я приведу ее в удобоваримый вид и выложу для критики. Если от нее что-то останется, то, после того, как меня высушат после помоев, можно вместе ее портировать для ATmegи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Весной накропал подобную библиотека для ATXMEGA. Но она на простом Си и активно использует макросы. Если подождать несколько дней - я приведу ее в удобоваримый вид и выложу для критики. Я думаю, будет достаточно, если вы выложите результат работы компилятора в виде листинга и поясните, что вы считаете в вашем случае лучше (если это не будет очевидным). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasy 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Меня жалеть не нужно. Научитесть на форуме общаться конструктивно. Телепатов тут нет. Есть мысль, предложение, обоснование - дайте код, который можно будет обсуждать. Предыдущее сообщение я написал, чтобы подчеркнуть только этот аспект. А телепатия и не нужна. Задача: Есть например, группа бит на портах: A.0, B.0, C.3, С.4. Надо записать в нее число 0x0A. То есть GROUP(0х0А); Вот вариант-образец как напишем без всяких инструментов: cbi PortA, 0; sbi PortB, 0; cbi PortC, 3; sbi PortC, 4; Хотелось бы знать, не может ли эта библиотека сделать подобный код? Все! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
neiver 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Я прекрасно понимаю, о каких проблемах говорит 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба А телепатия и не нужна. Задача: Есть например, группа бит на портах: 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. У вас неделя, чтобы привести в порядок документацию. Вопрос: что будет делать ваша библиотека? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Quasy 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Не, ну это хоть сейчас... Вот группа : 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
neiver 0 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба А телепатия и не нужна. Задача: Есть например, группа бит на портах: A.0, B.0, C.3, С.4. Надо записать в нее число 0x0A. То есть GROUP(0х0А); Вот вариант-образец как напишем без всяких инструментов: cbi PortA, 0; sbi PortB, 0; cbi PortC, 3; sbi PortC, 4; Хотелось бы знать, не может ли эта библиотека сделать подобный код? Все! Это можно реализовать. Но я не уверен, что нужно. Это оптимизация под один частный случай использования под определенной семейство МК. В этой библиотеке есть более важные варианты использования, которые надо оптимизировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 27 сентября, 2010 Опубликовано 27 сентября, 2010 · Жалоба Я прекрасно понимаю, о каких проблемах говорит Quasy. Он имеет ввиду ситуацию когда прерывание происходит между in и out и в этом прерывании происходит запись в тот-же порт. А, ну вот, единственный случай. "-Доктор, когда я так делаю... - А вы так не делайте!" Ну и, писали уже - атомик блок. Без вариантов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться