Светодиодные фонари и световые приборы. Всё о светотехнике.
Изображения Дневники Группы Поиск
Вернуться   Форум FONAREVKA.RU Лаборатория Электроника и схемотехника Электроника Микроконтроллеры
Расширенный поиск
Забыли пароль? Регистрация

  • О нашем проекте
  • Светотехника и световые приборы
  • Правила форума
Проект FONAREVKA.RU специализируется на предоставлении всей необходимой информации по светотехнике:

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

Если у вас есть вопросы по выбору фонарей, аккумуляторов и зарядных устройств ознакомьтесь с FAQ от наших экспертов:

F.A.Q. по выбору фонарей различных типов;
F.A.Q. по выбору аккумуляторов;
F.A.Q. по выбору зарядных устройств.
Ответ  Создать новую тему
Просмотров в теме 10985   Ответов в теме 28   Подписчиков на тему 0   Добавили в закладки 0
Опции темы Поиск в этой теме
Старый 05.09.2010, 04:39 Автор темы   1
Ветеран Фонарёвки
 
Аватар для lasers_INFERION
 
Регистрация: 15.02.2010
Последняя активность: 24.08.2019 11:36
Сообщений: 1360
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию Программирование МК

Сорри за оффтоп.
Цитата:
Посмотреть сообщение Сообщение от chem_kot :
Индикатор разряда могу сделать. Цена вопроса?
Ты умеешь МК программировать? На каком языке? Какие? С семейством PIC контроллеров знаком?..
lasers_INFERION вне форума   Ответить с цитированием Вверх
Старый 05.09.2010, 07:49   2
lasers_chem_kot
Завсегдатай Фонарёвки
 
Аватар для lasers_chem_kot
 
Регистрация: 13.03.2010
Последняя активность: 15.08.2015 05:45
Сообщений: 511
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для lasers_chem_kot с помощью ICQ
По умолчанию

Да, только АВР на языке Си (WinAVR, CodeVisionAVR), до пиков руки еще не доходили
lasers_chem_kot вне форума   Ответить с цитированием Вверх
Старый 05.09.2010, 23:15 Автор темы   3
lasers_INFERION
Ветеран Фонарёвки
 
Аватар для lasers_INFERION
 
Регистрация: 15.02.2010
Последняя активность: 24.08.2019 11:36
Сообщений: 1360
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Жаль. Я AVR тоже кодить умею, правда на более адекватном для них языке - ассемблере. А вот PIC очень даже нужно "вкурить". Причём тоже на ассемблере, а доставать глупыми вопросами некого ...
lasers_INFERION вне форума   Ответить с цитированием Вверх
Старый 05.09.2010, 23:18   4
lasers_Hobbi TV
Ветеран Фонарёвки
 
Аватар для lasers_Hobbi TV
 
Регистрация: 14.02.2010
Последняя активность: 18.11.2015 19:18
Сообщений: 8758
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от INFERION :
А вот PIC очень даже нужно "вкурить". Причём тоже на ассемблере, а доставать глупыми вопросами некого ...
В конфе почти каждый день присутствует Gall - профессиональный программист. Легко ответит на твои вопросы...
__________________
моб.: +7-931-336-3737
e-mail: shop@hobbi.tv
lasers_Hobbi TV вне форума   Ответить с цитированием Вверх
Старый 06.09.2010, 01:24 Автор темы   5
lasers_INFERION
Ветеран Фонарёвки
 
Аватар для lasers_INFERION
 
Регистрация: 15.02.2010
Последняя активность: 24.08.2019 11:36
Сообщений: 1360
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Я там не сижу и ирку ставить не горю желанием. У него аська есть?

Что-то мы тут расфлудились...
lasers_INFERION вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 13:18   6
Gall
Увлеченный
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 01.08.2015 23:26
Сообщений: 183
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от INFERION :
Я там не сижу и ирку ставить не горю желанием. У него аська есть?
268139930

