|
|
![]() ![]() |
|
|
![]() ![]() ![]() ![]() |
|
Опции темы | Поиск в этой теме |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1342
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Да, только АВР на языке Си (WinAVR, CodeVisionAVR), до пиков руки еще не доходили
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1342
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Жаль. Я AVR тоже кодить умею, правда на более адекватном для них языке - ассемблере. А вот PIC очень даже нужно "вкурить". Причём тоже на ассемблере, а доставать глупыми вопросами некого
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 14.02.2010 Последняя активность: 18.11.2015 19:18
Сообщений: 7908
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 24.08.2019 11:36
Сообщений: 1342
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Я там не сижу и ирку ставить не горю желанием. У него аська есть?
Что-то мы тут расфлудились... |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 21.06.2010 Последняя активность: 01.08.2015 23:26
Сообщений: 179
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
268139930
Поначалу я тоже считал, что МК лучше программировать на Ассемблере, но по мере овладевания языками перешел сначала на Си, а потом на C++. Выяснилось, что на C++ можно писать более компактный и эффективный код, нежели на ассемблере (компилятор создает машинный код лучше человека). |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Завсегдатай Фонарёвки
|
![]() Цитата:
![]() Ну и другой недостаток Си - очень высокий порог вхождения... Первое время от гугла вообще не оторваться. Даже не знаю, сколько должно пройти времени, чтобы перестать гуглить, как сделать каждую операцию... Я бросил его раньше. |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]()
Для С есть прекрасная книга, которая этот порог ломает. По сути, Библия программиста, которая на примере С разбирает вообще алгоритмы. Авторы: Керниган, Ритчи.
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Завсегдатай Фонарёвки
|
![]() Цитата:
Для ассемблера мне хватило списка команд (4 листа) и описания регистров в даташите мк, и я сразу начал писать. |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() Цитата:
![]() Для МК Си более чем достаточно. На самом деле компилятор создает машинный код хуже человека, но это зависит от человека ![]() Я "узкие" места переписываю на ассемблере, раз в 10 быстрее работает и код компактнее. А для начинающих писать на Си для МК нужно знать десяток Си- шных операторов и десяток библиотечных функций (работа со строками и памятью) и можно писать любую программу. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 12.02.2010 Последняя активность: 15.02.2011 20:41
Сообщений: 266
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 03.05.2010 Последняя активность: 10.09.2011 23:10
Сообщений: 354
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Вы затронули настолько древний холивар, что корни его растут еще с перфокарт, тут идиального решения нет и не будет ближайшее время. Да, компиляторы научились выдавать машинный код, работающий быстрее того, что составит человек, но не всегда, так что спор бессмысленный
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 12.02.2010 Последняя активность: 15.02.2011 20:41
Сообщений: 266
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Си++ на МК вполне в тему, кстати.
Я сейчас уже в проектах сишным функциям и переменным даю имена типа hal_display_osd_cursor_position_x, то есть по смыслу аналог hal.display.cursor.position.set_x(), потому что иначе можно запутаться, какая переменная к чему относится. Но у Си++ на МК, вроде, какие-то ограничения есть, ещё руки не дошли разобраться, так что пока по старинке. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Завсегдатай Фонарёвки
|
![]()
Да, холивар такой древний, что даже участвовать не буду... Просто скажу, что мне ассемблер больше нравится, и всё
![]() Цитата:
За что я например люблю php - у него есть централизованная документация, где по каждой функции кратко и ёмко написано, что она делает. У ассемблера впринципе даже одной таблицей можно это описать, даже ещё более кратко и ёмко. А Сишные функции и операторы для меня пока тёмный лес... |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Завсегдатай Фонарёвки
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
|
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() Цитата:
![]() Сложение цветных RGB точек c ограничением. typedef struct { unsigned char r; unsigned char g; unsigned char b; } sPoint; Вот код на Си: sPoint AplusB( sPoint a, sPoint b) { if(((unsigned short)a.r+(unsigned short)b.r) >255) a.r=255; else a.r+=b.r; if(((unsigned short)a.g+(unsigned short)b.g) >255) a.g=255; else a.g+=b.g; if(((unsigned short)a.b+(unsigned short)b.b) >255) a.b=255; else a.b+=b.b; return a; } Весь код в функции заменяется одной ассемблерной командой MMX Приблизительно тоже будет при обработке звука(особенно многоканального). |
|
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 12.02.2010 Последняя активность: 15.02.2011 20:41
Сообщений: 266
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]() |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Ветеран Фонарёвки
Регистрация: 15.02.2010 Последняя активность: 05.09.2022 18:18
Сообщений: 1034
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Ну хорошо, писать код не буду, на словах.
Например везде, где нужно использовать флаг переноса. Попробуйте 64битные вычисления реализовать на Си на 8 битном проце, и сделайте код на asm, и сравните ![]() ПС. похоже пора отдельную ветку заводить. |
![]() |
![]() ![]() |
![]() |
![]() ![]() |
Увлеченный
Регистрация: 12.02.2010 Последняя активность: 15.02.2011 20:41
Сообщений: 266
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях
|
![]()
Сразу чтобы отмести все подозрения - я не пытаюсь устроить срач и холивар, мне действительно интересно докопаться до правды - благо, в таком деле, как вычисления, правда объективна и измерима в цифрах.
Вот что я написал на няшной сишечке: Код:
volatile unsigned long long i,j; int main(void) { i = 0x1FFFFFFFFFFFFFFF; j = 0x1FFFFFFFFFFFFFFF; i += j; while(1); return 0; } Вот соответствующий кусок lss-файла: У меня глаз к ассемблеру не слишком привычен, но на мой взгляд, это более чем приличный код для 64-хбитного суммирования. Занимает 256 байт. А как бы это написал опытный ассемблерщик? Неужели эту функцию можно впихнуть в 25 байт? Или даже в 100 байт? |
![]() |
![]() ![]() |