Выбор 16-ти разрядного контроллера

Nov 16, 2004 91 Replies

Thu Nov 18 2004 23:20, Alexey Kovalev wrote to Yuriy K:

YK>> Freescale HC12, 9S12 - Codewarrior.

AK> А где его взять? AK> Или хотя бы почитать описание?

formatting link

formatting link
formatting link
Limited to 12Kbyte of code - free, если я правильно понял.

WBR, Юрий.

Thu, 18 Nov 2004 15:27:59 +0000 (UTC) Alexey Kovalev wrote to Harry Zhurov:

AM>>>> Он не "полный" С++, но yже и не EC++, т.к. в нем есть шаблоны. AK>>> А чего, к примеру, нет? HZ>> Так ты не знаешь? А с чего тогда замечания "Там от ++ чуть"?

AK> MSP430 не пользовался.

Для АРМа там раньше всех появилось - уже больше года точно. Почти год, как есть для MSP430 и должно появиться в версиях 4.хх для AVR, которые как обычно задерживаются с выходом.

HZ>> Докладываю: там нет трех вещей 1) исключений, 2) информации о HZ>> типе во время выполнения, 3) множественного наследования.

HZ>> По первым двум вещам - однозначно правильно. Это вещи толстые, HZ>> накладные, из-за чего их полезность в ембеддед очень сомнительна. HZ>> Множественное наследование можно было бы и включить. Почему этого HZ>> (пока) нет, думаю, из-за усложнения компилятора. Думаю, со временем HZ>> включат и это.

AK> 3) как раз и не нужно. От него избавляются в новых ЯВУ даже для ПК.

Новые ЯВУ для ПК - это инструменты в большинстве для "мальчиков", вчерашних студентов/школьников. Для них чем проще, тем лучше. Чтобы они быстренько лабали веб и не грели себе голову высокими концепциями. :))

AK> 2) согласен. 1) не согласен. Ограниченный вариант был бы полезен. Например, AK> в throw только целочисленное выражение (или даже константа).

Без разницы. Раскрутка стека все равно понадобится. Усложнение как компилятора, так и сгенеренного кода большое и неоправданное.

AK>>> Да и обработка исключений - как реализована. По сути это просто AK>>> выход сразу из многих уровней вложенности (упрощённо).

AK> ^^^^^^^^^ HZ>> У ты какой! Обработка исключений - это далеко не "просто выход HZ>> сразу из многих уровней вложенности". Это довольно нетривиальный в HZ>> реализации механизм раскручивания стека

AK> за который голова у компилятора болит. И пусть болит - лишь бы код AK> создал.

Он создаст. Ему-то чего переживать, когда у тебя вместо 4 килобайт прошивка будет 10. И зависать на возбуждении исключения будет на долгие тысячи тактов - так, что даже и не знаешь реально сколько оно там болтается.

HZ>> - нужно на каждом уровне вызвать деструкторы всех созданных на этом HZ>> уровне объектов. Это тянет приличные накладные расходы по памяти, коду AK> и

AK> какие деструкторы вызывать известно на этапе компиляции. Их столько же AK> сколько и при обычном выходе из блока/ф-ии.

Да? Ну-ка скажи-ка, известно это в таком случае:

class A; class B; class C;

extern int x; extern B eb;

void f() { case(x) { 1: A* pA = new A; break;

2: if(!eb.IsEmpty()) { B* pB = new B; pB->Copy(eb); } break; ... } ... }

Ну, и как ты и твой компилятор будете узнавать, какие объекты созданы, а какие нет?

AK> Другое дело, что в ембеддед не стОит (часто) использовать виртуальные AK> функции

А виртуальные функции-то причем? Какое они отношение имеют к механизму исключений? И потом, виртуальные функции - это один из основных рулезов языка! Он позволяет стройно и компактно писать программы без нагромождения артефактов из case'ов или массивов указателей на функции и риска сделать на этом глупую ошибку.

AK> да нетривиальные деструкторы - вот от них как раз и происходит AK> "нетривиальный в реализации механизм ". Без них и throw и return AK> реализуются

А return-то тут причем? :-|

AK> просто, а с ними и без исключений тормоза. AK> В альтернативе "голый С" и С++ но virtual не злоупотребляем понятно что AK> лучше.

