Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 23.05.2009, 21:29   #581
ivashka_1
Частый гость
 
Регистрация: 05.05.2009
Сообщений: 29
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ivashka_1 на пути к лучшему
По умолчанию

Мда ... четыре книги перекопал, нашел один пример и тот работать отказался ... а до Кернигана и Ричи руки не дошли!
Всё, ушел читать книгу .
Реклама:
ivashka_1 вне форума  
Непрочитано 23.05.2009, 23:54   #582
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Приведите оба листинга асма .
С одним и тем же количеством разрядов .
Не может такого быть чтобы функция с делением была короче.
И причем здесь Паша Гайдук ?
Код пишете то вы а не он.И на счет ника это было последнее предупреждение.
Лучше уж КОШМАР .
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 24.05.2009, 00:09   #583
ivashka_1
Частый гость
 
Регистрация: 05.05.2009
Сообщений: 29
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
ivashka_1 на пути к лучшему
По умолчанию

У меня не ассемблер ... я на С пытаюсь писать.

void Display_init()
{
//первый вариант
// Num1=Num2=0;
// while (Number ›= 100)
// {
// Number -= 100;
// Num1++;
// }
// while (Number ›= 10)
// {
// Number -= 10;
// Num2++;
// }
// Num3 = Number;
// Disp5 = Dig[Num1];
// Disp6 = Dig[Num2];
// Disp7 = Dig[Num3];
// 2 вариант
// Disp5[(Number/100)%10]; //сотни
// Disp6[(Number/10)%10]; //десятки
// Disp7[Number%10]; //единицы

}

Соответственно значки коментариев убрать по желанию
ivashka_1 вне форума  
Непрочитано 24.05.2009, 03:15   #584
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию

Код:
void display(void)
{ 
  lcd_gotoxy(0,1);
  lcd_putchar (Set_Hour/10%10+0x30);
  lcd_putchar (Set_Hour%10+0x30);
  lcd_putchar (delim[Set_Sec%2]);
  lcd_putchar (Set_Mins/10%10+0x30);
  lcd_putchar (Set_Mins%10+0x30);
  lcd_putsf (" ");
  lcd_putchar ((Set_Day/10)%10+0x30);
  lcd_putchar (Set_Day%10+0x30);
  lcd_putsf ("/");
  lcd_putchar ((Set_Mon/10)%10+0x30);
  lcd_putchar (Set_Mon%10+0x30);
  lcd_putsf ("/");
  lcd_putchar ((Set_Year/1000)%10+0x30);
  lcd_putchar ((Set_Year/100)%10+0x30);
  lcd_putchar ((Set_Year/10)%10+0x30);
  lcd_putchar (Set_Year%10+0x30);
}
Program size: 6392 words (12784 bytes), 78,0% of FLASH
Код:
void display(void)
{ 
  lcd_gotoxy(0,1);
  itoa2(Set_Hour);
  lcd_putchar (asc[2]);
  lcd_putchar (asc[3]);
  lcd_putchar (delim[Set_Sec%2]);
  itoa2(Set_Mins);
  lcd_putchar (asc[2]);
  lcd_putchar (asc[3]);
  lcd_putsf (" ");
  itoa2(Set_Day);
  lcd_putchar (asc[2]);
  lcd_putchar (asc[3]);
  lcd_putsf ("/");
  itoa2(Set_Mon);
  lcd_putchar (asc[2]);
  lcd_putchar (asc[3]);
  lcd_putsf ("/");
  itoa2(Set_Year);
  lcd_putchar (asc[0]);
  lcd_putchar (asc[1]);
  lcd_putchar (asc[2]);
  lcd_putchar (asc[3]);
}
Program size: 6404 words (12808 bytes), 78,2% of FLASH

P.S. Не пойму, что с ником. Хотелось на русском Юра, т.к. yuriy, yurij, yuri - весь интернет переполнен и с цифровыми хвостами тоже, а тут печатными буквами ЮРА или IOPA и я уже с этим ником лет 5-6, если не больше. Никаких проблем не было.
IOPA4 вне форума  
Непрочитано 24.05.2009, 03:26   #585
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию

