|
|
  |
AVR признали !, C переходом в рассуждения о контроллерах |
|
|
|
Aug 10 2007, 22:21
|

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

|
Цитата(oran-be @ Aug 10 2007, 22:31)  АВР нормально работает, до тех пор, пока размер битового массива не превышает размер, который С компилятор может затолкать за раз при вызове функции - байт 8-12 примерно. Посмеялся  "байт 8-12 примерно". Напомнило фразу автора banned курса - "в IAR 1 байт равен двум байтам AVR примерно." Зачем же ж массив пихать как параметр функции? Передавайте через указатель будет быстро. У меня HDLC прием/передача на лету обрабатывается авркой в фоне. Битовых операций там просто "немеряно". И пакеты всяко больше 12-ти байт. Цитата(Прохожий @ Aug 11 2007, 00:50)  Кроме этого, я не большой любитель всяческих ОС на столь микроскопических девайсах, которыми являются как AVR, так и PIC. Хотя в Вашем случае применение ОС абсолютно оправданно. ОС упрощают работу настолько же, насколько упрощает жизнь C в сравнении с ASM'ом. На микроскопических чипах (хотя AVR бывает и отнюдь не микроскопическим, к примеру m2560 - 256k флеша это уже достаточно большой проект исходников на C эдак на 1-2Mb), применение микроскопических ОС - окупается и оправдывается временем разработки.
|
|
|
|
|
Aug 10 2007, 22:47
|
Cундук
    
Группа: Участник
Сообщений: 1 478
Регистрация: 13-11-06
Из: Ростов-на-Дону
Пользователь №: 22 269

|
Цитата(defunct @ Aug 11 2007, 02:21)  ОС упрощают работу настолько же, насколько упрощает жизнь C в сравнении с ASM'ом. На микроскопических чипах (хотя AVR бывает и отнюдь не микроскопическим, к примеру m2560 - 256k флеша это уже достаточно большой проект исходников на C эдак на 1-2Mb), применение микроскопических ОС - окупается и оправдывается временем разработки. Не надо со мной про ОСы. По отношению к ним я абсолютно необъективен. Немного  , если позволите. На днях закончил кусок программы для Винды, связанный с обменом данными через DDE сервер, разработанный одной очень уважаемой конторой. Для того, чтобы все это устойчиво заработало пришлось убить три дня своего времени и перелопатить туеву хучу вторичной (абсолютно бесполезной) информации, к которой я отношу описание функций ОС (в данном случае XP). И потом, моя методика программирования для МК и так включает в себя такие понятия, как процесс, флаг (мьютекс, семафор), событие. Только выстраивается это все непосредственно под решаемые задачи и железо конкретного МК минуя ОС. Насчет С могу сказать только одно. Упрощение жизни заметил только тогда, когда решал задачи, связанные с расчетом полиномов термопар, а так - разницы особой нет. Трудности в правильном постороении алгоритма, а не в том на чем он отображен впоследствии. Впрочем, это мое личное мнение, никому ненавязываемое.
|
|
|
|
|
Aug 11 2007, 07:54
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(rx3apf @ Aug 10 2007, 21:43)  Тем, что не надо перезагружать данные из RAM в рабочие регистры, разве это не очевидно ? Т.е. если у AVR мы уместимся в регистрах - все хорошо и быстро. Очень хорошо вы себе ответили: Цитата Но _такой_ пример - да, высосан из пальца, реально не требовалось. Я именно об этом ;О) В том смысле, что и не потребуется. А если потребуется, то сто пудов, десяток-другой лишних тактов погоды не сделает и не испортит. Максимум, чего может плохого приключиться, это поделить 64/64. Но до такой жизни ещё дойти надо суметь. ;О) Цитата Какое слово непонятно ? Да мне-то все слова понятны. ;О) В частности, ядро кореллятора(в общем случае) - операццыя МАС. Например такая: 16s*16s=32s+АСС40бит.(s-signed) А в особо весёлых случаях и 16s*24s приходится накручивать, но это уже при фильтераццыи... Распишете сами или мне помочь? И этта...выводы тоже. ;О) Бо вот в этом случае десяток лишних тактов вырождается в сотни, а то и тыщи на тот-же кореллятор. Или какой фильтер. Или ДПФ какое. И вот мы уже в частоту дискретизаццыи не лезем. ;О) Ну и про многоразрядную арифметику тоже... мне в жизни не потребовалось складывать-вычитать-делить ничего больше 64р. Да и то, потому, что промежуточный результат такой получался.
|
|
|
|
|
Aug 11 2007, 09:01
|
Местный
  
Группа: Участник
Сообщений: 262
Регистрация: 3-04-07
Из: СПб
Пользователь №: 26 742

