| Автор |
Съобщение |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
 неудачи с PIC24 и CCS-PICC 4.057
Искам да напиша прекъсване на асемблер, за да не ползвам генерирания от компилатора код, но се оказа че компилатора не позволява използването на #ORG или #ROM в адресите на които се разполагат векторите на прекъсване.
Дали някой е стигал до сходни проблеми и как ги е прескачал?
А от колегите ползващи други среди за PIC24 ще споделят ли дали са по удобни при подобни ситуации?
|
| Съб Юли 05, 2008 6:22 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
Когато се генерира адрес(вектор) на прекъсване: на адреса (вектора),който е заявил прекъсването в зависимост от приоритета му има някакъв jump който ти прави прехода към програмата по прекъсване.На самия адрес нищо друго не пишеш.Така че си поизясни как работи системата по прекъсване и тогава пробвай. На асемблер ако си се вглеждал детайлно това са наща които се учат в началото. Ако ти е трудно с асемблера- пиши си го на С.
|
| Съб Юли 05, 2008 6:51 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Какво по-точно искаш да направиш!
|
| Съб Юли 05, 2008 7:08 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
Тъй като функцията обработваща прекъсването е изцяло моя, не е автоматично генериран вектора към нея, което налага аз да го поставя в съответния адрес за векторите на прекъсване.
Т.е. искам да задам вектор към прекъсване което съм написал на асемблер. Поставяйки примерно ред #ORG 0x0024,0x0025, компилатора почва да вади разни грешки, докато ако #ORG е зададен след адрес 0x0200(т.е. след векторите на прекъсване) проблеми няма.
ПП: търсих в хелпа директива, която да забранява на компилатора да се генерира автоматично функцията за обработка на прекъсване, но не намерих такава. Целта ми е да избегна инструкциите за работа със стека, както и сам да си нулирам флага за прекъсване, защото явно в няколко версии поред има бъг с флаговете на прекъсванията.
|
| Съб Юли 05, 2008 9:16 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Търси има, поне в старите версии може да укажеш да не генерира той кода за прекъсване, отдавна не съм го ползвал и не помня, но има таква, едва ли в новата версия са го махнали, в момента го няма и инсталиран та не мога да погледна.
|
| Съб Юли 05, 2008 11:06 pm |
|
 |
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 1:41 am Мнения: 276 Местоположение: София
|
Пропуснал си #INT_DEFAULT
|
| Нед Юли 06, 2008 9:38 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
Пробвал ли си тази директива с PIC24?
|
| Нед Юли 06, 2008 10:26 pm |
|
 |
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 1:41 am Мнения: 276 Местоположение: София
|
Дадох ти насоката която явно си пропуснал. Разгледай какво пише в 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 |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Ами да беше казал какво си пробвал първо и как си го пробвал та не става, със сигурност на 18-ка и 16-ка може да се направи така,за 24-ка не знам но не виждам смисъл да са махнали тази опция.
|
| Пон Юли 07, 2008 6:01 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
 |
|
speedblue
Ранг: Ориентиран
Регистриран на: Нед Фев 25, 2007 1:41 am Мнения: 276 Местоположение: София
|
На PIC12, PIC16, PIC18 горните две директиви принуждават компилатора да не бълва вградения му пълен код за обработка на прекъсване (до тук ти тълкувам и почти превеждам HELP-а, незнам от какво се обиждаш).... пробвано е и работи. За PIC24 не съм го пробвал, но понеже това е директива към компилатора значи ще работи и там. Примерен код... освен да ти пейстна какво пише в HELP-а.
Ако беше прочел какво пише там, нямаше да правиш горния си коментар.
Реално се прави точно това което е описано в документацията. Може би за да ти спестя съвсем четенето...
*разрешаваш глобално прекъсванията
*индивидуално си разрешаваш кои ще ползваш
*не им пишеш нормалните #INT_ директиви, а слагаш една от ония двете и си правиш каквото пожелаеш от адрес 0x0004 /примерно/ натам.
|
| Пон Юли 07, 2008 6:55 pm |
|
 |
|
Ки4о
Ранг: Форумен бог
Регистриран на: Съб Юли 22, 2006 9:50 pm Мнения: 1638
|
TheWizard, младежа не му е ясно какво е вектор на прекъсване. - т.е иска на адреса на вектора на прекъсване да слага директива,което меко казано е тъпо.
Всяко прекъсване си има векторен адрес на който се записва някаква инструкция за преход към подпрограмата обслужваща това прекъсване.Та ако момъка си направи труда да отвори един ПДФ да речем на PIC24HJ32GP302/304 на страница 63 ще види векторната таблица на прекъсванията,където на векторен адрес 0x000022 е Timer2. Сега остава да си изясни какво става като Т2 генерира прекъсване - ами контролера отива на този адрес,където трябва да си записал адреса на програмата ти обслужваща прекъсванията на Т2. По - подробно от това не мога да го обесня. Ако иска човек да разбере как аджеба работи една система - СМ601 е добро начало  Аз на него съм почнал и не съжалявам 
|
| Пон Юли 07, 2008 7:06 pm |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 30, 2004 11:19 pm Мнения: 609
|
@ТheWizard правилно отбелязваш, че PICC е "чудо", и ще сменям средата, твоето мнение е най-конструктивно!
И едно уточнение за колегите които 'препоръчват' работили с PIC12/16/18 директиви, те не се прилагат в същия смисъл с PIC24!
Ки4о, евала за загубеното време Бате, да ми правиш 'виртуалния' портрет, дано си бил полезен на себе си поне 
|
| Вто Юли 08, 2008 9:57 am |
|
 |
|
freestyler
Ранг: Минаващ
Регистриран на: Пон Ное 07, 2005 9:17 pm Мнения: 57
|
Ники,
Ако решиш да ползваш MPLAB и Microchip C компилатор, мога да помогна... Само кажи.
|
| Вто Юли 08, 2008 3:52 pm |
|
|