| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Основни положения при писане на С за ПИК http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11765 |
Страница 1 от 5 |
| Автор: | Pif [ Чет Сеп 26, 2013 2:35 pm ] |
| Заглавие: | Основни положения при писане на С за ПИК |
Проблемът е следния като всеки уважаващ се хардуерист до сега съм писал само на амеблер. Но дойде време когато ми се налага да започна да пиша на Си. Налепих си един пик24, качих си най новия МПЛаб и си закчих ИСД3. От тук започнаха проблемите. Не успявам нито да си конфигурирам процесора нито да компилирам нещо работещо, било то да светна светодиод на един пин. Не са ми ясни няколко положения в разликите с асемблера 1. Как се конфигурира процесора и кое къде се конфигурира. Виждам, че някои от нещата се конфигурират на едно място а други трябва да си ги конфигурирам по старомодния начин като в асемблера 2. Как и къде да разреша прекъсване и къде да си напиша кода който трябва да се случи в прекъсване. По същия начин ли проверявам от къде ми е дошло прекъсването или има други по хитри методи за тая работа? Извинете за лаишките въпроси но за първи път се сблъсквам със Си и нещата са ми много неясни. |
|
| Автор: | head_up [ Чет Сеп 26, 2013 2:56 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Ей тука http://www.microchip.com/CodeExamplesByFunc.aspx има примери много |
|
| Автор: | Desert Leo [ Чет Сеп 26, 2013 3:49 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Майкрочипския компилатор ли ползваш? |
|
| Автор: | itso.t [ Пет Сеп 27, 2013 11:35 am ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Смени контролера с някой с по-малко периферия за конфигуриране. Така "първоначалното изтръпване" ще е по-малко... |
|
| Автор: | Н'бабане Гт'муан'га [ Пет Сеп 27, 2013 11:58 am ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
съвсем за начало - потърси и прочети за конкретния контролер "Configuration Fuses". прекъсванията се задават като void interrupt function(void) има едни флагове, които показват откъде идва прекъсването. не забравяй да нулираш съответния флаг ако е бил вдигнат, след като обработиш прекъсването. има доста неща за научаване. наистина е добра идея да вземеш за начало най-елементарния пик и да разцъкаш лед с него за начало. пробвай PIC10F200 |
|
| Автор: | dan [ Пет Сеп 27, 2013 12:48 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
човекот първом требе да каже какъв компилатор използва. |
|
| Автор: | Н'бабане Гт'муан'га [ Пет Сеп 27, 2013 1:46 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
ми той си го каза - качил си е най-новия мплаб, което автоматично го отпраща на ХС16 |
|
| Автор: | dan [ Пет Сеп 27, 2013 2:03 pm ] | |||||||||
| Заглавие: | Re: Основни положения при писане на С за ПИК | |||||||||
цъ. можеш да си го настроиш за различни компюлатори. |
||||||||||
| Автор: | itso.t [ Пет Сеп 27, 2013 2:10 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
С "малките" пикове въпросът е доста комплициран... От една страна са елементарни - с малко регистри за конфигуриране. От друга, са дървени за дебъгване. За да потегли дебъгера, трябва да се използва адаптер, който уви, не е универсален, а е за дадена серия контролери. В същото време е полезно да може да се гледа какво става "в контролера"... |
|
| Автор: | Н'бабане Гт'муан'га [ Пет Сеп 27, 2013 2:14 pm ] | ||||||||||||||||||
| Заглавие: | Re: Основни положения при писане на С за ПИК | ||||||||||||||||||
можеш, но се съмнявам че той се е юрнал да настройва друг компилатор при положение че пита въпроси от такова естество. обзалагам се че е с ХС16 |
|||||||||||||||||||
| Автор: | michev [ Съб Сеп 28, 2013 1:46 pm ] | |||||||||
| Заглавие: | Re: Основни положения при писане на С за ПИК | |||||||||
Конфигурацията на контролера можеш да направиш с мишката, като избереш меню Window->Pic memory views->Configuration bits. Избираш си от селектите някой стойност за дадената опция и като приключиш - Generate source code to output. Copy и после paste в твоя файл и си готов с конфигурацията. С това приключваш базовото конфигуриране - clock, code protection.. кучета и други основни опции. Следващата конфигурация която трябва да направиш е тая за периферията която ще ползваш.. ама щом си писал за контролери, дори и на асемблер - това ти е ясно. Всички регистри на дадения контролер са дефинирани в неговия си хедър файл, който пък се инклудва в проекта ти чрез просто инклудване на "xc.h". Конвенцията за именоване на хедър файловете им е p24 + останалата част от модела на контролера. Като пример за pic24fv32ka302, хедър файла е "p24FV32KA302.h". С регистрите можеш да работиш като им присвояваш стойност директно или четеш директно такава от тях.. не по различно е от асемблера. За улеснение микрочеп са сложили и структури, с чиято помощ да можеш да установяваш/четеш конкретен бит от даден регистър. Тях можеш да познаеш по това че завършват на bits, например LATAbits, като LATA е регистъра. Прекъсванията се пишат като функции в C-то, като пред дефиницията на функцията слагаш атрибут указващ че това е прекъсване _ISR, например
на прекъсванията - от документацията на C30 компилатора или ръчно от <инсталационна папка на xc16>/support/PIC24F(E, H..)/gld/pTвоя контролер.gld и си търсиш Interrupt Vector Table. Допълнителна информация за разновидностите на прекъсванията (и всичко останало) можеш да намериш в документацията на xc16 (Help->Help contents->XC16 toolchain). |
||||||||||
| Автор: | sparkybg [ Съб Сеп 28, 2013 11:51 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Аз само да добавя че ако ще се гледат и примерчета, полезно е да се инсталиряа и новия XC16 и стария C30 компилатор. Повечето примери се компилират само под едното. Същото важи и за останалите бръмбари - от PIC10 та до PIC32. |
|
| Автор: | Pif [ Нед Сеп 29, 2013 2:53 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Много благодаря за отговорите. Инсталирал съм препоръчания от майкрочип компилатор ХС16. Основно проблемите ми идват от непознаване на езика Си както и от непознаването на порядките при работа с толкова много и различни файлове в един проект. На асемблер за пик16 съм писал доста сериозни програми но нещата там са доста по прости. Имам си 1 ресет вектор и 1 вектор на прекъсване. След ресет вектора си конфигурирам всички периферии като внимавам кое в коя банка ми е и след това си пиша програмата. Слагам си подпрограми в същия файл които си викам при нужда. При влизане в прекъсване проверявам от къде ми е прекъсването, чистя си флага, оправям си таймерите ако имам нужда от точни времена и си върша работата. Налага ми се този проект да го направя на 24-та серия заради ниската консумация и многото ацп-та които ми трябват. До тук успях да накарам светодиодче да мига. Малко ми е мътно с локалните и глобални променливи както и работата с функции но с малко боричкане това ще стане. Това което за момента не ми е ясно е: Какво се случва при получаване на прекъсване? Компилатора сам ли се грижи за програм каунтър, стек, текущи стойности на акумулатор и статус битове или аз трябва да се грижа за това? Компилатора ли се грижи за вида на прекъсване и ме вкарва в различна функция при различно прекъсване или имам само един вектор и проверявам от къде ми е дошло след което го чистя? От това което компилатора ми генерира като асемблерски код се появяват няколко акумулатора. Няколко акумулатора ли имам или това е нещо друго? 16 битови ли са всички променливи и акумулатора или както в пик18 имах горна и долна част на дадения адрес? И последното неясно нещо е как се работи с битове? Как да напиша на Си: btfss PORTB,5 или това: bsf PORTA,0 опитах с PORTB.RB5 = 0 или 1 или false но не стана. |
|
| Автор: | Cekins [ Нед Сеп 29, 2013 3:17 pm ] |
| Заглавие: | Re: Основни положения при писане на С за ПИК |
Амчи като си писал на асемблер за 8 битовото ядро, не виждам какъв ще ти е проблема да пишеш и за 16-битовото - даже е много по гъвкаво. Има не няколко акумулатора а 16. Оснвоните разлики с 8 битовите са именно в тия 16 акумулатора, които обаче са нещо изключително удобно. Е има и още нещица и аз честно казано доста по-бързо схванах асемблера му отколкото на малките. При положение че много рядко пиша на асемблер за една 24-ка половината проект го написах на асемблер. |
|
| Автор: | michev [ Нед Сеп 29, 2013 6:07 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Основни положения при писане на С за ПИК | |||||||||||||||||||||||||||
Малко съм потресен от въпросите ти. Всеки уважаващ се хардуерист би отворил спецификацията на избрания контролер и би погледнал поне диаграмата на архитектурата. Виждам че ти липсват основни познания по езика С.. Не виждам как ще стане твойта работа без поне бегла представа и за 2-те. Относно въпросите ти - Разбрах че не си прочел прения ми пост, защото ако беше, щеше да знаеш че да установяваш определeн бит можеше да ползваш PORTBbits.RB5 = 0 или 1, дори ако трябва да съм точен не PORTBbits ами LATBbits трябва да използваш. Естествено, винаги можеш да си ползваш регистъра директно - LATB = 0x20 или дори с четене-модифициране-запис LATB |= (1<<5) ако ще модифицираш конкретен бит само.
Сам се грижи.
Да.
Локалните са достъпни само в текущата функция в която са дефинирани, а глобалните - от всякъде. Има една книжка "How to fly with pic24" която няма да е лошо да прочетеш (макс 2 дни) |
||||||||||||||||||||||||||||
| Страница 1 от 5 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|