реклама на сайте
подробности

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Прерывания от компаратора, нужно два разных обработчика
singlskv
сообщение Jul 9 2007, 09:44
Сообщение #46


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(smk @ Jul 9 2007, 12:43) *
Цитата

На C - писать можно только под кристалы с 16 и более K памяти.

Тут кто-то высказывал мнение, что на АСМ писать хорошо только то, что до 2К. Все что больше - слишком трудоемко и не окупает затраченного времени.

Просматривая код который генерят WinAVR и IAR ( а я всегда просматриваю что они
мне там нагенерили(хобби у меня такое smile.gif)) могу сказать что ИМХО, больше чем
20-30% по длинне кода при написании на асм выиграть сложно (и то должно повезти, сильно
зависит от алгоритма).
Если говорить по скорости, то на асм можно получить и до 50-100% выигрыша( опять же
если повезет), особенно на алгоритмах которые в силу некоторых особенностей просто
плохо ложатся на С.
Так что мое ИМХО, 2кб это тоже вполне размер для С если уметь ими
грамотно распоряжаться
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 9 2007, 09:45
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Вы можете взять м168 написать и отладить прогу.

Идея хорошая. Есть в распоряжении и М16, и М8, и М48. Может я и не прав, но отладку предпочитаю делать сразу на том чипе, что в серию пойдет. Так сказать в условия, максимально приближенных к боевым. А размер кода, ну если уж надежно не влезу, то ясно что прийдется другой чип брать.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 9 2007, 10:53
Сообщение #48


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(smk @ Jul 9 2007, 12:45) *
Есть в распоряжении и М16, и М8, и М48. Может я и не прав, но отладку предпочитаю делать сразу на том чипе, что в серию пойдет. Так сказать в условия, максимально приближенных к боевым. А размер кода, ну если уж надежно не влезу, то ясно что прийдется другой чип брать.

Не совсем так.
Чипы 48/88/168 - взаимозаменяемые, отличаются лишь только объемом памяти, причем m88 и m168 оличаются вообще только объемом флеша. По периферии все три чипа - идентичны.

Взяв m168, вы можете нормально отлаживать программу с выключенной оптимизацией. После того как программа готова - вы включаете максимальную оптимизацию по объему и смотрите в какой чип прога влазит. Если влазит в m48 - хорошо, ставите m48, не влазит - берете m88 или оставляете m168. Прелесть как раз в том, что нормально отладив программу на самом толстом чипе линейки, программу без изменений можно будет заливать в более дешевые чипы.

Цитата(singlskv @ Jul 9 2007, 12:44) *
могу сказать что ИМХО, больше чем
20-30% по длинне кода при написании на асм выиграть сложно (и то должно повезти, сильно
зависит от алгоритма).

Вы не правы. Т.к. на асм никто не обязывает вас делать пролог и эпилог к каждой функции одинаковым, ключевые переменные можно держать в регистрах, распределять память страницами - экономить на загрузке XH/YH/ZH, также по-человечески работать с битами (bst/bld) + полноценное использование флага C.
У меня программа на асм в среднем получается в 3-5 раз меньше по объему чем аналог на C. (алгоритмы одинаковые). Как пример - драйвер RTL8019 + UDP/IP стек + небольшой командный протокол over UDP и все это в в 1.7k (бутлоадер по сети). То же самое на Си компилится минимум в 8k.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 9 2007, 11:50
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
Чипы 48/88/168 - взаимозаменяемые, отличаются лишь только объемом памяти, причем m88 и m168 оличаются вообще только объемом флеша. По периферии все три чипа - идентичны.

Взяв m168, вы можете нормально отлаживать программу с выключенной оптимизацией. После того как программа готова - вы включаете максимальную оптимизацию по объему и смотрите в какой чип прога влазит. Если влазит в m48 - хорошо, ставите m48, не влазит - берете m88 или оставляете m168. Прелесть как раз в том, что нормально отладив программу на самом толстом чипе линейки, программу без изменений можно будет заливать в более дешевые чипы.

Ну тогда хочу Тини861. Уж 8 кило мне на все хватит! я понял о чем Вы, все это верно, так что хорошо бы иметь Т461 и Т861 в распоряжении. А М48 и более - это для моей задачи перебор, хотя я подумаю...

Хм. Ради такого стоит выучить АСМ. И как часто удается сравнить С и АСМ по объему кода?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 9 2007, 12:37
Сообщение #50


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(smk @ Jul 9 2007, 14:50) *
А М48 и более - это для моей задачи перебор, хотя я подумаю...

У m48/88/168 есть аппаратный умножитель, а у вас полно математики с плавающей точкой. Код на меге будет быстрее и эффективнее чем на тиньке...


Цитата
И как часто удается сравнить С и АСМ по объему кода?

Это уж кому как повезет. Мне довелось переносить с Cи на асм 4 относительно большие программы (исходников >100k). Соотношение получилось примерно такое:

Asm C (с максимальной оптимизацией)
1.7k 8k
3.6k 12k
4.6k ~16k
4.1k ~14k
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 9 2007, 13:35
Сообщение #51


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Jul 9 2007, 14:53) *
Вы не правы.
Ну зачем же так категорично smile.gif
Цитата
Т.к. на асм никто не обязывает вас делать пролог и эпилог к каждой функции одинаковым,
Странно, но у меня прологи и эпилоги у функций очень разные, а чаще всего их
нету вобще 07.gif
Цитата
ключевые переменные можно держать в регистрах,
В С тоже можно.
в IAR кажется 4 регистра гарантированны, в WinAVR 6 (r2-r7)+ можно
использовать и дальше (r8-r15), но правда уже с осторожностью
Цитата
распределять память страницами - экономить на загрузке XH/YH/ZH,

Согласен, но большой выигрыш это может дать только на очень узком круге задач
Цитата
также по-человечески работать с битами (bst/bld) + полноценное использование флага C.

Вот здесь соглашусь полностью и безоговорочно, работа с отдельными битами в С
это тяжелый случай,
НО, как показывает моя практика, этот эфект можно очень сильно уменьшить если
при написании проги на С пользоваться известными особенностями конкретного компилятора,
при этом никто не мешает писать переносимый(возможно не всегда оптимальный для
разных платформ код)
Цитата
У меня программа на асм в среднем получается в 3-5 раз меньше по объему чем аналог на C. (алгоритмы одинаковые). Как пример - драйвер RTL8019 + UDP/IP стек + небольшой командный протокол over UDP и все это в в 1.7k (бутлоадер по сети). То же самое на Си компилится минимум в 8k.

Такой результат получить очень просто, не пользоваться компиляторозависимой оптимизацией,
но как-то странно ей не пользоваться когда мы сравниваем полученную
производительность/размер кода между С и ASM smile.gif

А с Вашим подходом с использованием Mega168 на стадии отладки и использованием
mega48/88/168 соответственно на стадии производства, очень даже согласен.
Сам использовал даже такую комбинацию
ATmega16 - отладка
ATtiny2313 - готовое изделие smile.gif
Единственно дефайнить много пришлось sad.gif
но правда всего лишь один раз smile.gif
Go to the top of the page
 
+Quote Post

4 страниц V  « < 2 3 4
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 13:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01401 секунд с 7
ELECTRONIX ©2004-2016