Еще раз. Виртуальные функции - это большое удобство (к месту, конечно). Реализация их несложна и эффективна. Например, на том же MSP430 вызов виртуальной функции по сравнению с обычной функцией-членом - это всего две быстрых регистровых операции по 1 такту каждая. Это по скорости. И по памяти - один указатель vptr в объекте класса. Все. Отказываться от виртуальности и полиморфизма в пользу исключений никому в здравом уме не придет, не жди.

HZ>> ситуации не те. Обработка исключений - это, пожалуй, самое "тяжелое" HZ>> средство С++, и даже программисты, пишущие для больших машин, HZ>> стараются не злоупотреблять этим.

AK> не правда. на больших машинах все нормальные библиотеки широко AK> используют AK> исключения - обратное признак непрофессионализма.

Никакой это не признак. Признак непрофессионализма - это использовать средства не по назначению.

А главная цель исключений - это обеспечение для разработчика библиотеки механизма, при котором ошибка/исключительная ситуация, возникшая при выполнении кода библиотеки, не может быть корректно обработана на уровне этой библиотеки, а может быть корректно обработана только на уровне пользовательского кода, использующего эти библиотеку. Этот механизм и служит для безопасного с точки зрения целостности выполнения программы прерывания выполнения программы и передачи сообщения "наверх" обработчику.

В остальных случаях можно обойтись более простыми, быстрыми и эффективными методами, чем и пользуются. И в ембеддед нет такой ситуации, как в мире больших машин, где очень интенсивное использование больших и сложных библиотек. В ембеддед такие случаи единичные. Особенно на 8/16 битных МК. Если народ и пользуется библиотеками, то это в 90% случаев RTL, а остальное собственного производства.

AK> Оставим сложные механизмы исключений. Что удобней:

AK> bool stop=false; for(){for(){for(){if(){stop=true; AK> break;}}if(stop)break;}if(stop)break;} AK> или try{for(){for(){for(){if()throw 1;}}}catch(...){;}

Для выхода из вложенных циклов есть оператор goto! Это, пожалуй, единственное его оправданное применение и единственная причина, по которой он присутствует в языке. И реализация такого перехода в описанном случае (выход из вложенных циклов наружу) очень проста и эффективна. Использовать тут исключения - это маразм. Или, пользуясь твоими словами, признак непрофессионализма. Извини.

AK> При учете что все известно на этапе компиляции и затраты по коду и AK> памяти AK> будут меньше во втором случае (если компилятор не соптимизирует 1 в 2)

В этом и подобных случаев проще всего, эффективнее всего и разумнее всего использовать goto.

HZ>> От себя: ты, я вижу, не слишком-то знаком с языком

AK> наоборот :)

Может быть. Но по твоим постам на тему С++ впечатление складывается другое.

HZ>> фоне обзывки в адрес автора

AK> Укажи где были "обзывки" мылом. Я их не вижу.

Отмотай немного назад и увидишь.

Привет!

Я не применял F352 поэтому точно не скажу, но принципиальных трудностей не вижу. Лучше всего позвонить в INELTEK и пообщаться Дмитрием Гаврилюком, координаты см. там ->

formatting link
Или узнать в ЕвроСтандарте
formatting link
_______ Сергей.

Hello, Harry! You wrote to Alexey Kovalev on Fri, 19 Nov 2004 04:34:59 +0000 (UTC):

AK>>>> Да и обработка исключений - как реализована. По сути это AK>>>> просто выход сразу из многих уровней вложенности (упрощённо).

^^^^^^^^^

AK>> за который голова у компилятора болит. И пусть болит - лишь бы AK>> код создал.

HZ> Он создаст. Ему-то чего переживать, когда у тебя вместо 4 HZ> килобайт прошивка будет 10. И зависать на возбуждении исключения

Это если ему в рантайме нужно определять какая же в действительности вирт. ф-ия вызвана (тесно связано с RTTI). В противном случае для каждого throw всё извесно на этапе компиляции и throw сводится к сдвигу стека и jmp-у.

HZ> Да? Ну-ка скажи-ка, известно это в таком случае: HZ> 1: A* pA = new A; break; HZ> 2: if(!eb.IsEmpty()) HZ> { HZ> B* pB = new B; HZ> pB->Copy(eb); HZ> }

HZ> Ну, и как ты и твой компилятор будете узнавать, какие объекты HZ> созданы, а какие нет?

У тебя тут в любом случае меморилики. С жабой спутал или Managed C ? (см. свой пассаж про web)

У меня бы была обязательная в любом случае инициализация указателей на NULL и catch(){if(global_pA){delete global_pA;global_pA=NULL;}....}

[флейм остановлен]

With best regards, Alexey Kovalev

