16+
Воскресенье
22 июля
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
sladkoejka  (02.07.2018 18:05 - 02.07.2018 18:36) , в ответ на Правьте linker configuraion file (.icf). Через него можно можно легко разметить память МК. автор: evgeniy1294
насколько понимаю, у IAR EW 8051 нет icf файлов. Вместо них i51 файлы. 
Вот содержимое файла для CY7C68013A:
[PROCESSOR]
name=plain
[DPTR]
nr_of=2
size=16
pdata_bank_reg_addr=0x92
switch_method=INC
switch_mask=0x01
addr_DPS=0x86
addr_DPL1=0x84
addr_DPH1=0x85
на данный момент проблему удалось решить путём добавления asm файла следующего содержания:
    COMMON INTVEC:CODE:ROOT(0)
    LIMIT SFB(INTVEC),0,0,"The INTVEC segment must begin at address zero"

    ORG     0x006A
    SJMP    $
    
    END
C этим файлом компилятор размещает код после адреса 0x006A+2 и после этого сишый код работает как положено. Вот правда задать autovector чисто на си по всей видимости не получится, поэтому без асма тут не обойтись. Как альтернативу, можно использовать asm файл с таблицей векторов:
    NAME    intv
    
    EXTERN  ISR_Timer0
    COMMON  INTVEC:CODE:ROOT(0)
    LIMIT   SFB(INTVEC),0,0,"The INTVEC segment must begin at address zero"
    
    ORG     0x0003      ; IE0 [INT0# Pin]
    reti

    ORG     0x000B      ; TF0 [Timer 0 Overflow]
    ljmp    ISR_Timer0

    ORG     0x0013      ; IE1 [INT1# Pin]
    reti

    ORG     0x001B      ; TF1 [Timer 1 Overflow]
    reti

    ORG     0x0023      ; RI_0 & TI_0 [USART0 Rx & Tx]
    reti

    ORG     0x002B      ; TF2 [Timer 2 Overflow]
    reti

    ORG     0x0033      ; Resume [WAKEUP / WU2 Pin or USB Resume]
    reti

    ORG     0x003B      ; RI_1 & TI_1 [USART1 Rx & Tx]
    reti

    ORG     0x0043      ; USBINT [USB]
    reti

    ORG     0x004B      ; I2CINT [I2C Bus]
    reti

    ORG     0x0053      ; IE4 [GPIF / FIFOs / INT4 Pin]
    reti

    ORG     0x005B      ; IE5 [INT5# Pin]
    reti

    ORG     0x0063      ; IE6 [INT6 Pin]
    reti

    END
а обработчики определять без #pragma vector и вызывать из таблицы векторов:
#pragma diag_suppress=Ta009
__interrupt __root void ISR_Timer0(void)
{
}
этот вариант работает. Хотя очень неудобен, таблицы векторов нужна на асме задавать. Вариант с autovector пока не пробовал. По идее тоже должно получиться, несколько таблиц можно задать на асме и связать их через ljmp
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII