Thu Nov 18 2004 23:20, Alexey Kovalev wrote to Yuriy K:
YK>> Freescale HC12, 9S12 - Codewarrior.
AK> А где его взять? AK> Или хотя бы почитать описание?
WBR, Юрий.
Thu Nov 18 2004 23:20, Alexey Kovalev wrote to Yuriy K:
YK>> Freescale HC12, 9S12 - Codewarrior.
AK> А где его взять? AK> Или хотя бы почитать описание?
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 и пообщаться Дмитрием Гаврилюком, координаты см. там ->
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>
У них такая фирменная "изюмина" - один таймер у всех? (Несмотря на тучу к нему compare/capture). Неудобно же: ни режимов счётчика ни некратных др-другу интервалов организовать. Или я не понял и там, вглубине, это всё делается но очень по мотороловски?
With best regards, Alexey Kovalev
Fri Nov 19 2004 08:36, Alexey Kovalev wrote to Yuriy K:
YK>>
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 FeaturesFour 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мег зипа.
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
Не приплетай сюда виртуальную, в той или иной форме она возможна для любого проца, имеющего порты ввода-вывода. Юбикомы называют микроконтроллерами потому, что у них есть встроенная память программ. Несмотря на бедную _реальную_ периферию.
Если до тебя еще не дошло: разделять процессоры от контроллеров по периферии - неверно. Так никто кроме тебя не делит.
Функционально полный компьютер без развитой периферии сделать можно, а без памяти программ - нельзя. Микропроцессор с развитой периферией сделать можно. Так что главное отличие - не периферия, а наличие/отсутствие памяти программ.
Процессор всегда является составной частью любого микроконтроллера. Говоря о языках программирования, делать принципиальное различие между процессорами и контроллерами - довольно глупо. И если уж ты задал (пусть жаже не относящийся к делу) вопрос про ++ для 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
Привет 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
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.