Hello, Yuriy! You wrote to Alexey Kovalev on Fri, 19 Nov 2004 01:37:29 +0300:

YK>

formatting link

У них такая фирменная "изюмина" - один таймер у всех? (Несмотря на тучу к нему compare/capture). Неудобно же: ни режимов счётчика ни некратных др-другу интервалов организовать. Или я не понял и там, вглубине, это всё делается но очень по мотороловски?

With best regards, Alexey Kovalev

Fri Nov 19 2004 08:36, Alexey Kovalev wrote to Yuriy K:

YK>>

formatting link

AK> У них такая фирменная "изюмина" - один таймер у всех? AK> (Hесмотря на тучу к нему compare/capture). AK> Hеудобно же: ни режимов счётчика

Счетчиков 4-8 штук.

AK> ни некратных др-другу интервалов организовать.

Compare вполне достаточно.

Thu Nov 18 2004 22:27, Alexey Kovalev wrote to Dima Orlov:

DO>> А в чем?

AK> В наличии встроенной периферии. У проца её нет или почти нет, AK> обычно даже тактовый генератор требуется внешний.

Так по твоему, 80188 - это микроконтроллер? У него периферия на борту, хоть памяти и нет. А Юбикомы/Синиксы, если по твоему считать, микропроцессоры, бо периферии у них, как раз по твоему определению, "почти нет" (с)? "А мужики-то и не знают" (с), ты им черкани письмецо, поправь, мол, неправильно вы все назвали ;-)

Пока, Алексей

Hello, Yuriy! You wrote to Alexey Kovalev on Fri, 19 Nov 2004 10:28:04 +0300:

YK> Счетчиков 4-8 штук.

Кажется понимаю почему фиджики популярнее моторов ;)

На сайте в таблицах только таймер "одын штюк". Это уже отвращает. Скачал даташит по MC9S12DJ64, читаю

Enhanced Capture Timer ....

- Four 8-bit or two 16-bit pulse accumulators

Это и есть счётчики (таймеры с внешним тактированием) ?

Радостно лезу в "Section 9 Enhanced Capture Timer (ECT) Block" но там "Consult the ECT_16B8C Block User Guide for information about the Enhanced Capture".

Ладно, скачал и его. А там:

This timer contains 8 complete input capture/output compare channels and ___one____ pulse accumulator.

Так можно на него (или другой мотор) подать 2/4/8 импульсных сигналов что бы они считались независимо? На какие хоть ноги, для определенности?

With best regards, Alexey Kovalev

Fri Nov 19 2004 10:55, Alexey Kovalev wrote to Yuriy K:

AK> Enhanced Capture Timer AK> .... AK> - Four 8-bit or two 16-bit pulse accumulators AK> Это и есть счётчики (таймеры с внешним тактированием) ?

Да.

AK> Так можно на него (или другой мотор) подать 2/4/8 AK> импульсных сигналов что бы они считались независимо?

2/4 сигнала.

"ECT_16B8C Block User Guide V01.03"

1.2 Features

 Four 8-Bit Pulse Accumulators with 8-bit buffer registers associated with the four buffered IC channels. Configurable also as two 16-Bit Pulse Accumulators.

AK> Hа какие хоть ноги, для определенности?

"ECT_16B8C Block User Guide V01.03" Figure 4-3 8-Bit Pulse Accumulators Block Diagram Figure 4-4 16-Bit Pulse Accumulators Block Diagram

P.S. Вся дока качается одним файлом, 6мег зипа.

formatting link

P.P.S. Если к процессору не лежит душа - не надо себя мучать, душевное спокойствие дороже. :-)

Очень рад вас видеть, Maxim!

MP> но на них обычно ничего умнее плафона не собирают... Кстати о 125 MP> градусах MP> - а где вы видели такие температуры? Дифферент с атмосферой более 50 MP> градусов это уже нонсенс. Вообще-то в автомобильной промышленности более MP> ценна нижняя цифра. Потому, что в отдельных частях РФ в норме -45 зимой. ford-scorpio, карбюратор с контроллером (на карбе шаговик и биметалический термопривод) коробка контроллера стоит на крыле, около двигателя. греется с одной стороны двигателем, с другой охлаждается железом кузова. по моим прикидкам, зимой -25-30 с одной стороны и +70-90 с другой. внутри мотороловский масочный проц в дип40, датчик давления (мотороловский), пара дип14, дип8 и куча рассыпухи, силовые ключи на зажигание. размер - прмерно с сд-привод, чуть меньше. электролиты стоят на +125. мелочевка - вся от моторолы.

