Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

неудачи с PIC24 и CCS-PICC 4.057
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=5919
Страница 1 от 3

Автор:  Ники [ Съб Юли 05, 2008 6:22 pm ]
Заглавие:  неудачи с PIC24 и CCS-PICC 4.057

Искам да напиша прекъсване на асемблер, за да не ползвам генерирания от компилатора код, но се оказа че компилатора не позволява използването на #ORG или #ROM в адресите на които се разполагат векторите на прекъсване.
Дали някой е стигал до сходни проблеми и как ги е прескачал?
А от колегите ползващи други среди за PIC24 ще споделят ли дали са по удобни при подобни ситуации?

Автор:  Ки4о [ Съб Юли 05, 2008 6:51 pm ]
Заглавие: 

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

Автор:  Gogo [ Съб Юли 05, 2008 7:08 pm ]
Заглавие: 

Какво по-точно искаш да направиш!

Автор:  Ники [ Съб Юли 05, 2008 9:16 pm ]
Заглавие: 

Тъй като функцията обработваща прекъсването е изцяло моя, не е автоматично генериран вектора към нея, което налага аз да го поставя в съответния адрес за векторите на прекъсване.
Т.е. искам да задам вектор към прекъсване което съм написал на асемблер. Поставяйки примерно ред #ORG 0x0024,0x0025, компилатора почва да вади разни грешки, докато ако #ORG е зададен след адрес 0x0200(т.е. след векторите на прекъсване) проблеми няма.

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

Автор:  ToHu [ Съб Юли 05, 2008 11:06 pm ]
Заглавие: 

Търси има, поне в старите версии може да укажеш да не генерира той кода за прекъсване, отдавна не съм го ползвал и не помня, но има таква, едва ли в новата версия са го махнали, в момента го няма и инсталиран та не мога да погледна.

Автор:  speedblue [ Нед Юли 06, 2008 9:38 pm ]
Заглавие: 

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


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

Автор:  Ники [ Нед Юли 06, 2008 10:26 pm ]
Заглавие: 

speedblue написа:
Ники написа:
..............


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



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

Автор:  speedblue [ Пон Юли 07, 2008 2:34 am ]
Заглавие: 

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


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

Автор:  Ники [ Пон Юли 07, 2008 2:45 pm ]
Заглавие: 

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

Автор:  ToHu [ Пон Юли 07, 2008 6:01 pm ]
Заглавие: 

Ами да беше казал какво си пробвал първо и как си го пробвал та не става, със сигурност на 18-ка и 16-ка може да се направи така,за 24-ка не знам но не виждам смисъл да са махнали тази опция.

Автор:  TheWizard [ Пон Юли 07, 2008 6:10 pm ]
Заглавие: 

Незнам за какво го ползваш това "чудо" CCS за PIC24

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

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

.global __INT0Interrupt

__INT0Interrupt:
; Do something
retfie

Автор:  speedblue [ Пон Юли 07, 2008 6:55 pm ]
Заглавие: 

Ники написа:
......... Не бих си губил времето да задавам въпроси на които отговорите мога да ги намеря в хелпа в рамките на един ден.......


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

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

Автор:  Ки4о [ Пон Юли 07, 2008 7:06 pm ]
Заглавие: 

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

Автор:  Ники [ Вто Юли 08, 2008 9:57 am ]
Заглавие: 

@ТheWizard правилно отбелязваш, че PICC е "чудо", и ще сменям средата, твоето мнение е най-конструктивно!

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

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

Автор:  freestyler [ Вто Юли 08, 2008 3:52 pm ]
Заглавие: 

Ники,
Ако решиш да ползваш MPLAB и Microchip C компилатор, мога да помогна... Само кажи.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/