Отговори на тема  [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща
неудачи с PIC24 и CCS-PICC 4.057 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение неудачи с PIC24 и CCS-PICC 4.057
Искам да напиша прекъсване на асемблер, за да не ползвам генерирания от компилатора код, но се оказа че компилатора не позволява използването на #ORG или #ROM в адресите на които се разполагат векторите на прекъсване.
Дали някой е стигал до сходни проблеми и как ги е прескачал?
А от колегите ползващи други среди за PIC24 ще споделят ли дали са по удобни при подобни ситуации?


Съб Юли 05, 2008 6:22 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Когато се генерира адрес(вектор) на прекъсване: на адреса (вектора),който е заявил прекъсването в зависимост от приоритета му има някакъв jump който ти прави прехода към програмата по прекъсване.На самия адрес нищо друго не пишеш.Така че си поизясни как работи системата по прекъсване и тогава пробвай. На асемблер ако си се вглеждал детайлно това са наща които се учат в началото. Ако ти е трудно с асемблера- пиши си го на С.


Съб Юли 05, 2008 6:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Какво по-точно искаш да направиш!


Съб Юли 05, 2008 7:08 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
Тъй като функцията обработваща прекъсването е изцяло моя, не е автоматично генериран вектора към нея, което налага аз да го поставя в съответния адрес за векторите на прекъсване.
Т.е. искам да задам вектор към прекъсване което съм написал на асемблер. Поставяйки примерно ред #ORG 0x0024,0x0025, компилатора почва да вади разни грешки, докато ако #ORG е зададен след адрес 0x0200(т.е. след векторите на прекъсване) проблеми няма.

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


Съб Юли 05, 2008 9:16 pm
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Търси има, поне в старите версии може да укажеш да не генерира той кода за прекъсване, отдавна не съм го ползвал и не помня, но има таква, едва ли в новата версия са го махнали, в момента го няма и инсталиран та не мога да погледна.


Съб Юли 05, 2008 11:06 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Нед Фев 25, 2007 1:41 am
Мнения: 276
Местоположение: София
Мнение 
Ники написа:
Тъй като функцията обработваща прекъсването е изцяло моя, не е автоматично генериран вектора към нея, което налага аз да го поставя в съответния адрес за векторите на прекъсване.
Т.е. искам да задам вектор към прекъсване което съм написал на асемблер. ...................


Пропуснал си #INT_DEFAULT


Нед Юли 06, 2008 9:38 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
speedblue написа:
Ники написа:
..............


Пропуснал си #INT_DEFAULT



Пробвал ли си тази директива с PIC24?


Нед Юли 06, 2008 10:26 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Нед Фев 25, 2007 1:41 am
Мнения: 276
Местоположение: София
Мнение 
Ники написа:
Пробвал ли си тази директива с PIC24?


Дадох ти насоката която явно си пропуснал. Разгледай какво пише в HELP-a просто. На 24 не съм пробвал, но няма причина да не работи.
#INT_DEFAULT
#INT_GLOBAL


Пон Юли 07, 2008 2:34 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
Ако съществува отговор на моя въпрос, той се състои в не повече от два реда с по 2-3-4-5 думи/цифри на всеки ред.
Не бих си губил времето да задавам въпроси на които отговорите мога да ги намеря в хелпа в рамките на един ден.
Тъй като и вашите мнения са уклончиви и недостатъчни, ще приема че отговора който търся не е тук.
Благодаря за отделеното внимание! :)


Пон Юли 07, 2008 2:45 pm
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами да беше казал какво си пробвал първо и как си го пробвал та не става, със сигурност на 18-ка и 16-ка може да се направи така,за 24-ка не знам но не виждам смисъл да са махнали тази опция.


Пон Юли 07, 2008 6:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Незнам за какво го ползваш това "чудо" CCS за PIC24

при ASM30 - вектора се дефинира и "прави" от линкер GLD файла,
дефол е:
.ivt __IVT_BASE : - началния адрес за прекъсванията
.......
LONG( DEFINED(__INT0Interrupt) ? ABSOLUTE(__INT0Interrupt) : ABSOLUTE(__DefaultInterrupt));

в S асм фаила пишеш

.global __INT0Interrupt

__INT0Interrupt:
; Do something
retfie

_________________
main[-1u]={1};


Пон Юли 07, 2008 6:10 pm
Профил ICQ
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Нед Фев 25, 2007 1:41 am
Мнения: 276
Местоположение: София
Мнение 
Ники написа:
......... Не бих си губил времето да задавам въпроси на които отговорите мога да ги намеря в хелпа в рамките на един ден.......


На PIC12, PIC16, PIC18 горните две директиви принуждават компилатора да не бълва вградения му пълен код за обработка на прекъсване (до тук ти тълкувам и почти превеждам HELP-а, незнам от какво се обиждаш).... пробвано е и работи. За PIC24 не съм го пробвал, но понеже това е директива към компилатора значи ще работи и там. Примерен код... освен да ти пейстна какво пише в HELP-а.
Ако беше прочел какво пише там, нямаше да правиш горния си коментар.

Реално се прави точно това което е описано в документацията. Може би за да ти спестя съвсем четенето...
*разрешаваш глобално прекъсванията
*индивидуално си разрешаваш кои ще ползваш
*не им пишеш нормалните #INT_ директиви, а слагаш една от ония двете и си правиш каквото пожелаеш от адрес 0x0004 /примерно/ натам.


Пон Юли 07, 2008 6:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
TheWizard, младежа не му е ясно какво е вектор на прекъсване.
Цитат:
Искам да напиша прекъсване на асемблер, за да не ползвам генерирания от компилатора код, но се оказа че компилатора не позволява използването на #ORG или #ROM в адресите на които се разполагат векторите на прекъсване.
- т.е иска на адреса на вектора на прекъсване да слага директива,което меко казано е тъпо.
Всяко прекъсване си има векторен адрес на който се записва някаква инструкция за преход към подпрограмата обслужваща това прекъсване.Та ако момъка си направи труда да отвори един ПДФ да речем на PIC24HJ32GP302/304 на страница 63 ще види векторната таблица на прекъсванията,където на векторен адрес 0x000022 е Timer2. Сега остава да си изясни какво става като Т2 генерира прекъсване - ами контролера отива на този адрес,където трябва да си записал адреса на програмата ти обслужваща прекъсванията на Т2. По - подробно от това не мога да го обесня. Ако иска човек да разбере как аджеба работи една система - СМ601 е добро начало :wink: Аз на него съм почнал и не съжалявам :)


Пон Юли 07, 2008 7:06 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
@ТheWizard правилно отбелязваш, че PICC е "чудо", и ще сменям средата, твоето мнение е най-конструктивно!

И едно уточнение за колегите които 'препоръчват' работили с PIC12/16/18 директиви, те не се прилагат в същия смисъл с PIC24!

Ки4о, евала за загубеното време Бате, да ми правиш 'виртуалния' портрет, дано си бил полезен на себе си поне :)


Вто Юли 08, 2008 9:57 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 07, 2005 9:17 pm
Мнения: 57
Мнение 
Ники,
Ако решиш да ползваш MPLAB и Microchip C компилатор, мога да помогна... Само кажи.


Вто Юли 08, 2008 3:52 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 33 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

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


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

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