Отговори на тема  [ 69 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща
C + + за инструкциите на Pic 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 12, 2004 8:33 pm
Мнения: 5
Мнение C + + за инструкциите на Pic
Начинаещ съм в тази област на електрониката затова се надявам въпроса ми да не ви издразни много,а той е свързан с това ако може да ми препоръчате подходящ компилатор на C++ за инструкциите на PIC и повече информация за програмирането на PIC s езика C++ който ми е далеч по-добре познат от асемблер за пик . . .

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


Вто Окт 12, 2004 9:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Абе аз добре те разбрах ама:

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

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


Сря Окт 13, 2004 9:36 am
Профил ICQ
Мнение 
Ñåãà êàòî ñå çàìèñëÿ îò òàçè ãëåäíà òî÷êà ñè ïðàâ íàèñòèíà îáåêòíî îðèåíòèðàíèòå åçèöè ñà ïî òåæêè ,ìî òúé êàòî ñúì âñå îùå â íà÷àëîòî ìè ñå èñêà äà çàïî÷íà ñ íåùî ïî-åëåìåíòàðíî,çàòîâà ñå çàõâàíàõ ñ pic,àêî ìîæåø äà ìè ïðåäëîæèø íÿêàêúâ ïî-äîáúð âàðèí ùå ñúì òè áëàãîäàðåí . . . :)


Сря Окт 13, 2004 10:19 am
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 12, 2004 8:33 pm
Мнения: 5
Мнение 
Мога да науча асемблерските инструкции ,няма да ми е проблем,но далеч по-лесно би се работило на език като C . . . :wink:


Сря Окт 13, 2004 10:25 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

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


Сря Окт 13, 2004 11:12 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

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


Сря Окт 13, 2004 11:38 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
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:      }


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


Сря Окт 13, 2004 12:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 12, 2004 8:33 pm
Мнения: 5
Мнение 
Интересно ми е като гледам този код как точно би се извършило обръщането към SFR или към някой от портовете,както и тяхното конфигуриране в средата на C . . .


Сря Окт 13, 2004 12:30 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение 
Аз за друго Ц++, освен това на Павката не се сещам. Ето ти линк:

http://www.picant.com/

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

_________________
Adios
Mozfet


Сря Окт 13, 2004 1:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
"Това не е съвсем така. Зависи, разбира се, къде прокараме границата между C и C++. Smile "

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

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


Сря Окт 13, 2004 1:57 pm
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30684
Местоположение: София
Мнение 
http://www.eldevice.net/upload/ccs/

eto CCS ne e nikak losh


Сря Окт 13, 2004 6:05 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Окт 13, 2004 11:24 pm
Мнения: 500
Местоположение: Стара Загора
Мнение 
Карай си на макро асемблера MPASM, за да ти е ясно к'во правиш :wink:


Нед Окт 17, 2004 12:41 am
Профил YIM
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Да бе ясно ти е. На мен като си погледна старите асм сорсове, нищо не ми е ясно в първия един час. Хич не ме убеждавай че 10 страници сорс на асемблер може да е по-прегледен от 5 страници С


Нед Окт 17, 2004 12:32 pm
Профил ICQ
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Окт 13, 2004 11:24 pm
Мнения: 500
Местоположение: Стара Загора
Мнение 
Ами аз ли да ти слагам коментарите на асм сорса, Цецо ... !!! :D То и аз се чудя дали аз съм ги писал тия работи (старите асм сорсове), ама като си видя хелпа отстрани и ми светва :D


Нед Окт 17, 2004 1:26 pm
Профил YIM
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Сеп 25, 2004 4:33 pm
Мнения: 273
Местоположение: София
Мнение 
Всъщност най-добрата комбинация е компилатор + асемблер. Колкото и да се опитваш да го избегнеш, в един момент на всеки се налага да приложи ASM в програмата си.
А като правило доброто - бързо прекъсване се пише на асемблер.

_________________
Adios
Mozfet


Нед Окт 17, 2004 1:38 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 69 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща

Кой е на линия

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


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

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