Поначалу я тоже считал, что МК лучше программировать на Ассемблере, но по мере овладевания языками перешел сначала на Си, а потом на C++. Выяснилось, что на C++ можно писать более компактный и эффективный код, нежели на ассемблере (компилятор создает машинный код лучше человека).
Gall вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 19:40   7
SviMik
Завсегдатай Фонарёвки
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 18:47
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для SviMik с помощью ICQ Отправить сообщение для SviMik с помощью MSN
По умолчанию

Цитата:
компилятор создает машинный код лучше человека
Посмотрим, что он создаст, когда начнёшь арифметику писать... На ассемблере сразу видно "обьём вычислений", и что нужно оптимизировать. А на Си начнёшь писать, поставишь float, где достаточно int, и так далее. И в коде это в глаза не бросается, а мк потом будет тормозить

Ну и другой недостаток Си - очень высокий порог вхождения... Первое время от гугла вообще не оторваться. Даже не знаю, сколько должно пройти времени, чтобы перестать гуглить, как сделать каждую операцию... Я бросил его раньше.
SviMik вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 19:43   8
winnorokomo
Ветеран Фонарёвки
 
Аватар для winnorokomo
 
Регистрация: 29.04.2010
Последняя активность: 28.10.2016 22:41
Сообщений: 939
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для winnorokomo с помощью ICQ
По умолчанию

Для С есть прекрасная книга, которая этот порог ломает. По сути, Библия программиста, которая на примере С разбирает вообще алгоритмы. Авторы: Керниган, Ритчи.
winnorokomo вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 19:46   9
SviMik
Завсегдатай Фонарёвки
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 18:47
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для SviMik с помощью ICQ Отправить сообщение для SviMik с помощью MSN
По умолчанию

Цитата:
Для С есть прекрасная книга, которая этот порог ломает.
И сколько страниц в этой прекрасной книге?
Для ассемблера мне хватило списка команд (4 листа) и описания регистров в даташите мк, и я сразу начал писать.
SviMik вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 22:37   10
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1076
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от Gall :
268139930

Поначалу я тоже считал, что МК лучше программировать на Ассемблере, но по мере овладевания языками перешел сначала на Си, а потом на C++. Выяснилось, что на C++ можно писать более компактный и эффективный код, нежели на ассемблере (компилятор создает машинный код лучше человека).
С++ для МК по моему это перебор. Это часом не GCCAVR?
Для МК Си более чем достаточно. На самом деле компилятор создает машинный код хуже человека, но это зависит от человека
Я "узкие" места переписываю на ассемблере, раз в 10 быстрее работает и код компактнее.

А для начинающих писать на Си для МК нужно знать десяток Си- шных операторов и десяток библиотечных функций (работа со строками и памятью) и можно писать любую программу.
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 23:02   11
lasers_yuri
Увлеченный
 
Аватар для lasers_yuri
 
Регистрация: 12.02.2010
Последняя активность: 15.02.2011 20:41
Сообщений: 272
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от AVSel :
Я "узкие" места переписываю на ассемблере, раз в 10 быстрее работает и код компактнее.
Можно пример одной-двух сишных функций и реализацию на ассемблере, которая работает в 10 раз быстрее, чем код, выданный компилятором?
__________________
lasers_yuri вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 23:08   12
lasers_mio-ra
Увлеченный
 
Аватар для lasers_mio-ra
 
Регистрация: 03.05.2010
Последняя активность: 10.09.2011 23:10
Сообщений: 359
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Вы затронули настолько древний холивар, что корни его растут еще с перфокарт, тут идиального решения нет и не будет ближайшее время. Да, компиляторы научились выдавать машинный код, работающий быстрее того, что составит человек, но не всегда, так что спор бессмысленный
lasers_mio-ra вне форума   Ответить с цитированием Вверх
Старый 15.09.2010, 23:16   13
lasers_yuri
Увлеченный
 