у меня такой точно блок в машине, а этот некие умельцы убили, подключив 24 вольтовый аккум от грузовика в обратной полярности!!! (этож суметь надо было!!!) поиски по форумам приводили к одному результату - никто ничего не знает, так как блок никогда не ломался... по блокам от бмв, мерседесов и многим другим - куча информации, или просто вопросов-ответов по ремонту.

AVL

Hello, Alex! You wrote to Alexey Kovalev on Fri, 19 Nov 2004 08:34:16 +0000 (UTC):

AK> Так по твоему, 80188 - это микроконтроллер? У него периферия на AK> борту, хоть памяти и нет.

Периферии чуть (3 таймера) по сравнению с ядром. Всякие DMA вполне микропроцессорные модули (служат для сопряжения с специфической микропроцессорной обвязкой). Насчёт памяти ты загнул - она есть (регистры).

Аналогично: если в пне встроен датчик температуры то он все равно микропроцессор.

AK> А Юбикомы/Синиксы, если по твоему считать, микропроцессоры, бо

Ты про виртуальную периферию? Именно потому что она предусмотрена производителем их и называют Controller

With best regards, Alexey Kovalev

Hello, Alexey Kovalev !

Описание чего?

С уважением, Дима Орлов.

Hello, Alexey Kovalev !

Вобщем достаточно размытая граница.

Для того чтобы говорить о лучше-хуже, нужно поставить ясно задачу. Hапример для моих С лучше ассемблера, но хуже чего-то более высокоуровневого.

С уважением, Дима Орлов.

Maxim, ты ещё здесь сидишь?

Четверг Hоябрь 18 2004 09:29, Maxim Polyanskiy wrote to Alex Kouznetsov:

MP> Кстати о 125 градусах - а где вы видели такие температуры?

Дык, в автомобиле.

MP> Дифферент с атмосферой более 50 градусов это уже нонсенс.

Температура вблизи мотора может доходить до 90°, за чёрной облицовкой приборного щитка в солнечный день - до 80°. Дифферент в 40° типичен для электроники (хотя и не для контроллеров, а скорее всякой аудиоусилительной аппаратуре - но ей-то тоже должен управлять контроллер...)

MP> Вообще-то в автомобильной промышленности более ценна нижняя цифра.

Ценно и то, и другое.

MP> Потому, что в отдельных частях РФ в норме -45 зимой.

В антарктиде ниже -80° бывает, так что может потребоваться техника и для таких температур...

Георгий

Alexey, ты ещё здесь сидишь?

Четверг Hоябрь 18 2004 13:51, Alexey Kovalev wrote to Alex Kouznetsov:

AK>> Я ++ вообще не упоминал, непонятно с чего вдруг возник твой AK>> вопрос. Hо раз уж тебя этот вопрос интересует, то - 8086 AK> Это микропроцессор, а не микроконтроллер (см. сабж)

80188/186. Ы? ;-)

Георгий

Fri Nov 19 2004 11:39, Alexey Kovalev wrote to Alex Kouznetsov:

AK>> Так по твоему, 80188 - это микроконтроллер? У него периферия на AK>> борту, хоть памяти и нет.

AK> Периферии чуть (3 таймера) по сравнению с ядром. Всякие DMA вполне AK> микропроцессорные модули (служат для сопряжения с специфической AK> микропроцессорной обвязкой). AK> Hасчёт памяти ты загнул - она есть (регистры).

Да будет тебе известно, что регистры - это вообще-то не память; ты бы еще порты ввода-вывода памятью назвал. Памяти программ в нем нет. Поэтому он микропроцессор, несмотря на наличие периферии.

AK> Аналогично: если в пне встроен датчик температуры то он все равно AK> микропроцессор.

AK>> А Юбикомы/Синиксы, если по твоему считать, микропроцессоры, бо

AK> Ты про виртуальную периферию? Именно потому что она предусмотрена AK> производителем их и называют Controller

Не приплетай сюда виртуальную, в той или иной форме она возможна для любого проца, имеющего порты ввода-вывода. Юбикомы называют микроконтроллерами потому, что у них есть встроенная память программ. Несмотря на бедную _реальную_ периферию.

Если до тебя еще не дошло: разделять процессоры от контроллеров по периферии - неверно. Так никто кроме тебя не делит.

formatting link
microcontroller is a computer-on-a-chip... It is a type of microprocessor emphasizing self-sufficiency