|
quote name='ozzy' date='Aug 10 2007, 23:52' post='281981'] ZZZzzzz... Я тут поотсутсвовал немножко... Как говорил кот Леопольд У каждого камня есть свои сильные и слабые стороны и не стоит из за этого ругаться. Предлагаю модератору закрыть тему как совершенно бесполезную[/quote] М-да, только AVR-щик может открыть тему: “XXX – признали!”. Никак не могу понять, откуда у них развился такой комплекс собственной неполноценности?
|
|
|
|
|
Aug 11 2007, 09:07
|
Местный
  
Группа: Новичок
Сообщений: 239
Регистрация: 5-10-06
Пользователь №: 21 004

|
Цитата(oran-be @ Aug 9 2007, 00:10)  По производительности PIC18 имеет АВР по полной, несмотря на в 2 раза меньшее значение MIPS. А что не в 4 ? вроде так на самом деле есть. Цитата(oran-be @ Aug 9 2007, 00:10)  Загрузка-выгрузка все сводит на нет. Поясните если не трудно.
|
|
|
|
|
Aug 11 2007, 10:34
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 7-03-06
Из: Санкт-Петербург
Пользователь №: 15 038

|
 читал читал... вроде люди взрослые а об таком спорите!!! Такое очучение что большинство ораторов тут собирает просто домашние поделки...ну тогда можно спорить сколько угодно - каждый кулик свое болото хвалит Как мне кажется камешек для проекта надо выбирать не только из прынцыпа что я вот его знаю на все 100% вот и заложу его в разработку - о таком большинстве я и говорю. Но согласитесь...выбор зависит от самого проекта...в одном не нужна максимальная производительность в пользу высокой надежности, в другом важна цена..., какой-то проект нужно сделать очень быстро и Вы конечно возьмете то что вам больше знакомо, другому заказчику важна надежность и качество и тип камешка он Вам диктует сам считая его лучшим.... а так ИМХО об г.... разговор зря тему в лес угнали...
|
|
|
|
|
Aug 11 2007, 22:49
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
2SasaVitebsk. Маленький вопросик по этому фрагменту Цитата(SasaVitebsk @ Aug 10 2007, 21:12)  PS: Попробуйте реализовать на PIC16 Код clr nstrel ; обрабатывать сначала headc: . . . . . . . . inc nstrel ; следующая стрелка cpi nstrel,6; Конец массива? brne headc ; если нет, то повторить Почему бы цикл не организовать так Код ldi nstrel,6 ; обрабатывать сначала headc: . . . . . . . . dec nstrel ; следующая стрелка brne headc ; повторить, если не все стрелки Всё-ж-таки экономия одного оператора. Что касается реализации вашего фрагмента на пик18, странно, но у меня получилось то же самое количество машинных циклов, как и у вас, вот такие фактики в мире галактики...На мой взгляд, Пик начнёт проигрывать АВРу при арифметических операциях, там где придётся использовать его единственный аккумулятор WREG.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Aug 12 2007, 12:41
|
Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621

|
Цитата(SasaVitebsk @ Aug 10 2007, 19:39)  Так кто же из нас фанат? Похоже, имеет место программирование, но совсем не на АВР  . Чем же фанатик отличается от свободомыслящего Хомо Сапиенс? Так как мы в ветке АВР, то можно абстрактно представить, что группа программистов написала жутко универсальную программу для анализа и обработки неких входных данных, имеющих широкий спектр протоколов, поступающих, скажем по USART. В железо заложили, скажем АТМегу2560 и заполнили 220к из 256 возможных. Обработчик построили в виде множества функций, рассчитанных каждая на свой тип протокола, вызываемых при помощи таблицы переходов. Индекс в таблице переходов вычисляет анализатор, который при помощи наложения масок обрабатывает часть входных данных. Так вот, чтобы получить "фанатично настроенный" процессор, необходимо перезаписать таблицу переходов, заполнив ее указателем на одну-единственную функцию, либо в анализаторе свести все маски к одной. Естественно, при таком раскладе львиная доля входных данных будет восприниматься совершенно неадекватно. И большая часть заложенного кода окажется бесполезной. Это все к тому, что определенная часть поклонников АВР почему то при анализе входных данных использует одну и ту же маску: "AVR - the best", а в таблице переходов активным остается один вектор, обрабатывающий сигнал "На нас напали". Очевидно в итоге всего этого неадекватного восприятия начинают приводится куски кода, якобы представляющие верх элеганости, хотя на самом деле это тривиальная до зубной боли задача "переслать два байта", на С она бы заняла ни много ни мало, а целую строчку в тесте, а компилятор выдал бы код не хуже. (Может это есть тонкий прикол на тему "как два байта переслать"?) Пытаясь достучатся до адекватного восприятия, повторюсь - "АВР признали" - это удивительно не потому, что ядро АВР плохое, а потому, что у фирмы Атмел маркетинг бежит впереди качества, в результате чего годика так этак 2-3, до появления Мега8, они выпускали МК, несовместимые с устойчивой продолжительной работой. И не признавали этого ну никак. И глюки железячные у АВР такие, каких нигде нет. И внедрение маркетинга в техдокументацию вызывает дополнительную путаницу. Цитата(bodja74 @ Aug 9 2007, 11:19) 2 С периферией для начала нужно научиться работать а потом хаять ,TWI выдаст ошибку в регистре статуса если что не так ,я уже не говорю про ситуации с NACK ,и правильно делает что затыкаеться,нечего инфу тупо гнать. Совет умный про анализ результата. Но анализировать можно сколько угодно. но если модуль аппаратно зависает, то результат анализа можно засунуть в одно место. Много помогает анализ кода ошибки синего экрана смерти в Виндоуз? NACK - нормальный сигнал на шине, он не должен приводить к зависанию модуля.
Сообщение отредактировал oran-be - Aug 12 2007, 12:43
|
|
|
|
|
Aug 12 2007, 13:35
|

