Свежие обсуждения
Микроконтроллеры

С чего начать изучение PIC-контроллеров новичку?

1 9 10

HOWK: Выходит, что чем больше программа по обьему - тем быстрее работает ?
Бывает и такое. Раскрытие цикла, например, - один из методов оптимизации. На Pentium-III и выше, по моим личным наблюдениям, дублирование тела цикла (команд на 20 размером) практически гарантирует ускорение работы процентов на 10..25% - меньше накладные расходы на "закручивание" цикла. На микроконтроллерах, я думаю, такое тоже может быть, потому что производительность конвейера команд при выполнении команды перехода падает, как минимум, вдвое. Если, к примеру, продублировать тело цикла, то количество выполненных команд перехода для "закручивания" цикла тоже уменьшится вдвое, соответственно, немного подрастет и производительность. Предельный случай - очистка, допустим, 1кБайта ОЗУ тупым присваиванием x[0] = 0; x[1] = 0; ... будет как минимум втрое быстрее, чем те же действия в цикле, потому что на каждую выполненную команду присваивания в цикле будет выполнено еще по одной команде декремента счетчика цикла, и по одной команде условного перехода. В реальности же в цикле этих команд-паразитов будет еще больше.

 

Ещё один очевидный момент -- алгоритм, выполняющий ту же задачу быстрее, может занимать больший объем.
БПФ vs. обычное ДПФ, быстрая сортировка vs. пузырёк, и ещё тысячи подобных примеров...

 

Добрый день господа программеры. Можно немного добавить слов в этот форум. Я пока отношу себя к ПИКоманам, но не заядлым. Изучение ПИКа думаю, лучше начать с разжеванной готовой программы мигания светодиодом. По-моему это классика жанра. Я года 4 назад так и начал с PIC16F84A. На тот момент у нас даже его нельзя было купить в радиомагазинах. Привезли мне аж из Москвы парочку. И началось, упорное чтение даташитов и ковыряние интернета на предмет русскоязычной доки. Я тогда подписался на рассылку по самостоятельному изучению ПИКов. Товарисч решил подробно разжевать вышеупомянутую программу. Сделал он это за 5 рассылок кажется. Очень доходчиво и неспеша. Я все это освоил и понял. В последней рассылки он сделал то же самое но уже с использованием прерываний. Вот тогда я понял, что это такое и с чем его едят. Всё! Следующий этап была сборка простого программатора, и первое опробование в реале. Сколько счастья было, когда этот жалкий светодиодик заморгал. Скажу сразу, что программить я начинал на Бэйсике Спектрума, потом Паскаль на ХТ, потом в университете АСМ, для какого советсткого проца, кажется ВМ80. Так вот скажу, асм из 35 команд воспринялся влегкую. И 35 команд пика, против около 200 АВР - это жирный плюс, НО! Столько команд АВРа делалось совсем не для того чтобы забить голову программеру, а для того что это изначально заточенная под ЯВУ архитектура. А пикостроители изначально, похоже такой целью не задавались. Второе - программизм на ЯВУ расслабляет. Программер зачастую не знает всех тонкостей архитектуры МК. На асме такой номер не пройдет, поэтому основная масса ошибок отметается уже на этапе отладки. Вторым моим проектом после светолдиода уже стал эмулятор таксофонной карточки. На 84м пике все прелестно запускалось и стабильно работало в нескольких экземплярах. Про медленный старт тут звучали явно необоснованные реплики. Потом были часы термометр термостат с ПИД законом регулирования тоже на асме. И еще несколько мелких проектов. Потом просто так собрал клон ICD2. Теперь отладка в железе действительно доставляет удовольствие. Сейчас знакомый попросил сделать простяцкий девайс в авто, который в зависимости от частоты импульсов с датчика скорости зажигал 3 пороговых светодиода и пикал динамиком. Я подумал, что это шанс взяться за изучение С. И взялся, и пошло поехало. Не скажу что писать на нем гораздо лучше. Да глядя на листинг асма, вижу, что там очень много лишнего, (например CCS перед каждой записью в бита в порт, еще и ставит запись бита в TRISx, которое к тому же еще сопровождается щелканием банков памяти). Но несомненное удобство ощущается при работе с математическими операциями. Тут асм конечно нервно курит в сторонке. Меток в программе стало значительно меньше тоже большой плюс. Но я уже не всегда могу уследить четко, когда и чем у меня занимается процессор. С асмом все всегда однозначно.
Теперь по поводу АВР. Купил себе несколько разных чипов. Сейчас если также будет повод, попробую на них чего-нибудь сваять. Глядя на АВРовский асм и на 16 регистров общего назначения пропадает все желание кодить на асме. Вот она его заточенность под С.
В общем для себя сделал вывод: Выбор языка зависит от конкретной задачи. Например обмен по UART, инженерный калькулятор или елочные гирлянды - конечно же С, а вот если частотомер или генератор сигналов, где очень важны временные характеристики - то только асм. И никакая религиозная война тут не причем. Спасибо, что доичитали мои буквы.

 