Функционально полный компьютер без развитой периферии сделать можно, а без памяти программ - нельзя. Микропроцессор с развитой периферией сделать можно. Так что главное отличие - не периферия, а наличие/отсутствие памяти программ.

Процессор всегда является составной частью любого микроконтроллера. Говоря о языках программирования, делать принципиальное различие между процессорами и контроллерами - довольно глупо. И если уж ты задал (пусть жаже не относящийся к делу) вопрос про ++ для 16-битников, то изволь принять х86 в качестве примера. Отговорки твои несерьезны, а высказывания некорректны.

Пока, Алексей

Hello, Alex Kouznetsov !

Полно позиционируемых как контроллеры устройств без памяти программ (51, мотороллеры, etc.). Так что разделение весьма условно.

А тут ты совершенно прав.

С уважением, Дима Орлов.

Hello, Alex! You wrote to Alexey Kovalev on Fri, 19 Nov 2004 10:50:56 +0000 (UTC):

AK>> Hасчёт памяти ты загнул - она есть (регистры).

AK> Да будет тебе известно, что регистры - это вообще-то не память;

Самая настоящая память. В 196-ых окромя регистрового файла иной встроенной RAM и нет. На ПК при загрузке с помощью только этой "не памяти" выполняется программа тестирования внешней памяти.

AK> Памяти программ в нем нет. AK> Поэтому он микропроцессор, несмотря на наличие периферии.

Во сказал! А ты оказывается и не знаешь. Не имеет смысл перичислять огромное кол-во микроконтроллеров только с внешней памятью. Например, только вчера я смотрел MB90V340A и расстроился : ROM - External. :(

With best regards, Alexey Kovalev

Привет Alex!

Friday November 19 2004 11:34, Alex Kouznetsov wrote to Alexey Kovalev:

AK> From: "Alex Kouznetsov" snipped-for-privacy@senet.com.au>

AK>

AK> Thu Nov 18 2004 22:27, Alexey Kovalev wrote to Dima Orlov: AK>

DO>>> А в чем? AK>

AK>> В наличии встроенной периферии. У проца её нет или почти нет, AK>> обычно даже тактовый генератор требуется внешний. AK>

AK> Так по твоему, 80188 - это микроконтроллер? У него периферия на борту, AK> хоть памяти и нет.

Тем не менее - считался микроконтроллером, пока был актуален.

AK> А Юбикомы/Синиксы, если по твоему считать, микропроцессоры,

Конечно.

AK> бо периферии у них, как раз по твоему определению, "почти AK> нет" (с)?

Порты есть - этого уже достаточно чтобы считать их контроллерами.

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
, ftp://altor.sytes.net

Привет Alex!

Friday November 19 2004 13:50, Alex Kouznetsov wrote to Alexey Kovalev:

AK>> Периферии чуть (3 таймера) по сравнению с ядром. Всякие DMA AK>> вполне микропроцессорные модули (служат для сопряжения с AK>> специфической микропроцессорной обвязкой). Hасчёт памяти ты загнул AK>> - она есть (регистры). AK>

AK> Да будет тебе известно, что регистры - это вообще-то не память; ты бы еще AK> порты ввода-вывода памятью назвал. Памяти программ в нем нет. Поэтому он AK> микропроцессор, несмотря на наличие периферии.

Значит 8035 - тоже микропроцессор ?

AK>

AK>> Аналогично: если в пне встроен датчик температуры то он все равно AK>> микропроцессор. AK>

AK>>> А Юбикомы/Синиксы, если по твоему считать, микропроцессоры, бо AK>

AK>> Ты про виртуальную периферию? Именно потому что она предусмотрена AK>> производителем их и называют Controller AK>

AK> Hе приплетай сюда виртуальную, в той или иной форме она возможна для AK> любого проца, имеющего порты ввода-вывода. Юбикомы называют AK> микроконтроллерами потому, что у них есть встроенная память программ. AK> Hесмотря на бедную _реальную_ периферию.

Hет, потому что _есть_ периферия - порты ввода-вывода.

AK> Если до тебя еще не дошло: разделять процессоры от контроллеров по AK> периферии - неверно. Так никто кроме тебя не делит.

Ээээ, вообще-то все именно так и делят, хотя конечно граница весьма условная.

Alexander Torres, 2:461/28 aka 2:461/640.28 aka 2:5020/6400.28 aka snipped-for-privacy@yahoo.com

formatting link
, ftp://altor.sytes.net

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required