| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| PIC24-C30 адрес на SFR регистър като константа в #define? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=6150 |
Страница 1 от 1 |
| Автор: | Ники [ Нед Окт 05, 2008 6:44 pm ] |
| Заглавие: | PIC24-C30 адрес на SFR регистър като константа в #define? |
дефинирам си следното: #define PIN (PORTB<<4+15) и в резултат вместо готова константа сметната от препроцесора, се получава код с аритметичните операции използвани в директивата #define. При AVR-GCC за да се избегне генерирането на код просто се използва спецификатор _SFR_IO_ADDR(portname), който указва на компилатора да не използва порта в операции, а само адреса му като константа, но в C30-GCC този спецификатор не е същия или липсва, или до момента не успях да го открия. Какви предложения имате вие, за да използвам адреса на регистър PORTB, като константа, а не като дефиниран порт на процесора, така че PIN да се получи сметната от компилатора константа? |
|
| Автор: | TheWizard [ Вто Окт 07, 2008 10:23 am ] |
| Заглавие: | |
Пробвай да сложиш няколко щпации след PIN.... |
|
| Автор: | ps66 [ Вто Окт 07, 2008 11:22 am ] | |||||||||
| Заглавие: | Re: PIC24-C30 адрес на SFR регистър като константа в #define | |||||||||
зависи как ти е дефиниран PORTB ... (не си му дал декларацията!) иначе по C стандарт: адреса е: (&(PORTB)) може да пробваш нещо от рода на: #define PIN (((int)(&(PORTB)))<<4+15) ама зависи от много неща |
||||||||||
| Автор: | zmej [ Вто Окт 07, 2008 5:30 pm ] |
| Заглавие: | |
Само да вметна, че приоритетът на аритметичното събиране и изваждане е по-висок от този на побитовото изместване, така че (х)<<4+15 е еднакво с (х)<<19. |
|
| Автор: | Ники [ Сря Окт 08, 2008 1:21 am ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
това не го разбрах, каква е идеята?
PORTB е дефиниран в хедър файла на дадения процесор, конкретно за ПИК24 като структура от битове. Предварително ми изглеждаше странно '&' и 'int' да са валидни при използване в #define, но опитах и нищо не се получи.
Прав си, но пишейки примера, не копирах а само илюстрирах идеята, такива грешки от неправилно зададени приоритети не остават скрити В крайна сметка един ден отиде в лутане по разните документи и примери, в които естествено решение на моята ситуация няма, предефинирах си най юнашки няколкото порта на процесора, и всичко си дойде на място, евала на разчупените модерни компилатори |
||||||||||||||||||||||||||||
| Автор: | ps66 [ Сря Окт 08, 2008 7:55 am ] | |||||||||
| Заглавие: | ||||||||||
то е ясно че PORTB е дефиниран някъде ... ! само май не ти е ясно че освен PIC има и много (ама много) други MCU-та да беше постнал декларацията на PORTB да беше написал колко ти смята компилатора за PIN ... a това че &, int ти се виждат "странни" ... показва колко разбираш C ! |
||||||||||
| Автор: | Ники [ Сря Окт 08, 2008 10:11 am ] | |||||||||
| Заглавие: | ||||||||||
сега като пиша отговора от компютъра който ползвам за интернет нямам инсталация на този компилатор за да копна дефиницията на PortB, но както писах по горе, не е дефиниран като константа, а като структура от битове! И в линкер скрипта му се присъединява физическия адрес! Обяснявайки проблема в началото на темата, писах че компилатора не смята PIN, а на мястото в програмата където използвам PIN генерира асемблерски код с асемблерски аритметични инструкции Въпроса ми е свързан конкретно с 'великия' процесор ПИК, направил неизвестни толкова други. Шегувам се! И да знам дали има други процесори или не, в конкретния случай знанията от други процесори невинаги помагат, защото конкретно за този компилатор някой друг е решил да му ореже удобните опции които ти знаеш, и на каквито се радват хубавите процесори от други фирми! Колко разбирам С...има доста теми във форума, които са показателни за разбирането ми, и никъде не се изявавам като дългогодишен и с опит "програмист". Уча се! Проблема си го реших, Благодаря за съдействието![/quote] |
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|