Drex: Глядя на АВРовский асм и на 16 регистров общего назначения пропадает все желание кодить на асме. А Вы им всем имена присвойте сразу в заголовке листинга на АSSM... для регистра R0 можно, например, имя любимой тещи...и дело пойдет..
Drex: Меток в программе стало значительно меньше тоже большой плюс.
Раздражающее количество меток обычно возникает при плохом структурировании программы...В этом плане ассемблер сразу, ненавязчиво учит правильно структурировать.....

 

Vlad_Petr
Да с регистрами не самая большая проблема, а вот 200 команд....На сях однозначно удобнее будет, хотя вышеизложенные убеждения в силе.
Как не структурируй, а элементарная проверка условия заставляет применят метку либо относительный переход, который надо пересчитывать если добавляется или убирается хоть одна команда.

 

Drex: а элементарная проверка условия заставляет применят метку либо относительный переход

Есть например команда sbrs. Переводится как Skip next command if Bit in Register Set. Как видите - на этом этапе метки ненужны.

 

Drex
а вот 200 команд.
- Да чего мелочиться, не меньше тысячи!!! : - )
(сколько команд у AVR на самом деле, можете узнать в документации).

 

caddr
Да чего мелочиться, не меньше тысячи!!! : - )
Да чего придираться, ну узнал 118 для AT90S8535
Для МЕГИ 8 насчитал 124....
Ну извините, это гораздо ближе к 35....

 

Wiza
Есть например команда sbrs. Переводится как Skip next command if Bit in Register Set. Как видите - на этом этапе метки ненужны
Как раз после этой команды как правило идет goto метка. Так что можно поспорить. Да вообще, о чем спорить? Я ж не говорю что асм плохой язык. Я сам на нем отработал больше 4 лет и весьма успешно. Просто в разных случаях по разному.

 

Вот уже который день пытаюсь запустить работу однопроводной шины на ножке RB5 PIC18F14K50. После долгих мучений обнаружил, что на этой ножке всегда считывается ноль. Сделал примитивный код инициализация дисплея, установка нужных ножек на вход и опрос ножек RA3, RB5, RB7. В результате RA3 и RB7 ведут себя адекватно: подаю лог. "1" вижу на ЖК "1", подаю "0" вижу "0". А вот на RB5 всегда ноль.
Если переключить RB5 на выход, то она прекрасно работает. Переключаю на вход (ножка отпускает линию, есть подтяжка к плюсу питания), но считывание дает 0. Просматривал ассемблерные листинги компилятора, смотрел логическим анализатором, пробовал прямое обращение к регистрам и с помощью встроенных в ССS команд. На этой ножке всегда ноль
Проверяю TRISB перед проверком состояния ножки - 11110000 - как и должно быть!

Эта ножка также может быть задействована как RX UARTa, но я его не использую.
Этот МК в SOIC-20 корпусе, поэтому впаян в плату и поменять его на другой весьма сложно (обычным паяльником).

Интересно, мог ли я убить эту ножку так, что она работает только на выход?