Jurgis, ты ещё здесь сидишь?
Пятница Июнь 09 2006 09:12, Jurgis Armanavichius wrote to George Shepelev:
GS>> Она и не гробит. Просто архитетектура и система команд младших GS>> семейств майкрочиповских контроллеров крайне плохо ложится на GS>> архитектуру и систему команд, положенных в основу сишных GS>> концепций. Hо при этом они обеспечивают эффективное решение GS>> широкого круга задач. JA> Спору нет, если младшие пики крайне просты - значит и не нужно их JA> программировать на ЯВУ. Hо ведь не меньшая, а скорее бОльшая, часть JA> микроконтроллеров как раз превосходно программируются на ЯВУ :-)
Голословное утверждение. Существует множество систем, где на один мощный "центральный" контроллер приходятся десятки, сотни, а то и тысячи простейших "периферийных" контроллеров. Обычно решающих отличающиеся задачи, потому имеющие разные прошивки. Результат - бОльшая часть софта будет написана не на ЯВУ.
JA> Кстати, а ты можешь мне объяснить, какие недостатки младших пиков JA> плохо ложатся на сишную концепцию? А то я пиков не знаю, но как-то JA> любопытно.
Hе могу не приветствовать перехода к более конструктивному обсуждению ;) Вот набор специфических проблем:
Крайне маленький стек, существенно ограничивающий вложенность подпрограмм.
Широкий набор очень удобных "битовых" и ниббловых операций, которые довольно криво описываются в "классическом" C.
Крайняя убогость работы с указателями, которые весьма широко используются в конструкциях "классического" C.
Память данных в виде "банков", в противовес сишной концепции "линейной памяти".
Очень эффективная реализация алгоритмов с "аккумулятором" и "флагами состояний" контроллера, если такие возможности не учитывать при написании программ - код получается крайне неэффективным.
"Кривая" реализация выборки значения из таблицы - через вызов команды retlw, причём адресация к таблице не должна выходить за 256 значений. Если эту особенность не учитывать при написании программ - опять получается крайне неэффективный код.
Порты выступают в качестве "обычных" регистров данных, с ними можно производить арифметические и логические операции, это очень непривычно для программистов-сишников.
По сути единственный вектор прерывания контроллера существенно меняет концепции программирования при поддержке широкого набора "внутренней периферии", которой так богаты современные PIC'и.
Это так, навскидку...
GS>> Когда людям нужно простое, дешёвое и надёжное решение, он вполне GS>> может взять младший PIC и написать эффективную программу на GS>> ассемблере, не связываясь с неподходящим инструментом. Ему важен GS>> результат, а не "религиозные" убеждения некоторых участников этой GS>> эхи. JA> Hе скажи. Возьмем, к примеру, меня. Я совершенно не знаю ассемблера JA> пиков. Hо представим, что у Микрочипа появился микроконтроллер, в JA> котором реализован интерфейс USB 2.0 High Speed, и поэтому я его JA> захочу применить. С применением C/C++ я это смогу сделать довольно JA> быстро и безболезненно. А на ассемблере? Hа ассемблере мне будет JA> гораздо тяжелее.
Тяжело в учении - легко в бою. У Майкрочипа очень хорошая документация, при желании за неделю разберёшься.
JA> Вот в этом моем случае решение будет дешевле, проще и надежнее :-)
Сперва пусть появятся эти самые мифические микроконтроллеры с реализацией High Speed USB...
Георгий