Аватар для lasers_yuri
 
Регистрация: 12.02.2010
Последняя активность: 15.02.2011 20:41
Сообщений: 272
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Си++ на МК вполне в тему, кстати.
Я сейчас уже в проектах сишным функциям и переменным даю имена типа hal_display_osd_cursor_position_x, то есть по смыслу аналог hal.display.cursor.position.set_x(), потому что иначе можно запутаться, какая переменная к чему относится. Но у Си++ на МК, вроде, какие-то ограничения есть, ещё руки не дошли разобраться, так что пока по старинке.
lasers_yuri вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 01:38   14
SviMik
Завсегдатай Фонарёвки
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 18:47
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для SviMik с помощью ICQ Отправить сообщение для SviMik с помощью MSN
По умолчанию

Да, холивар такой древний, что даже участвовать не буду... Просто скажу, что мне ассемблер больше нравится, и всё Толковых пособий, чтобы кратко и ёмко (ну не люблю я много читать, такой вот я) я не видел.
Цитата:
А для начинающих писать на Си для МК нужно знать десяток Си- шных операторов и десяток библиотечных функций (работа со строками и памятью) и можно писать любую программу.
А может кто-то додумался собрать эти операторы и функции для мк в одно краткое пособие (только без воды, как обычно начинаются *00-страничные книги на С++)?

За что я например люблю php - у него есть централизованная документация, где по каждой функции кратко и ёмко написано, что она делает.
У ассемблера впринципе даже одной таблицей можно это описать, даже ещё более кратко и ёмко.
А Сишные функции и операторы для меня пока тёмный лес...
SviMik вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 04:36   15
winnorokomo
Ветеран Фонарёвки
 
Аватар для winnorokomo
 
Регистрация: 29.04.2010
Последняя активность: 28.10.2016 22:41
Сообщений: 939
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Отправить сообщение для winnorokomo с помощью ICQ
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
И сколько страниц в этой прекрасной книге?
Для ассемблера мне хватило списка команд (4 листа) и описания регистров в даташите мк, и я сразу начал писать.
под рукой сейчас нет, тоненькая книжечка.
winnorokomo вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 11:39   16
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1076
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

Lightbulb

Цитата:
Посмотреть сообщение Сообщение от yuri :
Можно пример одной-двух сишных функций и реализацию на ассемблере, которая работает в 10 раз быстрее, чем код, выданный компилятором?
Пожалста

Сложение цветных 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

Приблизительно тоже будет при обработке звука(особенно многоканального).
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 11:58   17
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1076
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :

А может кто-то додумался собрать эти операторы и функции для мк в одно краткое пособие (только без воды, как обычно начинаются *00-страничные книги на С++)?
У меня Пол Лукас "С++ под рукой", правда в бумажном виде
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 12:12   18
lasers_yuri
Увлеченный
 
Аватар для lasers_yuri
 
Регистрация: 12.02.2010
Последняя активность: 15.02.2011 20:41
Сообщений: 272
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от AVSel :
Весь код в функции заменяется одной ассемблерной командой MMX
Мы же, вроде, о микроконтроллерах, не?
lasers_yuri вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 12:23   19
lasers_AVSel
Ветеран Фонарёвки
 
Аватар для lasers_AVSel
 
Регистрация: 15.02.2010
Последняя активность: 05.09.2022 18:18
Сообщений: 1076
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

Цитата:
Посмотреть сообщение Сообщение от yuri :
Мы же, вроде, о микроконтроллерах, не?
Ну хорошо, писать код не буду, на словах.
Например везде, где нужно использовать флаг переноса.
Попробуйте 64битные вычисления реализовать на Си на 8 битном проце, и сделайте код на asm, и сравните Не зря арифметические библиотеки на Асме написаны.

ПС. похоже пора отдельную ветку заводить.
lasers_AVSel вне форума   Ответить с цитированием Вверх
Старый 16.09.2010, 20:58   20
lasers_yuri
Увлеченный
 
