Отговори на тема  [ 85 мнения ]  Отиди на страница 1, 2, 3, 4, 5, 6  Следваща
Оптимизиране на код? 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 09, 2004 3:15 pm
Мнения: 123
Местоположение: Благоевград
Мнение Оптимизиране на код?
Здравейте , по-рано се въртеше една тема с такова загравие , но не съм й обърнал внимание , защото пишех на асемблер. От известно време използвам CCS компилатор и съм много доволен от възможностите на С-програмирането =D>. Проблема е , че написах една програмка за PIC16F628A с часовник , брояч на импулси от външен датчик и запазване на натрупаната продукция , която представляват външните импулси. Направих меню със възможност за побитово сверяване на часовника и възможност за отказ или потвърждение и тъкмо потегли и менюто за побитова настройка на брояча за продукцията и паметта свърши :-s. Въпроса е дали кода е достатъчно оптимизиран и как може да се разбере това? :-k
И дали 2к памет стигат само за това?


Пон Май 29, 2006 11:54 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Какво разбираш под "оптимизиране"? Оптимизирането върви в няколко посоки - минимален код, максимално бързодействие, минимални използвани ресурси. Тези посоки са противоположни една на друга, т.е. нещо, което е бързо, обикновено е голямо и използва много ресурси, минималното от гледна точка на код и/или ресурси е бавно.


Пон Май 29, 2006 12:22 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Коя памет свърши, бе човек? 8O

RAM-а или flash-a? Не ми се вярва да си успял да напълниш флаш-а... Какво точно съобщение изкарва компилатора? Иначе SSC от някоя си версия нататъка има някаква настройка за оптимизация, ама най-важното е по какъв начин си пишеш кода. Викането на функции, особено ако са с параметри и особено ако са вложени заема доста РАМ и бави, но пести флаш. И обратно... Прегледай си асм-а файла, след като познаваш асемблера сигурно ще се ориентираш какво и защо и откъде ти идва


