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

C + + за инструкциите на Pic
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=49
Страница 1 от 5

Автор:  sirius_alpha [ Вто Окт 12, 2004 9:01 pm ]
Заглавие:  C + + за инструкциите на Pic

Начинаещ съм в тази област на електрониката затова се надявам въпроса ми да не ви издразни много,а той е свързан с това ако може да ми препоръчате подходящ компилатор на C++ за инструкциите на PIC и повече информация за програмирането на PIC s езика C++ който ми е далеч по-добре познат от асемблер за пик . . .

Не се изразих особено добре, но се надявам да ме разберете . . .

Автор:  Цецо [ Сря Окт 13, 2004 9:36 am ]
Заглавие: 

Абе аз добре те разбрах ама:

1. Откажи се от ++, и мисли за "чисто" С. Тогава ще те уредим с компилатор.
2. Смени пика с нещо по-мощно. Ако си наясно с процеса на компилиране на обектните езици, ще знеш, че кода пройзведен от тях е доста тежък (особенно като говорим за стек и хип).

Иначе ефекта ще е като да закачин ремарке от камион на Polo. Не става. Иначе за пик има и С++, даже и Бейсик ама работа ли искаш да вършил или да светкаш светодиоди?

Автор:  Гост [ Сря Окт 13, 2004 10:19 am ]
Заглавие: 

Ñåãà êàòî ñå çàìèñëÿ îò òàçè ãëåäíà òî÷êà ñè ïðàâ íàèñòèíà îáåêòíî îðèåíòèðàíèòå åçèöè ñà ïî òåæêè ,ìî òúé êàòî ñúì âñå îùå â íà÷àëîòî ìè ñå èñêà äà çàïî÷íà ñ íåùî ïî-åëåìåíòàðíî,çàòîâà ñå çàõâàíàõ ñ pic,àêî ìîæåø äà ìè ïðåäëîæèø íÿêàêúâ ïî-äîáúð âàðèí ùå ñúì òè áëàãîäàðåí . . . :)

Автор:  sirius_alpha [ Сря Окт 13, 2004 10:25 am ]
Заглавие: 

Мога да науча асемблерските инструкции ,няма да ми е проблем,но далеч по-лесно би се работило на език като C . . . :wink:

Автор:  Цецо [ Сря Окт 13, 2004 11:12 am ]
Заглавие: 

PIC+C е едно добро решение (но без ++). Ако искаш за 16та - серия колегите ще помогнат. За 18та и аз имам компилатор, ще ти го дам. Зависи дали си решил на сериозно да се занимаваш. Смяташ ли да даваш пари за развоен хардуер? Най - евтния вариант е PIC16F87X плюс сериен програматор (има го из нета). Оптималния според мен е PIC18F452 + ICD2 (общо към 100$). Това плюс С компилатора е абсолютно достатъчно и за доста сериозна работа.

А ако не искаш ПИК, може и AVR - там Реконструктора е силен, а и развоя май излиза по-евтино (незнам хардуерния дебъгинг как се прави там). :)

Автор:  sirius_alpha [ Сря Окт 13, 2004 11:38 am ]
Заглавие: 

Ами вече си имам един Propic 2(чух че "про" - то нещо му куца ,но когато го тествах с един PIC16F84A ,не даде никакви грешки поне при програмирането) затова смятам с Pic да започна,за сериозна работа ми е рано въпреки че имам сериозни идеи :wink: та ако можеш дай ми линк към компилатора ако има и документация още по-добре . . .

Автор:  Реконструктор [ Сря Окт 13, 2004 12:16 pm ]
Заглавие: 

Anonymous написа:
Сега като се замисля от тази гледна точка си прав наистина обектно ориентираните езици са по тежки ,мо тъй като съм все още в началото ми се иска да започна с нещо по-елементарно,затова се захванах с pic,ако можеш да ми предложиш някакъв по-добър варин ще съм ти благодарен . . . :)


Това не е съвсем така. Зависи, разбира се, къде прокараме границата между C и C++. :)

Направих една малка програмка:

Код:
struct test_struct
{
   int a;
   int b;
   int sum;
};

void init(test_struct* pts, int a, int b)
{
   pts->a = a;
   pts->b = b;
}


void sum(test_struct* pts)
{
   pts->sum = pts->a + pts->b;
}



class test_class
{
protected:
   int m_a;
   int m_b;

public:
   int m_sum;
   