Код:
_itoa2:
; 0000 0073   int step[]={1000,100,10,1};
; 0000 0074   unsigned int temp,val;
; 0000 0075   unsigned char i,atemp;
; 0000 0076   val=binval;
	SBIW R28,8
	LDI  R30,LOW(232)
	ST   Y,R30
	LDI  R30,LOW(3)
	STD  Y+1,R30
	LDI  R30,LOW(100)
	STD  Y+2,R30
	LDI  R30,LOW(0)
	STD  Y+3,R30
	LDI  R30,LOW(10)
	STD  Y+4,R30
	LDI  R30,LOW(0)
	STD  Y+5,R30
	LDI  R30,LOW(1)
	STD  Y+6,R30
	LDI  R30,LOW(0)
	STD  Y+7,R30
	CALL __SAVELOCR6
;	binval -› Y+14
;	step -› Y+6
;	temp -› R16,R17
;	val -› R18,R19
;	i -› R21
;	atemp -› R20
	__GETWRS 18,19,14
; 0000 0077   for (i=0; i‹4; i++)
	LDI  R21,LOW(0)
_0x39:
	CPI  R21,4
	BRSH _0x3A
; 0000 0078   {
; 0000 0079     temp=step[i];
	MOV  R30,R21
	LDI  R31,0
	MOVW R26,R28
	ADIW R26,6
	LSL  R30
	ROL  R31
	ADD  R26,R30
	ADC  R27,R31
	LD   R16,X+
	LD   R17,X
; 0000 007A     atemp='0';
	LDI  R20,LOW(48)
; 0000 007B     while(val ›= temp)
_0x3B:
	__CPWRR 18,19,16,17
	BRLO _0x3D
; 0000 007C     {
; 0000 007D       atemp++;
	SUBI R20,-1
; 0000 007E       val-=temp;
	__SUBWRR 18,19,16,17
; 0000 007F     }
	RJMP _0x3B
_0x3D:
; 0000 0080     asc[i]=atemp;
	MOV  R30,R21
	LDI  R31,0
	SUBI R30,LOW(-_asc)
	SBCI R31,HIGH(-_asc)
	ST   Z,R20
; 0000 0081   }
	SUBI R21,-1
	RJMP _0x39
_0x3A:
; 0000 0082 }
	CALL __LOADLOCR6
	ADIW R28,16
	RET
;
IOPA4 вне форума  
Непрочитано 24.05.2009, 09:53   #586
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Надо выкладывать асм процедур . Ваша статистика всей программы ни о чем не говорит.
Компилируйте свое :
Код:
 Disp5[(Number/100)%10]; //сотни 
  Disp6[(Number/10)%10];  //десятки 
  Disp7[Number%10];      //единицы
и
Код:
unsigned char asc[3]; 
void itoa2(unsigned int binval) 
{ 
int step[]={100,10,1}; 
unsigned int temp,val; 
unsigned char i,atemp; 
val=binval; 
for (i=0; i‹3; i++) 
{ 
  temp=step[i]; 
  atemp='0'; 
  while(val ›= temp) 
  { 
   atemp++; 
   val-=temp; 
  } 
  asc[i]=atemp; 
} 
}
Уберите свою программу и сделайте вывод на экран одного 3х значного числа.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 24.05.2009, 12:41   #587
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию

Почему, говорит: листинг программы один и тот же, но с введением новой функции itoa2 код увеличился, значит процессору нужно больше тактов на выполнение программы. К стати, на том форуме есть сноска на статью "Умножение без умножения", так автор ясно пишет, что современный компилятор самостоятельно находит слабые места при оптимизации и производит нужные действия. Например деление на 2, 4 и т.д., а бездумная борьба за "скорость" может привести не к понимаемости кода другими программистами.
И вообще, человек хотел написать вольтметр на атмеге32 - вывести на экран 3 циферки, 2-3% обьема памяти МК. Только начал программировать. Зачем так глубоко сразу лезть в дебри и биться об стенку над оптимизацией кода? Обнаружит слабое место - например: цифры будут помигивать, догадается оптимизировать код, не догадается - спросит.
IOPA4 вне форума  
Непрочитано 24.05.2009, 16:11   #588
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от IOPA4
И вообще, человек хотел написать вольтметр на атмеге32 - вывести на экран 3 циферки, 2-3% обьема памяти МК. Только начал программировать. Зачем так глубоко сразу лезть в дебри и биться об стенку над оптимизацией кода? Обнаружит слабое место - например: цифры будут помигивать, догадается оптимизировать код, не догадается - спросит.
А тут сложно советовать.. ведь каждый подходит со своей точки зрения...
Всё зависит от подхода прграммиста, и от того что хочет получить программист...