Пон Май 29, 2006 12:41 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 09, 2004 3:15 pm
Мнения: 123
Местоположение: Благоевград
Мнение 
Да , много си прав. Моята гледна точка е да постигна минимален код за да мога да правя всички настройки на процесите/колкото е възможно все пак за този обем памет/ , защото в момента не ми достига памет. Не е проблем да сложа контролер с повече памет , но мисълта ми е дали кода е направен поне на средно ниво. Не искам на всяка цена да се намали размера на кода , а да си "сверя часовника" и да разбера дали заеманата памет съответства на функциите , които изпълнява устройството. А иначе бързодействие не ми трябва кой знае какво [-( , защото LCD-то си визуализира и поддържа символите , аз му изпращам нови неща през 1-2 секунди имам и 2 прекъснания - от таймер1 за часовника на всяка секунда и от TMR0 на 50mS който се пълни от външни импулси. :axe:
Съобщението , което изкарва компилатора е за недостатъчна ROM памет , което ще рече флаш паметта в моя случай.


Пон Май 29, 2006 12:42 pm
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Ползвай PIC16F648A - 4к флаш (много мразя такива съвети - мини на друг процесор, но в случая са абсолютно хардуерно съвместими с изключение на обема памет, а и почти еднакви по цена). Или мини на HI-TECH C. :D

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Пон Май 29, 2006 1:32 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
С колко не ти стига? Мисля че user interface ти го пълни, т.е. имаш много менюта, стрингове, който диспляваш и т.н. Не вярвам да си го запълнил с код.... :roll:

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Пон Май 29, 2006 3:39 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 17, 2005 5:07 pm
Мнения: 813
Местоположение: Сливен
Мнение 
PIC написа:
Съобщението , което изкарва компилатора е за недостатъчна ROM памет , което ще рече флаш паметта в моя случай.


Ако имаш много If(){} преработи ги с switch(){case.......}
ще ти спести доста ROM.

При мен стана така и с кейса си спестих към 40 процента :wink:


Пон Май 29, 2006 4:59 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Не сме ясновидци... а #org,#inline,#separate ползваш ли ги? Оттам може да става някакво объркване.


Пон Май 29, 2006 5:03 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Чет Дек 09, 2004 3:15 pm
Мнения: 123
Местоположение: Благоевград
Мнение 
За Switch - > Case сте много прави , действително е много удобен :wink: и спестява , що се отнася до стринговете те не са много , всъщност програмата е около 300 реда ще я пусна да я поразгледате и може да коментираме нещата около организирането и т.н.
В това състояние програмата работи , а проблема се появява когато понапиша малко код за настройване на алармата.


Прикачени файлове:
RTCSleep.c [12.46 KiB]
251 пъти
Вто Май 30, 2006 8:12 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
Предполагам след положените усилия да учиш С няма да ти се иска да сменяш платформата веднага.
Но за някой друг или за по нататък да си знаш ПРОТОНА генерира по спомени 30% по малко код.
Имаше една тема дето ги сравнявахме.


Вто Май 30, 2006 9:14 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Ное 01, 2005 10:23 am
Мнения: 704
Местоположение: Limerick, Ireland
Мнение 
rumen написа:
Предполагам след положените усилия да учиш С няма да ти се иска да сменяш платформата веднага.
Но за някой друг или за по нататък да си знаш ПРОТОНА генерира по спомени 30% по малко код.
Имаше една тема дето ги сравнявахме.


Зависи от компилатора и от оптимизациите.

Както @Реконструктор каза:
Цитат:
... Оптимизирането върви в няколко посоки - минимален код, максимално бързодействие, минимални използвани ресурси. Тези посоки са противоположни една на друга, т.е. нещо, което е бързо, обикновено е голямо и използва много ресурси, минималното от гледна точка на код и/или ресурси е бавно.

Така че със сигурност можеш да си настроиш компилатора да оптимизира кода за сметка на бързодействието. Но всичко зависи от нуждите на конкретното положение.

_________________
"640 К са достатъчни на всеки за всичко."
Бил Гейтс


Вто Май 30, 2006 9:29 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
PIC написа:
Да , много си прав. Моята гледна точка е да постигна минимален код за да мога да правя всички настройки на процесите/колкото е възможно все пак за този обем памет/ , защото в момента не ми достига памет. Не е проблем да сложа контролер с повече памет , но мисълта ми е дали кода е направен поне на средно ниво. Не искам на всяка цена да се намали размера на кода , а да си "сверя часовника" и да разбера дали заеманата памет съответства на функциите , които изпълнява устройството. А иначе бързодействие не ми трябва кой знае какво [-( , защото LCD-то си визуализира и поддържа символите , аз му изпращам нови неща през 1-2 секунди имам и 2 прекъснания - от таймер1 за часовника на всяка секунда и от TMR0 на 50mS който се пълни от външни импулси. :axe:
Съобщението , което изкарва компилатора е за недостатъчна ROM памет , което ще рече флаш паметта в моя случай.


Ами ако паметта ти е заета, примерно, с графични данни за дисплея, няма много място за оптимизации. Прави опити за някакви пакети, примерно, ако имаш стойности до 15, няма нужда да хабиш за тях цял байт, използвай един за 2 стойности.


Вто Май 30, 2006 9:55 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
http://mcu-bg.com/mcu_site/viewtopic.ph ... c&start=15

Ето я темата хем генерира по малко код хем е по бърз.
Накратко по-подходящ за микроконтролери.

Явно С -то в стремежа да е универсално му се губи оптималноста.
И да си кажа преди да сте ме наплюли става въпрос за програмиране на микроконтролери
(кадето ресурсите са много кът) а не за системно програмиране.(кадето предимството на С е очевидно)


Вто Май 30, 2006 10:14 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Стига бе хора! Вярно че компилатора си е само инструмент, ама все пак тоя Протон си е шибан и гнусен Бейсик :twisted: И струва майка си баща си си на всичкото отгоре. Като е толкова добър компилатор, защо не са направили и един нормален С компилатор? Иначе какво? Ако решиш да минеш на Атмел, МСП, или нещо друго? За тях бейсик няма - за щастие - или поне не знам да има. Виж ИАР и ГЦЦ ве4е има за почти всичко. Ето затова се пише на С. Малко като затворен кръг - правят се С компилатори, защото хората предпочитат да пишат на С, а те предпочитат да пишат на С защото има компилатори и камари готов код точно на С. Ама какво да направим...факт.


Вто Май 30, 2006 1:42 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение 
За всичко си прав.
Но това не променя факта че кода генериран от ПРОТОНА е най оптимален.
Каквото всъщност е и заглавието на темата.


Вто Май 30, 2006 3:31 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 85 мнения ]  Отиди на страница 1, 2, 3, 4, 5, 6  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни