Отговори на тема  [ 47 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща
C за PIC18, използващо хардуерното му умножение? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Добре де, след като XC8 толкова си може, защо не използваш C18 ? Работи под MPLABX, под Linux също, не се сещам за нещо сериозно като бъг в него, което да ме накара да го зарежа и да премина на XC8.

А за PID-а, също гледам ако е възможно да не го правя в прекъсване. Даже имам програми в които въобще не използвам прекъсванията.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Нед Фев 03, 2013 4:24 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
¶ написа:
Добре де, след като XC8 толкова си може, защо не използваш C18 ?


Защото на C18 същото използва 2 пъти повече RAM и малко под 2 пъти повече ROM. Вероятно е въпрос на някакви настройки или библиотеки, но това, дето видях компилирайки програмата на C18, сравнявайки го с XC8, никак не ме зарадва. Отделно дето на C18 изходния асемблерски код е в пъти по-неразбираем, защото с променливите е пълна мешавина. Вероятно въпросното aliasing е отговорно за това. Ще пробвам.


Нед Фев 03, 2013 12:58 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Не напразно ти постнах листинга на една и съща функция при 4-ри различни настройки на C18, най-малко RAM харчи при Default Storage Class=overlay или static. Но по подразбиране при C18 Default Storage Classs = auto, което ще рече че временните променливи във функциите ги заделя в стека, това харчи много ROM, от което и изходния код става неразбираем, защото навсякъде за адресация на променливите използва индиректни адресации с FSRx ( PLUSWx, POSTINCx, POSTDECx и т.н. ). Като превключиш Default Storage Class = static нещата си идват на мястото.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Нед Фев 03, 2013 4:13 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Опитах. И това не е. Small memory model въобще не ми дава да сложа - казва че не може да побере едно-друго, а променайки Default storage на static не промени твърде много по отношение на паметта, но намали малко размера на кода. Те и без друго повечето ми променливи са обявени като глобални и статични. Функции кой-знае какви не викам. Имам 2 подпрограми за записване и четене на група параметри в EEPROM-а, които викат eeprom_read и eeprom_write, main процедурата, и ISR-то на интеръптите с висок приоритет.


Нед Фев 03, 2013 6:46 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Видях го какво е. C18-ката си слага 256 байта стек. XC8-цата - 11 байта. И от там става съответното мазало и с RAM-а, и с флаша.

Знаете ли лесен начин да сменя размера на стека, освен през линкер скрипт?


Нед Фев 03, 2013 11:15 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
PIC18 по презумпция е правен да работи със статични променливи. Такава си му е архитектурата. Затова и творбите на компилатора изглеждат..... странни понякога. Аз с тия процесори работя по дефоулт на статик, а ако някъде не бързам изрично я правя ауто. Сбъркано е малко, погледнато през призмата на нормален програмист, ама тука е така. Не ми ли стига РАМ-а за всичко статик, значи просто приложението не е за ПИК18 :)

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Фев 04, 2013 1:13 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Цецо написа:
PIC18 по презумпция е правен да работи със статични променливи. Такава си му е архитектурата. Затова и творбите на компилатора изглеждат..... странни понякога. Аз с тия процесори работя по дефоулт на статик, а ако някъде не бързам изрично я правя ауто. Сбъркано е малко, погледнато през призмата на нормален програмист, ама тука е така. Не ми ли стига РАМ-а за всичко статик, значи просто приложението не е за ПИК18 :)


Слагах и всичко static - все тая. Стека си го има и е 256 байта. Намалих г през линкер скрипта до 16 байта и хавата стана малко по-човешка откъм ползване на RAM. В смисъл, разликата между C18 i XC8 стана минимална. Обаче проблема с кода си остава - на C18 е със 70% по-дълъг.

Изглежда в XC8 все пак има нещо. Не случайно компилира в пъти по-бавно. Явно анализира колко стек му трябва, кои променливи се ползват най-често, за да ги сложи най-долу в паметта, и т.н. Което е нож с две остриета де - ако точно в определен проект работи добре, в друг може да прави не съвсем каквото искаш.


Пон Фев 04, 2013 1:52 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: C за PIC18, използващо хардуерното му умножение?
70% е абсурд, дай някой примерен сорс, ще ти върна листинга от C18, пък ти постни листинга от Hi-Tecc XC8 :-)

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пон Фев 04, 2013 4:02 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
sparkybg написа:
Слагах и всичко static - все тая. Стека си го има и е 256 байта. Намалих г през линкер скрипта до 16 байта и хавата стана малко по-човешка откъм ползване на RAM. В смисъл, разликата между C18 i XC8 стана минимална. Обаче проблема с кода си остава - на C18 е със 70% по-дълъг.

