ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
852440 Топик полностью
sladkoejka (02.07.2018 18:05 - 18:36, просмотров: 427) ответил evgeniy1294 на Правьте linker configuraion file (.icf). Через него можно можно легко разметить память МК.
насколько понимаю, у 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