Отговори на тема  [ 70 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща
Основни положения при писане на С за ПИК 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Сеп 26, 2013 2:24 pm
Мнения: 1765
Мнение Основни положения при писане на С за ПИК
Проблемът е следния
като всеки уважаващ се хардуерист до сега съм писал само на амеблер. Но дойде време когато ми се налага да започна да пиша на Си.
Налепих си един пик24, качих си най новия МПЛаб и си закчих ИСД3. От тук започнаха проблемите. Не успявам нито да си конфигурирам процесора нито да компилирам нещо работещо, било то да светна светодиод на един пин.
Не са ми ясни няколко положения в разликите с асемблера
1. Как се конфигурира процесора и кое къде се конфигурира. Виждам, че някои от нещата се конфигурират на едно място а други трябва да си ги конфигурирам по старомодния начин като в асемблера
2. Как и къде да разреша прекъсване и къде да си напиша кода който трябва да се случи в прекъсване. По същия начин ли проверявам от къде ми е дошло прекъсването или има други по хитри методи за тая работа?
Извинете за лаишките въпроси но за първи път се сблъсквам със Си и нещата са ми много неясни.


Чет Сеп 26, 2013 2:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение Re: Основни положения при писане на С за ПИК
Ей тука http://www.microchip.com/CodeExamplesByFunc.aspx има примери много :) Четеш от по-простите към по-сложните, ровиш из гугъл и си питаш каквото не разбираш ...


Чет Сеп 26, 2013 2:56 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 10, 2005 3:25 pm
Мнения: 5677
Местоположение: София
Мнение Re: Основни положения при писане на С за ПИК
Майкрочипския компилатор ли ползваш?


Чет Сеп 26, 2013 3:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Основни положения при писане на С за ПИК
Смени контролера с някой с по-малко периферия за конфигуриране. Така "първоначалното изтръпване" ще е по-малко...


Пет Сеп 27, 2013 11:35 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: Основни положения при писане на С за ПИК
съвсем за начало - потърси и прочети за конкретния контролер "Configuration Fuses".

прекъсванията се задават като void interrupt function(void)
има едни флагове, които показват откъде идва прекъсването. не забравяй да нулираш съответния флаг ако е бил вдигнат, след като обработиш прекъсването.

има доста неща за научаване. наистина е добра идея да вземеш за начало най-елементарния пик и да разцъкаш лед с него за начало. пробвай PIC10F200

_________________
'просто' е технически синоним на 'красиво'


Пет Сеп 27, 2013 11:58 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Re: Основни положения при писане на С за ПИК
човекот първом требе да каже какъв компилатор използва.

_________________
Хайде де!


Пет Сеп 27, 2013 12:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: Основни положения при писане на С за ПИК
ми той си го каза - качил си е най-новия мплаб, което автоматично го отпраща на ХС16

_________________
'просто' е технически синоним на 'красиво'


Пет Сеп 27, 2013 1:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Re: Основни положения при писане на С за ПИК
Н'бабане Гт'муан'га написа:
ми той си го каза - качил си е най-новия мплаб, което автоматично го отпраща на ХС16

цъ. можеш да си го настроиш за различни компюлатори.

_________________
Хайде де!


Пет Сеп 27, 2013 2:03 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12765
Местоположение: София
Мнение Re: Основни положения при писане на С за ПИК
С "малките" пикове въпросът е доста комплициран...
От една страна са елементарни - с малко регистри за конфигуриране.
От друга, са дървени за дебъгване. За да потегли дебъгера, трябва да се използва адаптер, който уви, не е универсален, а е за дадена серия контролери.
В същото време е полезно да може да се гледа какво става "в контролера"...


Пет Сеп 27, 2013 2:10 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: Основни положения при писане на С за ПИК
dan написа:
Н'бабане Гт'муан'га написа:
ми той си го каза - качил си е най-новия мплаб, което автоматично го отпраща на ХС16

цъ. можеш да си го настроиш за различни компюлатори.


можеш, но се съмнявам че той се е юрнал да настройва друг компилатор при положение че пита въпроси от такова естество. обзалагам се че е с ХС16

_________________
'просто' е технически синоним на 'красиво'


Пет Сеп 27, 2013 2:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 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, например
Код:
void _ISR __INT0Interrupt();
. Предполагам основния въпрос който те тормози е от къде да вземеш имената
на прекъсванията - от документацията на C30 компилатора или ръчно от
<инсталационна папка на xc16>/support/PIC24F(E, H..)/gld/pTвоя контролер.gld и си търсиш Interrupt Vector Table.
Допълнителна информация за разновидностите на прекъсванията (и всичко останало) можеш да намериш в документацията на
xc16 (Help->Help contents->XC16 toolchain).


Съб Сеп 28, 2013 1:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 12:02 pm
Мнения: 3070
Местоположение: София
Мнение Re: Основни положения при писане на С за ПИК
Аз само да добавя че ако ще се гледат и примерчета, полезно е да се инсталиряа и новия XC16 и стария C30 компилатор. Повечето примери се компилират само под едното. Същото важи и за останалите бръмбари - от PIC10 та до PIC32.


Съб Сеп 28, 2013 11:51 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Сеп 26, 2013 2:24 pm
Мнения: 1765
Мнение Re: Основни положения при писане на С за ПИК
Много благодаря за отговорите.
Инсталирал съм препоръчания от майкрочип компилатор ХС16.
Основно проблемите ми идват от непознаване на езика Си както и от непознаването на порядките при работа с толкова много и различни файлове в един проект. На асемблер за пик16 съм писал доста сериозни програми но нещата там са доста по прости. Имам си 1 ресет вектор и 1 вектор на прекъсване. След ресет вектора си конфигурирам всички периферии като внимавам кое в коя банка ми е и след това си пиша програмата. Слагам си подпрограми в същия файл които си викам при нужда. При влизане в прекъсване проверявам от къде ми е прекъсването, чистя си флага, оправям си таймерите ако имам нужда от точни времена и си върша работата.
Налага ми се този проект да го направя на 24-та серия заради ниската консумация и многото ацп-та които ми трябват. До тук успях да накарам светодиодче да мига. Малко ми е мътно с локалните и глобални променливи както и работата с функции но с малко боричкане това ще стане. Това което за момента не ми е ясно е:
Какво се случва при получаване на прекъсване? Компилатора сам ли се грижи за програм каунтър, стек, текущи стойности на акумулатор и статус битове или аз трябва да се грижа за това?
Компилатора ли се грижи за вида на прекъсване и ме вкарва в различна функция при различно прекъсване или имам само един вектор и проверявам от къде ми е дошло след което го чистя?
От това което компилатора ми генерира като асемблерски код се появяват няколко акумулатора. Няколко акумулатора ли имам или това е нещо друго?
16 битови ли са всички променливи и акумулатора или както в пик18 имах горна и долна част на дадения адрес?
И последното неясно нещо е как се работи с битове? Как да напиша на Си:
btfss PORTB,5
или това:
bsf PORTA,0
опитах с PORTB.RB5 = 0 или 1 или false но не стана.


Нед Сеп 29, 2013 2:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Основни положения при писане на С за ПИК
Амчи като си писал на асемблер за 8 битовото ядро, не виждам какъв ще ти е проблема да пишеш и за 16-битовото - даже е много по гъвкаво. Има не няколко акумулатора а 16. Оснвоните разлики с 8 битовите са именно в тия 16 акумулатора, които обаче са нещо изключително удобно. Е има и още нещица и аз честно казано доста по-бързо схванах асемблера му отколкото на малките. При положение че много рядко пиша на асемблер за една 24-ка половината проект го написах на асемблер.


Нед Сеп 29, 2013 3:17 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Основни положения при писане на С за ПИК
Малко съм потресен от въпросите ти. Всеки уважаващ се хардуерист би отворил спецификацията на избрания контролер и би погледнал поне диаграмата на архитектурата.
Виждам че ти липсват основни познания по езика С.. Не виждам как ще стане твойта работа без поне бегла представа и за 2-те.
Относно въпросите ти -
Разбрах че не си прочел прения ми пост, защото ако беше, щеше да знаеш че да установяваш определeн бит можеше да ползваш PORTBbits.RB5 = 0 или 1, дори ако трябва да съм точен не PORTBbits ами LATBbits трябва да използваш. Естествено, винаги можеш да си ползваш регистъра директно - LATB = 0x20 или дори с четене-модифициране-запис LATB |= (1<<5) ако
ще модифицираш конкретен бит само.
Цитат:
Компилатора сам ли се грижи за програм каунтър, стек, текущи стойности на акумулатор и статус битове или аз трябва да се грижа за това?

Сам се грижи.
Цитат:
Компилатора ли се грижи за вида на прекъсване и ме вкарва в различна функция при различно прекъсване..

Да.
Цитат:
Малко ми е мътно с локалните и глобални променливи

Локалните са достъпни само в текущата функция в която са дефинирани, а глобалните - от всякъде.

Има една книжка "How to fly with pic24" която няма да е лошо да прочетеш (макс 2 дни)


Нед Сеп 29, 2013 6:07 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 70 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща

Кой е на линия

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


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

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