   void init(int a, int b)
   {
      m_a = a;
      m_b = b;
   }
   
   void sum()
   {
      m_sum = m_a + m_b;
   }
};

int main(void)
{
   
   test_struct ts;
   init(&ts, 5, 6);
   sum(&ts);

   test_class tc;
   tc.init(5, 6);
   tc.sum();
   
   while(1)
   {   
   }
}


Ето извикването на ф-ята init и за C случая:

Цитат:
56: init(&ts, 5, 6);
+0000007C: E046 LDI R20,0x06 Load immediate
+0000007D: E050 LDI R21,0x00 Load immediate
+0000007E: E065 LDI R22,0x05 Load immediate
+0000007F: E070 LDI R23,0x00 Load immediate
+00000080: 01CE MOVW R24,R28 Copy register pair
+00000081: 9601 ADIW R24,0x01
Add immediate to word
+00000082: DFAB RCALL -0x0055 Relative call subroutine


И за C++ случая:

Цитат:
60: tc.init(5, 6);
+00000086: 01CE MOVW R24,R28 Copy register pair
+00000087: 9607 ADIW R24,0x07 Add immediate to word
+00000088: E046 LDI R20,0x06 Load immediate
+00000089: E050 LDI R21,0x00 Load immediate
+0000008A: E065 LDI R22,0x05 Load immediate
+0000008B: E070 LDI R23,0x00 Load immediate
+0000008C: D004 RCALL +0x0004 Relative call subroutine


Няма никаква разлика, във викането, общо взето. :) Но да видим какво става в самата ф-я:

Код:
17:       void init(test_struct* pts, int a, int b)
18:       {
+0000002E:   93CF        PUSH    R28              Push register on stack
+0000002F:   93DF        PUSH    R29              Push register on stack
+00000030:   B7CD        IN      R28,0x3D         In from I/O location
+00000031:   B7DE        IN      R29,0x3E         In from I/O location
+00000032:   9726        SBIW    R28,0x06         Subtract immediate from word
+00000033:   B60F        IN      R0,0x3F          In from I/O location
+00000034:   94F8        CLI                      Flag clear
+00000035:   BFDE        OUT     0x3E,R29         Out to I/O location
+00000036:   BE0F        OUT     0x3F,R0          Out to I/O location
+00000037:   BFCD        OUT     0x3D,R28         Out to I/O location
+00000038:   8389        STD     Y+1,R24          Store indirect with displacement
+00000039:   839A        STD     Y+2,R25          Store indirect with displacement
+0000003A:   836B        STD     Y+3,R22          Store indirect with displacement
+0000003B:   837C        STD     Y+4,R23          Store
indirect with displacement
+0000003C:   834D        STD     Y+5,R20          Store indirect with displacement
+0000003D:   835E        STD     Y+6,R21          Store indirect with displacement
19:          pts->a = a;
+0000003E:   81E9        LDD     R30,Y+1          Load indirect with displacement
+0000003F:   81FA        LDD     R31,Y+2          Load indirect with displacement
+00000040:   818B        LDD     R24,Y+3          Load indirect with displacement
+00000041:   819C        LDD     R25,Y+4          Load indirect with displacement
+00000042:   8380        STD     Z+0,R24          Store indirect with displacement
+00000043:   8391        STD     Z+1,R25          Store indirect with displacement
20:          pts->b = b;
+00000044:   81E9        LDD     R30,Y+1          Load indirect with displacement
+00000045:   81FA        LDD     R31,Y+2          Load indirect with displacement
+00000046:   818D        LDD     R24,Y+5          Load indirect with displacement
+00000047:   819E        LDD     R25,Y+6          Load indirect with displacement
+00000048:   8382        STD     Z+2,R24          Store indirect with displacement
+00000049:   8393        STD     Z+3,R25          Store indirect with displacement
21:       }