Если просто поигратся.. поучится...получить просто рабочий код то можно писать КАК УГОДНО.. ЛИШЬ БЫ РАБОТАЛО...

А если подходить серьёзно, писать функцию которая потом будет неоднократно применятся в дальнейшем.. то лучше потратить время и вылизать её по скорости и размеру, что бы в дальнейшем к ней не возрвщаться... а быть увереным что в ней уже нечего делать...
picavr вне форума  
Непрочитано 24.05.2009, 23:01   #589
IOPA4
Почётный гражданин KAZUS.RU
 
Аватар для IOPA4
 
Регистрация: 07.05.2008
Адрес: Мурманск
Сообщений: 1,300
Сказал спасибо: 461
Сказали Спасибо 526 раз(а) в 273 сообщении(ях)
IOPA4 на пути к лучшему
По умолчанию

Сообщение от picavr

А тут сложно советовать.. ведь каждый подходит со своей точки зрения...
Всё зависит от подхода прграммиста, и от того что хочет получить программист...

Если просто поигратся.. поучится...получить просто рабочий код то можно писать КАК УГОДНО.. ЛИШЬ БЫ РАБОТАЛО...

А если подходить серьёзно, писать функцию которая потом будет неоднократно применятся в дальнейшем.. то лучше потратить время и вылизать её по скорости и размеру, что бы в дальнейшем к ней не возрвщаться... а быть увереным что в ней уже нечего делать...
1. С первым согласен на все 100
2. Здесь конкретный случай, человек впервые прикоснулся к МК и СИ.... и начал вылизывать функции до совершенства, даже не получив первого результата из примера с учебника. М-да. Я люблю тоже совершенство. Если на плате есть хоть одна не запланированная перемычка - я плату переделываю. И так до ... Со своим проектом "Астротаймер" я тоже вожусь уже не первый месяц. Просил на форуме знатоков помочь оптимизировать код - одни упреки: "Ты куда прешь", "Не суй свое рыло в то, что не знаешь". Перепробовал все варианты. Узнал, что МК не поддерживает команды деления. Попытался перевести всю матемматику к умножению - код вырос. Заменял деление сдвигом - опять вырос. Видно программисты CVAVR уже до меня все вылизали до совершенства. Да и как бы тогда выполнялось деление? Не делят же они втупую. Так, что вывод:
1. Человек убил 3 дня своего времени, не получив никакого результата, вылизывая то, что даже еще не "родил".
2. Мы убили три дня в бесполезных дискуссиях и тоже без результата.
А всего лишь нужна была помощь... обидно. Я ее тоже просил, но это был глас вопиющего... Чувствуется, что ребята волокут, но выбрана роль критиков. Жаль. И еще нерушимое братство, чуть пытаешься высунуться, сразу травят сворой.
IOPA4 вне форума  
Непрочитано 24.05.2009, 23:29   #590
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Ну если желаете натыкатся на пройденые нами грабли , всегда пожалуйста ...
Никогда не пойму тех кому помогают а они в ответ еше и огрызаются .
И насчет ника ,лучше сменить пока не поздно.
__________________
Осторожно , злой кот
dosikus вне форума  
Закрытая тема

Закладки

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Видео уроки (flash) Proteus 7.1 fmssp Proteus 5 13.08.2007 03:56
AVR уроки Рюмика chipic128 Proteus, KiCAD и другие ECAD 9 07.03.2007 21:46
уроки от LABCENTRE(PIC12F675+C) dosikus Микроконтроллеры, АЦП, память и т.д 22 09.10.2006 10:16


Часовой пояс GMT +4, время: 14:31.


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