Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Оптимизиране на код?
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2426
Страница 1 от 6

Автор:  PIC [ Пон Май 29, 2006 11:54 am ]
Заглавие:  Оптимизиране на код?

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

Автор:  Реконструктор [ Пон Май 29, 2006 12:22 pm ]
Заглавие: 

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

Автор:  setoy [ Пон Май 29, 2006 12:41 pm ]
Заглавие: 

Коя памет свърши, бе човек? 8O

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

Автор:  PIC [ Пон Май 29, 2006 12:42 pm ]
Заглавие: 

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

Автор:  evc [ Пон Май 29, 2006 1:32 pm ]
Заглавие: 

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

Автор:  nickich [ Пон Май 29, 2006 3:39 pm ]
Заглавие: 

С колко не ти стига? Мисля че user interface ти го пълни, т.е. имаш много менюта, стрингове, който диспляваш и т.н. Не вярвам да си го запълнил с код.... :roll:

Автор:  valioman [ Пон Май 29, 2006 4:59 pm ]
Заглавие: 

PIC написа:
Съобщението , което изкарва компилатора е за недостатъчна ROM памет , което ще рече флаш паметта в моя случай.


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

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

Автор:  setoy [ Пон Май 29, 2006 5:03 pm ]
Заглавие: 

Не сме ясновидци... а #org,#inline,#separate ползваш ли ги? Оттам може да става някакво объркване.

Автор:  PIC [ Вто Май 30, 2006 8:12 am ]
Заглавие: 

За Switch - > Case сте много прави , действително е много удобен :wink: и спестява , що се отнася до стринговете те не са много , всъщност програмата е около 300 реда ще я пусна да я поразгледате и може да коментираме нещата около организирането и т.н.
В това състояние програмата работи , а проблема се появява когато понапиша малко код за настройване на алармата.

Прикачени файлове:
RTCSleep.c [12.46 KiB]
250 пъти

Автор:  rumen [ Вто Май 30, 2006 9:14 am ]
Заглавие: 

Предполагам след положените усилия да учиш С няма да ти се иска да сменяш платформата веднага.
Но за някой друг или за по нататък да си знаш ПРОТОНА генерира по спомени 30% по малко код.
Имаше една тема дето ги сравнявахме.

Автор:  nickich [ Вто Май 30, 2006 9:29 am ]
Заглавие: 

rumen написа:
Предполагам след положените усилия да учиш С няма да ти се иска да сменяш платформата веднага.
Но за някой друг или за по нататък да си знаш ПРОТОНА генерира по спомени 30% по малко код.
Имаше една тема дето ги сравнявахме.


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

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

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

Автор:  Реконструктор [ Вто Май 30, 2006 9:55 am ]
Заглавие: 

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


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

Автор:  rumen [ Вто Май 30, 2006 10:14 am ]
Заглавие: 

http://mcu-bg.com/mcu_site/viewtopic.ph ... c&start=15

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

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

Автор:  setoy [ Вто Май 30, 2006 1:42 pm ]
Заглавие: 

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

Автор:  rumen [ Вто Май 30, 2006 3:31 pm ]
Заглавие: 

За всичко си прав.
Но това не променя факта че кода генериран от ПРОТОНА е най оптимален.
Каквото всъщност е и заглавието на темата.

Страница 1 от 6 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/