Код:
@00000091: _ZN10test_class4initEii
66:       }
+00000091:   93CF        PUSH    R28              Push register on stack
+00000092:   93DF        PUSH    R29              Push register on stack
+00000093:   B7CD        IN      R28,0x3D         In from I/O location
+00000094:   B7DE        IN      R29,0x3E         In from I/O location
+00000095:   9726        SBIW    R28,0x06         Subtract immediate from word
+00000096:   B60F        IN      R0,0x3F          In from I/O location
+00000097:   94F8        CLI                      Flag clear
+00000098
:   BFDE        OUT     0x3E,R29         Out to I/O location
+00000099:   BE0F        OUT     0x3F,R0          Out to I/O location
+0000009A:   BFCD        OUT     0x3D,R28         Out to I/O location
+0000009B:   8389        STD     Y+1,R24          Store indirect with displacement
+0000009C:   839A        STD     Y+2,R25          Store indirect with displacement
+0000009D:   836B        STD     Y+3,R22          Store indirect with displacement
+0000009E:   837C        STD     Y+4,R23          Store indirect with displacement
+0000009F:   834D        STD     Y+5,R20          Store indirect with displacement
+000000A0:   835E        STD     Y+6,R21          Store indirect with displacement
42:             m_a = a;
+000000A1:   81E9        LDD     R30,Y+1          Load indirect with displacement
+000000A2:   81FA        LDD     R31,Y+2          Load indirect with displacement
+000000A3:   818B        LDD     R24,Y+3          Load indirect with displacement
+000000A4:   819C        LDD     R25,Y+4          Load indirect with displacement
+000000A5:   8380        STD     Z+0,R24          Store indirect with displacement
+000000A6:   8391        STD     Z+1,R25          Store indirect with displacement
43:             m_b = b;
+000000A7:   81E9        LDD     R30,Y+1          Load indirect with displacement
+000000A8:   81FA        LDD     R31,Y+2          Load indirect with displacement
+000000A9:   818D        LDD     R24,Y+5          Load indirect with displacement
+000000AA:   819E        LDD     R25,Y+6          Load indirect with displacement
+000000AB:   8382        STD     Z+2,R24          Store indirect with displacement
+000000AC:   8393        STD     Z+3,R25          Store indirect with displacement
44:      }


Разликата отново е никаква.

Автор:  sirius_alpha [ Сря Окт 13, 2004 12:30 pm ]
Заглавие: 

Интересно ми е като гледам този код как точно би се извършило обръщането към SFR или към някой от портовете,както и тяхното конфигуриране в средата на C . . .

Автор:  Mozfet [ Сря Окт 13, 2004 1:50 pm ]
Заглавие: 

Аз за друго Ц++, освен това на Павката не се сещам. Ето ти линк:

http://www.picant.com/

Да ти кажа всеки компилатор върши работа. Най-важно е да имаш добра визия за чипа от вътре и да си го бъзикаш, както си искаш. Иначе е малко вероятно да пишеш структури и unions за информационни системи на библиотеки и цветарски магазини :)

Автор:  Цецо [ Сря Окт 13, 2004 1:57 pm ]
Заглавие: 

"Това не е съвсем така. Зависи, разбира се, къде прокараме границата между C и C++. Smile "

Така де, ама аз съм малко предубеден към ++, така че не ми обръщайте внимание.

Компилатора който аз имам е само за 18та серия (MPLAB C18). Всъщност имам някакви версии на HiTech и CCS, на едно цеде, ама не знам до колко са работоспособни. Колегите ще помагат за 16та серия. Вземи си от комет PIC16F87X - по удобни са за учене (повече периферия).

Автор:  ToHu [ Сря Окт 13, 2004 6:05 pm ]
Заглавие: 

http://www.eldevice.net/upload/ccs/

eto CCS ne e nikak losh

Автор:  forest_gump [ Нед Окт 17, 2004 12:41 am ]
Заглавие: 

Карай си на макро асемблера MPASM, за да ти е ясно к'во правиш :wink:

Автор:  Цецо [ Нед Окт 17, 2004 12:32 pm ]
Заглавие: 

Да бе ясно ти е. На мен като си погледна старите асм сорсове, нищо не ми е ясно в първия един час. Хич не ме убеждавай че 10 страници сорс на асемблер може да е по-прегледен от 5 страници С

Автор:  forest_gump [ Нед Окт 17, 2004 1:26 pm ]
Заглавие: 

Ами аз ли да ти слагам коментарите на асм сорса, Цецо ... !!! :D То и аз се чудя дали аз съм ги писал тия работи (старите асм сорсове), ама като си видя хелпа отстрани и ми светва :D

Автор:  Mozfet [ Нед Окт 17, 2004 1:38 pm ]
Заглавие: 

Всъщност най-добрата комбинация е компилатор + асемблер. Колкото и да се опитваш да го избегнеш, в един момент на всеки се налага да приложи ASM в програмата си.
А като правило доброто - бързо прекъсване се пише на асемблер.

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