Знающий
   
Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768

|
Цитата(oran-be @ Aug 12 2007, 16:41)  NACK - нормальный сигнал на шине, он не должен приводить к зависанию модуля. Удивительное дело,я всегда считал,что у AVR очень удачный модуль TWI. Вас уже не первый раз призывают перейти от слов к делу. Приведите,плиз,ваш код работы с квадратной шиной,где NASK вешает модуль,желательно на С.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Aug 12 2007, 13:45
|
Участник

Группа: Новичок
Сообщений: 44
Регистрация: 2-05-06
Пользователь №: 16 710

|
Голосовалка, типа что круче сегодня?
PIC24 (+dsPIC33) однозначно и чисто конкретно рулят по всем значимым характеристикам включая цену. Это для сегмента занимаемого мегами32 - 128. И в самом деле, разве есть еще чудаки, закладывающие в новый проект m128, или, скажем, 5V питание? Правильно, нету, перевелись уже - повымирали от избытка холестерина в мозге.
m48 - m8 однозначно рулят в своем сегменте.
Кстати, PIC18F24J10 это аналог m16 по флешу, рам, да и по цене тоже.
|
|
|
|
|
Aug 12 2007, 16:22
|
Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621

|
Цитата(WHALE @ Aug 12 2007, 16:35)  Удивительное дело,я всегда считал,что у AVR очень удачный модуль TWI. Вас уже не первый раз призывают перейти от слов к делу. Приведите,плиз,ваш код работы с квадратной шиной,где NASK вешает модуль,желательно на С. Код BYTE volatile byTWIctrl; BYTE volatile byTWIstate;
// State byte. Default set to TWI_NO_STATE. static BYTE* pTWItrans; // указатель на текущий байт static BYTE ctTWI; // счетчик приема-передачи static BYTE byDisp; // смещение в подчиненном устройстве static BYTE bySlaveAddr;
.............................................................. функции всякие разные .................................................................. // сам поток собственно
SIGNAL(SIG_2WIRE_SERIAL){ switch (TWSR){ //------------------------------------------------------------------------ case TWI_START: // START has been transmitted case TWI_REP_START: // Repeated START has been transmitted TWDR = bySlaveAddr; if(byTWIctrl & TWS_READ_NOW) TWDR |= 1; TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag to send byte (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // (0<<TWWC); break; //------------------------------------------------------------------------ case TWI_MTX_ADR_ACK: // SLA+W has been tramsmitted and ACK received TWDR = byDisp; TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag to send byte (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // (0<<TWWC); break; //---------------------------------------------------------------------- case TWI_MTX_DATA_ACK: // Data byte has been tramsmitted and ACK received if(byTWIctrl & TWS_READ_OP){ // проверка на операцию записи byTWIctrl |= TWS_READ_NOW; TWCR = (1<<TWEN)| // TWI Interface enabled. (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag. (0<<TWEA)|(1<<TWSTA)|(0<<TWSTO)| // Initiate a START condition. (0<<TWWC); break; } if (ctTWI){ // передача данных ctTWI--; TWDR = *pTWItrans; pTWItrans++; TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag to send byte (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // (0<<TWWC); // }else{ // Send STOP after last byte byTWIctrl = 0; // Set status bits to completed successfully. TWCR = (1<<TWEN)| // TWI Interface enabled (0<<TWIE)|(1<<TWINT)| // Disable TWI Interrupt and clear the flag (0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)| // Initiate a STOP condition. (0<<TWWC); // } break; //----------------------------------------------------------------------------- case TWI_MRX_DATA_ACK: // Data byte has been received and ACK tramsmitted *pTWItrans = TWDR; pTWItrans++; case TWI_MRX_ADR_ACK: // SLA+R has been tramsmitted and ACK received ctTWI--; if (ctTWI){ // Detect the last byte to NACK it. TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag to read next byte (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // Send ACK after reception (0<<TWWC); // }else{ // Send NACK after next reception TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag to read next byte (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // Send NACK after reception (0<<TWWC); // } break; case TWI_MRX_DATA_NACK: // Data byte has been received and NACK tramsmitted *pTWItrans = TWDR; byTWIctrl = 0; // Set status bits to completed successfully. TWCR = (1<<TWEN)| // TWI Interface enabled (0<<TWIE)|(1<<TWINT)| // Disable TWI Interrupt and clear the flag (0<<TWEA)|(0<<TWSTA)|(1<<TWSTO)| // Initiate a STOP condition. (0<<TWWC); // break; case TWI_ARB_LOST: // Arbitration lost byTWIctrl = 0; TWCR = (1<<TWEN)| // TWI Interface enabled (1<<TWIE)|(1<<TWINT)| // Enable TWI Interupt and clear the flag (0<<TWEA)|(1<<TWSTA)|(0<<TWSTO)| // Initiate a (RE)START condition. (0<<TWWC); // break; // case TWI_MTX_ADR_NACK: // SLA+W has been tramsmitted and NACK received // case TWI_MRX_ADR_NACK: // SLA+R has been tramsmitted and NACK received // case TWI_MTX_DATA_NACK: // Data byte has been tramsmitted and NACK received // case TWI_NO_STATE // No relevant state information available; TWINT = “0” // case TWI_BUS_ERROR: // Bus error due to an illegal START or STOP condition default: byTWIstate = TWSR; // Store TWSR and automatically sets clears noErrors bit. byTWIctrl = 0; // Reset TWI Interface TWCR = (1<<TWEN)| // Enable TWI-interface and release TWI pins (0<<TWIE)|(0<<TWINT)| // Disable Interupt (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // No Signal requests (0<<TWWC); // } } Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся.
|
|
|
|
|
Aug 12 2007, 17:26
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(oran-be @ Aug 12 2007, 20:22)  Код // case TWI_BUS_ERROR: // Bus error due to an illegal START or STOP condition default: byTWIstate = TWSR; // Store TWSR and automatically sets clears noErrors bit. byTWIctrl = 0; // Reset TWI Interface TWCR = (1<<TWEN)| // Enable TWI-interface and release TWI pins (0<<TWIE)|(0<<TWINT)| // Disable Interupt (0<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| // No Signal requests (0<<TWWC); // } } Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся. Открою Вам небольшой секрет на TWI_BUS_ERROR необходимо отвечать выставлением TWSTO в TWCR в 1 , это сбрасывает ошибку шины. Подробнее не смотрел, это просто сразу бросилось в глаза. Так что, куририте даташиты внимательней, а потом обвиняйте производителя в глючности.
|
|
|
|
|
Aug 12 2007, 17:52
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(oran-be @ Aug 12 2007, 19:22)  Модуль TWI не виснет, если на шине все в порядке. Но если некий слейв вдруг начинает притормаживать, в особенности если это тоже проц, с еще сырым кодом, то есть чему удивиться. У нас Меги8 работали год с PCF8563, пока батарея как то раз не разрядилась. Прога подвисла вся. Вы знаете ,я примерно такой код в бутлоадере применил,(ну шил внешнюю память через бут), правда без прерывания  тоесть у меня был напряг с размером проги бута  А вообще такие вещи пишутся немного солиднее ,он у вас и повиснет ,но до этого регистр статуса вам даст ТРИЖДЫ знать ,что уходим в ступор  ,а выйти ,уж кто как любит ,или по собаке или лампочками моргаем или молча перезапускаемся. Если слейв притормаживает ,тем более если слейв таже мега ,он аппаратно дает знать об этом мастеру по шине. Вообще проблем по TWI я не замечал,а вот проблем из за освоения TWI и пониманием его работы - это было много раз ,не зря я выше писал "сначала нужно искать ераты своей программе  " Ну отошли совсем от темы. Чем приводить "скоростные" коды ,кто кого скоростнее  просто достаточно посмотреть таблицу ,какие команды за сколько тактов выполняются ,и сравнить ,если таких команд нет ,выяснить сколько займот команд выполнение такой же операции ,и сразу все станет ясно ,где впереди где сзади
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|