реклама на сайте
подробности

 
 
> SDCC не линкует прерывания вне main.c, Собирает код, но не вставляет в таблицу прерываний
Spider
сообщение May 16 2015, 08:19
Сообщение #1


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Всем привет!

Не понятен момент описания прерываний. Точнее описывать их получается, но вот поведение линковщика неоднозначно.

К примеру имеем main.c в котором скопом весь код программы в том числе и прерывания:
Код
void main(void)
{
бла бла бла
}

UART0_ISR()
{
обработчик
}

Теперь собираем его, и получаем примерно следующее:
Код
                                    563;--------------------------------------------------------
                                    564; interrupt vector
                                    565;--------------------------------------------------------
                                    566     .area HOME    (CODE)
      000000                        567 __interrupt_vect:
      000000 02 00 29         [24]  568     ljmp    __sdcc_gsinit_startup
      000003 32               [24]  569     reti
      000004                        570     .ds    7
      00000B 32               [24]  571     reti
      00000C                        572     .ds    7
      000013 32               [24]  573     reti
      000014                        574     .ds    7
      00001B 32               [24]  575     reti
      00001C                        576     .ds    7
      000023 02 01 C9         [24]  577     ljmp    _isr_uart
                                    578;--------------------------------------------------------
                                    579; global & static initialisations
                                    580;--------------------------------------------------------

Теперь "причёсываем" код. Создаём uart.c и переносим в него прерывание. собираем. Линкуем.
Код
                                    526;--------------------------------------------------------
                                    527; interrupt vector
                                    528;--------------------------------------------------------
                                    529     .area HOME    (CODE)
      000000                        530 __interrupt_vect:
      000000 02 00 06         [24]  531     ljmp    __sdcc_gsinit_startup
                                    532;--------------------------------------------------------
                                    533; global & static initialisations
                                    534;--------------------------------------------------------

А где?! wacko.gif
Нет, сама функция собирается, но как обычная:
Код
                                    560;--------------------------------------------------------
                                    561; code
                                    562;--------------------------------------------------------
                                    563     .area CSEG    (CODE)
                                    564;------------------------------------------------------------
                                    565;Allocation info for local variables in function '_isr_uart'
                                    566;------------------------------------------------------------
                                    567;    uart.c:41: _ISR_UART()
                                    568;    -----------------------------------------
                                    569;     function _isr_uart
                                    570;    -----------------------------------------
      0000D8                        571 _isr_uart:
                           00000F   572     ar7 = 0x0F
                           00000E   573     ar6 = 0x0E
                           00000D   574     ar5 = 0x0D
                           00000C   575     ar4 = 0x0C
                           00000B   576     ar3 = 0x0B
                           00000A   577     ar2 = 0x0A
                           000009   578     ar1 = 0x09
                           000008   579     ar0 = 0x08

Что я могу сделать не так? Это что получается прерывания должны быть только в основном коде?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 14:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016