AK>> Для тебя, да. А для твоего снабженца гиморой - он приходит на фирму
GS> У вас проблемы со снабженцем? Что-ж, бывает. Hо при чём тут возможности GS> PIC'ов, совершенно непонятно...
И это говорит человек, который постоянно плачется, что чего-то не достать :-)
9-Jul-04 14:47 George Shepelev wrote to Alexey Boyko:GS> При грамотном написании программ работа с данными (в том числе битовыми GS> массивами) будет очень быстрой.
Работа с битовыми *массивами* будет одинаково медленной как на PIC, так и на AVR. Так как у них нет косвенной адресации бита.
*массив* предполагает адресацию по переменому индексу, работа сbitclr .macro *bl [z] = 0 bcf (([z]+bl)>>3),((bl)&7) .endm bitset .macro *bl [z] = 0 bsf (([z]+bl)>>3),((bl)&7) .endm и т.д.
defseg bits,$3C0,$400 ; (8*$78),(8*$80)
seg bits i_flags .ds 3 seg rom0 bitset i_flags bitclr i_flags+1 jb i_flags+2, ...
Ничем не отличается от seg bits i_phase .ds 1 i_changed .ds 1 i_new .ds 1 seg rom0 bitset i_phase bitclr i_changed jb i_new, ...
i_flags - это всё равно НЕ МАССИВ, пока мы с ним не работаем как с массивом, а именно, по переменному (не константному) индексу (или по указателю). Да, это можно написать, добавив к номеру бита номер стартового бита массива, выделив из полученного 3 младших знака для вычисления (или выборки из массива в ПЗУ) маски этого бита, остальные сдвинув вправо на 3 для получения адреса его байта. Но это такой объём кода, на фоне которого пара лишних ld/st у AVR будет мало что весить.
GS> При грамотном написании программ работа с данными (в том числе битовыми GS> массивами) будет очень быстрой. Ты так заманчиво про битовые массивы сказал... Пожалуйста, приведи "очень быстрый" код для работы с "в том числе битовым массивом". Дано: есть массив seg bits state: .ds 24
Откуда-то приходит номер канала i=0..23, в котором изменилось состояние, и признак 0 или 1 нового состояния. Потом из другого места приходит вопрос "а как там дела у канала j?", надо ответить. Напиши код для PIC16 (что его нельзя сделать "очень быстрым" ни для MCS51, ни для AVR, ни для MSP430 я признаю сразу!) А если ты имел ввиду "массу битов", а не "битовый массив", то надо писать не GS> (в том числе битовыми массивами) будет очень быстрой. а
Где чёткость выражения мысли, присущая высококлассному программисту? С каких пор слова "битовый массив" и "масса битов" означают одно и то же? Со вторым у пика действительно неплохо. Хотя и не намного лучше, чем у MCS51 (256 битовых флагов), не лучше, чем у MSP430 (вся линейная память - это не щёлкая банками не сотни, а тысячи/десятки тысяч битов), чем у MB90 или M16C, (сотни тысяч/миллионы битов). А с первым плохо у любого однокристальника.
GS> Ото-ж. А у PIC'а доступны все регистры, оптимизация заключается в GS> грамотном "распихивании" данных по регистровым банкам. Угу. Когда-то говорили "в СССР самые лучшие специалисты по оперированию больших опухолей, так как в остальном мире научились диагностировать на этапе, когда опухоль ещё маленькая и практики по большим опухолям у них нет". Значит "в мире PIC самые лучшие специалисты по ручному распихиванию переменных по памяти" ? Да, я сам когда-то адреса для мультиплексора CD4051 завёл на три старших бита порта pic-а, чтобы mowlw $20 / addwf PORTD,f перейти к следующему адресу. Ну и что, это аргумент за "pic forever" ? А если мне понадобится прицепить 6 независимых мультиплексоров, то искать 6-портовый пик? Или между тройками выходных ног для адресов ставить входную ногу и подавать на неё фиксированно 0, чтобы таки addwf-ами на регистр порта работать?
Как-то странно у тебя защита пиков выходит. "а у пиков доступна вся память!"... Если у пиков и есть преимущества, то не там ты их показываешь. *Как* доступна? Поячеечно или мелкими кусками. А я в 90s8515 запросто сделал 259-байтный непрерывный буфер (тип+длина+до 255 данных+crc16) для принимаемых пакетов. Сделай это в пике16. И при каждом инкременте FSR проверяй его на 0 и добавляй к нему 0x20 или сколько там, а то и IRP-битом щёлкни. А потом мы сравним подпрограммы сравнения строк для pic16 (один указатель) и avr. А потом - суммирования массивов в третий массив для pic18 (два указателя) и AVR. А потом найдём задачку, где надо 4 указателя и обольём грязью и AVR, и PIC и скажем, что без MSP430 нет житья. И на всю жизнь найдём себе развлечение - искать задачу, которую *наш* любимец сделает, а чужой -- нет. А те задачи, где наоборот - обзовём нетипичными. Эти все вещи - фигня, пока влазят и успевает. А если на пределе, то для каждой архитектуры можно подобрать пример, когда она сможет, а остальные - фиг.