|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:20 pm
| Автор |
Съобщение |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Оптимизиране на код?
Здравейте , по-рано се въртеше една тема с такова загравие , но не съм й обърнал внимание , защото пишех на асемблер. От известно време използвам CCS компилатор и съм много доволен от възможностите на С-програмирането  . Проблема е , че написах една програмка за PIC16F628A с часовник , брояч на импулси от външен датчик и запазване на натрупаната продукция , която представляват външните импулси. Направих меню със възможност за побитово сверяване на часовника и възможност за отказ или потвърждение и тъкмо потегли и менюто за побитова настройка на брояча за продукцията и паметта свърши  . Въпроса е дали кода е достатъчно оптимизиран и как може да се разбере това?
И дали 2к памет стигат само за това?
|
| Пон Май 29, 2006 11:54 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Какво разбираш под "оптимизиране"? Оптимизирането върви в няколко посоки - минимален код, максимално бързодействие, минимални използвани ресурси. Тези посоки са противоположни една на друга, т.е. нещо, което е бързо, обикновено е голямо и използва много ресурси, минималното от гледна точка на код и/или ресурси е бавно.
|
| Пон Май 29, 2006 12:22 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Коя памет свърши, бе човек?
RAM-а или flash-a? Не ми се вярва да си успял да напълниш флаш-а... Какво точно съобщение изкарва компилатора? Иначе SSC от някоя си версия нататъка има някаква настройка за оптимизация, ама най-важното е по какъв начин си пишеш кода. Викането на функции, особено ако са с параметри и особено ако са вложени заема доста РАМ и бави, но пести флаш. И обратно... Прегледай си асм-а файла, след като познаваш асемблера сигурно ще се ориентираш какво и защо и откъде ти идва
|
| Пон Май 29, 2006 12:41 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
Да , много си прав. Моята гледна точка е да постигна минимален код за да мога да правя всички настройки на процесите/колкото е възможно все пак за този обем памет/ , защото в момента не ми достига памет. Не е проблем да сложа контролер с повече памет , но мисълта ми е дали кода е направен поне на средно ниво. Не искам на всяка цена да се намали размера на кода , а да си "сверя часовника" и да разбера дали заеманата памет съответства на функциите , които изпълнява устройството. А иначе бързодействие не ми трябва кой знае какво  , защото LCD-то си визуализира и поддържа символите , аз му изпращам нови неща през 1-2 секунди имам и 2 прекъснания - от таймер1 за часовника на всяка секунда и от TMR0 на 50mS който се пълни от външни импулси.
Съобщението , което изкарва компилатора е за недостатъчна ROM памет , което ще рече флаш паметта в моя случай.
|
| Пон Май 29, 2006 12:42 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Ползвай PIC16F648A - 4к флаш (много мразя такива съвети - мини на друг процесор, но в случая са абсолютно хардуерно съвместими с изключение на обема памет, а и почти еднакви по цена). Или мини на HI-TECH C. 
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Пон Май 29, 2006 1:32 pm |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
С колко не ти стига? Мисля че user interface ти го пълни, т.е. имаш много менюта, стрингове, който диспляваш и т.н. Не вярвам да си го запълнил с код.... 
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Пон Май 29, 2006 3:39 pm |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
Ако имаш много If(){} преработи ги с switch(){case.......}
ще ти спести доста ROM.
При мен стана така и с кейса си спестих към 40 процента 
|
| Пон Май 29, 2006 4:59 pm |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Не сме ясновидци... а #org,#inline,#separate ползваш ли ги? Оттам може да става някакво объркване.
|
| Пон Май 29, 2006 5:03 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
За Switch - > Case сте много прави , действително е много удобен  и спестява , що се отнася до стринговете те не са много , всъщност програмата е около 300 реда ще я пусна да я поразгледате и може да коментираме нещата около организирането и т.н.
В това състояние програмата работи , а проблема се появява когато понапиша малко код за настройване на алармата.
|
| Вто Май 30, 2006 8:12 am |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
Предполагам след положените усилия да учиш С няма да ти се иска да сменяш платформата веднага.
Но за някой друг или за по нататък да си знаш ПРОТОНА генерира по спомени 30% по малко код.
Имаше една тема дето ги сравнявахме.
|
| Вто Май 30, 2006 9:14 am |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Зависи от компилатора и от оптимизациите. Както @Реконструктор каза:
Така че със сигурност можеш да си настроиш компилатора да оптимизира кода за сметка на бързодействието. Но всичко зависи от нуждите на конкретното положение.
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Вто Май 30, 2006 9:29 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ами ако паметта ти е заета, примерно, с графични данни за дисплея, няма много място за оптимизации. Прави опити за някакви пакети, примерно, ако имаш стойности до 15, няма нужда да хабиш за тях цял байт, използвай един за 2 стойности.
|
| Вто Май 30, 2006 9:55 am |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
http://mcu-bg.com/mcu_site/viewtopic.ph ... c&start=15
Ето я темата хем генерира по малко код хем е по бърз.
Накратко по-подходящ за микроконтролери.
Явно С -то в стремежа да е универсално му се губи оптималноста.
И да си кажа преди да сте ме наплюли става въпрос за програмиране на микроконтролери
(кадето ресурсите са много кът) а не за системно програмиране.(кадето предимството на С е очевидно)
|
| Вто Май 30, 2006 10:14 am |
|
 |
|
setoy
Ранг: Почетен член
Регистриран на: Пет Фев 17, 2006 9:17 am Мнения: 765 Местоположение: Стара Загора
|
Стига бе хора! Вярно че компилатора си е само инструмент, ама все пак тоя Протон си е шибан и гнусен Бейсик  И струва майка си баща си си на всичкото отгоре. Като е толкова добър компилатор, защо не са направили и един нормален С компилатор? Иначе какво? Ако решиш да минеш на Атмел, МСП, или нещо друго? За тях бейсик няма - за щастие - или поне не знам да има. Виж ИАР и ГЦЦ ве4е има за почти всичко. Ето затова се пише на С. Малко като затворен кръг - правят се С компилатори, защото хората предпочитат да пишат на С, а те предпочитат да пишат на С защото има компилатори и камари готов код точно на С. Ама какво да направим...факт.
|
| Вто Май 30, 2006 1:42 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 25, 2004 3:42 pm Мнения: 913
|
За всичко си прав.
Но това не променя факта че кода генериран от ПРОТОНА е най оптимален.
Каквото всъщност е и заглавието на темата.
|
| Вто Май 30, 2006 3:31 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|