Аватар для lasers_yuri
 
Регистрация: 12.02.2010
Последняя активность: 15.02.2011 20:41
Сообщений: 272
Сказал(а) спасибо: 0
Поблагодарили: 0 раз(а) в 0 сообщениях

По умолчанию

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

Вот что я написал на няшной сишечке:
Код:
volatile unsigned long long i,j;

int main(void)
{
	i = 0x1FFFFFFFFFFFFFFF;
	j = 0x1FFFFFFFFFFFFFFF;
	i += j;
	while(1);
	return 0;
}
Скомпилировал с оптимизацией -O2.

Вот соответствующий кусок lss-файла:

Код:
	i += j;
  e0:	80 91 68 00 	lds	r24, 0x0068
  e4:	20 91 69 00 	lds	r18, 0x0069
  e8:	70 91 6a 00 	lds	r23, 0x006A
  ec:	60 91 6b 00 	lds	r22, 0x006B
  f0:	d0 90 6c 00 	lds	r13, 0x006C
  f4:	e0 90 6d 00 	lds	r14, 0x006D
  f8:	f0 90 6e 00 	lds	r15, 0x006E
  fc:	10 91 6f 00 	lds	r17, 0x006F
 100:	90 91 60 00 	lds	r25, 0x0060
 104:	50 91 61 00 	lds	r21, 0x0061
 108:	e0 91 62 00 	lds	r30, 0x0062
 10c:	40 91 63 00 	lds	r20, 0x0063
 110:	30 91 64 00 	lds	r19, 0x0064
 114:	b0 91 65 00 	lds	r27, 0x0065
 118:	a0 91 66 00 	lds	r26, 0x0066
 11c:	00 91 67 00 	lds	r16, 0x0067
 120:	89 0f       	add	r24, r25
 122:	f1 e0       	ldi	r31, 0x01	; 1
 124:	89 17       	cp	r24, r25
 126:	08 f0       	brcs	.+2      	; 0x12a <main+0x98>
 128:	f0 e0       	ldi	r31, 0x00	; 0
 12a:	25 0f       	add	r18, r21
 12c:	91 e0       	ldi	r25, 0x01	; 1
 12e:	25 17       	cp	r18, r21
 130:	08 f0       	brcs	.+2      	; 0x134 <main+0xa2>
 132:	90 e0       	ldi	r25, 0x00	; 0
 134:	f2 0f       	add	r31, r18
 136:	51 e0       	ldi	r21, 0x01	; 1
 138:	f2 17       	cp	r31, r18
 13a:	08 f0       	brcs	.+2      	; 0x13e <main+0xac>
 13c:	50 e0       	ldi	r21, 0x00	; 0
 13e:	95 2b       	or	r25, r21
 140:	7e 0f       	add	r23, r30
 142:	21 e0       	ldi	r18, 0x01	; 1
 144:	7e 17       	cp	r23, r30
 146:	08 f0       	brcs	.+2      	; 0x14a <main+0xb8>
 148:	20 e0       	ldi	r18, 0x00	; 0
 14a:	e9 2f       	mov	r30, r25
 14c:	e7 0f       	add	r30, r23
 14e:	91 e0       	ldi	r25, 0x01	; 1
 150:	e7 17       	cp	r30, r23
 152:	08 f0       	brcs	.+2      	; 0x156 <main+0xc4>
 154:	90 e0       	ldi	r25, 0x00	; 0
 156:	29 2b       	or	r18, r25
 158:	64 0f       	add	r22, r20
 15a:	91 e0       	ldi	r25, 0x01	; 1
 15c:	64 17       	cp	r22, r20
 15e:	08 f0       	brcs	.+2      	; 0x162 <main+0xd0>
 160:	90 e0       	ldi	r25, 0x00	; 0
 162:	72 2f       	mov	r23, r18
 164:	76 0f       	add	r23, r22
 166:	21 e0       	ldi	r18, 0x01	; 1
 168:	76 17       	cp	r23, r22
 16a:	08 f0       	brcs	.+2      	; 0x16e <main+0xdc>
 16c:	20 e0       	ldi	r18, 0x00	; 0
 16e:	92 2b       	or	r25, r18
 170:	53 2f       	mov	r21, r19
 172:	5d 0d       	add	r21, r13
 174:	21 e0       	ldi	r18, 0x01	; 1
 176:	53 17       	cp	r21, r19
 178:	08 f0       	brcs	.+2      	; 0x17c <main+0xea>
 17a:	20 e0       	ldi	r18, 0x00	; 0
 17c:	69 2f       	mov	r22, r25
 17e:	65 0f       	add	r22, r21
 180:	91 e0       	ldi	r25, 0x01	; 1
 182:	65 17       	cp	r22, r21
 184:	08 f0       	brcs	.+2      	; 0x188 <main+0xf6>
 186:	90 e0       	ldi	r25, 0x00	; 0
 188:	29 2b       	or	r18, r25
 18a:	3b 2f       	mov	r19, r27
 18c:	3e 0d       	add	r19, r14
 18e:	91 e0       	ldi	r25, 0x01	; 1
 190:	3b 17       	cp	r19, r27
 192:	08 f0       	brcs	.+2      	; 0x196 <main+0x104>
 194:	90 e0       	ldi	r25, 0x00	; 0
 196:	23 0f       	add	r18, r19
 198:	51 e0       	ldi	r21, 0x01	; 1
 19a:	23 17       	cp	r18, r19
 19c:	08 f0       	brcs	.+2      	; 0x1a0 <main+0x10e>
 19e:	50 e0       	ldi	r21, 0x00	; 0
 1a0:	95 2b       	or	r25, r21
 1a2:	4a 2f       	mov	r20, r26
 1a4:	4f 0d       	add	r20, r15
 1a6:	31 e0       	ldi	r19, 0x01	; 1
 1a8:	4a 17       	cp	r20, r26
 1aa:	08 f0       	brcs	.+2      	; 0x1ae <main+0x11c>
 1ac:	30 e0       	ldi	r19, 0x00	; 0
 1ae:	59 2f       	mov	r21, r25
 1b0:	54 0f       	add	r21, r20
 1b2:	91 e0       	ldi	r25, 0x01	; 1
 1b4:	54 17       	cp	r21, r20
 1b6:	08 f0       	brcs	.+2      	; 0x1ba <main+0x128>
 1b8:	90 e0       	ldi	r25, 0x00	; 0
 1ba:	39 2b       	or	r19, r25
 1bc:	10 0f       	add	r17, r16
 1be:	31 0f       	add	r19, r17
 1c0:	80 93 68 00 	sts	0x0068, r24
 1c4:	f0 93 69 00 	sts	0x0069, r31
 1c8:	e0 93 6a 00 	sts	0x006A, r30
 1cc:	70 93 6b 00 	sts	0x006B, r23
 1d0:	60 93 6c 00 	sts	0x006C, r22
 1d4:	20 93 6d 00 	sts	0x006D, r18
 1d8:	50 93 6e 00 	sts	0x006E, r21
 1dc:	30 93 6f 00 	sts	0x006F, r19


У меня глаз к ассемблеру не слишком привычен, но на мой взгляд, это более чем приличный код для 64-хбитного суммирования. Занимает 256 байт. А как бы это написал опытный ассемблерщик? Неужели эту функцию можно впихнуть в 25 байт? Или даже в 100 байт?
lasers_yuri вне форума   Ответить с цитированием Вверх
Ответ  Создать новую тему





Copyright ©2007 - 2024, FONAREVKA.RU

Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot

Правила форума | Отказ от ответственности

Время генерации страницы 0.14125 секунды с 17 запросами