Изглежда в XC8 все пак има нещо. Не случайно компилира в пъти по-бавно. Явно анализира колко стек му трябва, кои променливи се ползват най-често, за да ги сложи най-долу в паметта, и т.н. Което е нож с две остриета де - ако точно в определен проект работи добре, в друг може да прави не съвсем каквото искаш.


Начи размера на стека се определя еднозначно от линкер скрипта, а не от това колко ползваш и колко не.

Иначе незнам що на хитека е по-малък кода, по мои наблюдения, микрочипския компилатор се справя добре, като му нагодиш променливите и оптимизациите, ама хитек не съм виждал на живо. Но просто е абсурд, да е чак толкова по-умен....Пусни му дизасемблера и виж къде се омазват нещата.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Фев 04, 2013 6:25 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Цецо написа:
Начи размера на стека се определя еднозначно от линкер скрипта, а не от това колко ползваш и колко не.


В C18 е от линкер скрипта. XC8 си го определя автоматично. XC8 не е Hi-Tech. Води се микрочипско, макар да е "почти" Hi-Tech.

Цецо написа:
Иначе незнам що на хитека е по-малък кода, по мои наблюдения, микрочипския компилатор се справя добре, като му нагодиш променливите и оптимизациите, ама хитек не съм виждал на живо. Но просто е абсурд, да е чак толкова по-умен....Пусни му дизасемблера и виж къде се омазват нещата.


Не казвам че е по-умен кой-знае колко. Освен да анализира кода и най-често използваните променливи да слага най-долу, в първите 0x60 байтове. Така най-често използваните променливи са постоянно достъпни. Останалите са по другите банки. На C18 това вероятно трябва да му го зададеш на ръка.


Пон Фев 04, 2013 6:54 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Ами мисля, че и на C18 можеш да го организираш това, можеш да ги навреш в аксес банката. Ама едва ли е само това....

Ама това дето казваш, че XC8 автоматично си калкулира стека.... това ще да е бая умен компилатор, ама едва ли. :) Ще му трябва бая ясновидски възможности за да го направи това.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Фев 04, 2013 8:12 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
Цецо написа:
...това ще да е бая умен компилатор, ама едва ли.


Умен или тъп - смята си го. Току що пробвах. Смениш ли някоя локална променлива в някоя подпрограма на static, размера на стека автоматично се променя. В map файла има статистики кое от кое се вика и колко стек иска, колко нива от хардуерния стех ползва и т.н. Очевидно прави някакви анализи по случая. Ако стека е сложен в ниското, това значи постоянен достъп до всичкилокални променливи, което пък значи сериозно смаляване на кода, дето ги ползва.

Впрочем, има си отделен софтуерен стек за прекъсванията, и отделен за другите подпрограми. Размера на стека за прекъсванията е точно колкото е размера на локалните променливи в ISR-то.


Пон Фев 04, 2013 9:20 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение Re: C за PIC18, използващо хардуерното му умножение?
XC8 си е точно Hi-Tech компилатора PICC18, заглавните файлове са същите, библиотеките, има режим емулация на C18 и т.н.

Microchip C18 компилатора има един сериозен недостатък - ако използваш техните библиотеки, примерно printf, вкарва в кода почти цялата библиотека, въпреки че в конкретния случай няма нужда от всичките им подпрограми. Това увеличава драстично кода.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Фев 05, 2013 5:00 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение Re: C за PIC18, използващо хардуерното му умножение?
sparkybg написа:
Цецо написа:
...това ще да е бая умен компилатор, ама едва ли.


Умен или тъп - смята си го. Току що пробвах. Смениш ли някоя локална променлива в някоя подпрограма на static, размера на стека автоматично се променя. В map файла има статистики кое от кое се вика и колко стек иска, колко нива от хардуерния стех ползва и т.н. Очевидно прави някакви анализи по случая. Ако стека е сложен в ниското, това значи постоянен достъп до всичкилокални променливи, което пък значи сериозно смаляване на кода, дето ги ползва.

Впрочем, има си отделен софтуерен стек за прекъсванията, и отделен за другите подпрограми. Размера на стека за прекъсванията е точно колкото е размера на локалните променливи в ISR-то.


не вярвам.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Фев 05, 2013 10:29 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение Re: C за PIC18, използващо хардуерното му умножение?
А бе, на този човек няма ли кой да му каже, че щом не си е направил труда да разбере "идеологията" :) на PIC12,16 и 18 сериите, да мине направо на PIC24 примерно. Явно е писал за AVR и ги е разбрал и сега му е трудно да възприеме 8-битовите пикове. :)


Вто Фев 05, 2013 10:45 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 47 мнения ]  Отиди на страница Предишна  1, 2, 3, 4  Следваща

Кой е на линия

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


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

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