Технический форум по робототехнике.
grek » 30 июл 2012, 10:17
Добрый день.Мучает проблема в настройки параметров definеd symbol: one per line. Хотелось переделать загрузчик для atmega1281. Не как не получается понять,от куда берутся данные цифры. Особенно непонятно с векторами прерывания. Вот например для 128 меги 35 векторов * 4 = 8С соответственно в таблице записываем IVT_SIZE=8C не понимаю почему при других мегах умножается на 2, а для 128 на 4. Мысль идет, что от объема какой то памяти. Тогда для 1281 меги,у меня получается 57 векторов * 4 = E4, и в конечном итоге получается.
BOOT_SIZE=2000
FLASH_SIZE=20000
IVT_SIZE=E4
RAM_SIZE=2000
RAM_BASE=100
я так понимаю, что есть какие то ошибки. Помогите пожалуйста понять как считаются данные значения.
и еще в настройках xcl пришлось закоментировать стороку
//=============================================================================
// RAM
//-Z(DATA)TINY_I,TINY_Z,TINY_N=RAM_BASE-FF
не критично ли это?
legion » 30 июл 2012, 11:08
На мк с памятью меньше 8 килобайт для перехода по вектору прерывания используется инструкция RJMP , т.к. она позволяет перейти на расстояние 8 Кб - т.е. в любую точку памяти. RJMP занимает 2 байта.
Если памяти больше 8 Кб, то для полного охвата памяти приходится использовать JMP, а она занимает 4 байта.
grek » 30 июл 2012, 11:33
имеется ввиду SRAM память более 8 килобайт.
legion » 30 июл 2012, 11:47
Нет, я говорил про Flash, т.е. про программную память. SRAM на таблицу векторов прерываний никак не влияет.
grek » 30 июл 2012, 11:55
у меня получаются вот такие настройки
- Код: Выделить всё • Развернуть
//=============================================================================
// Copyright (C) 2003 Atmel Corporation
//
// File: bootldr.xcl
// Linker: IAR Atmel AVR Linker
// Created: 14-Feb-2003 JP (Atmel Finland)
// Modified:
//
// Support Mail: avr@atmel.com
//
// Description: Linker file. This file is configured from
//
// Project Options->XLINK->#define
//
// This version utilizes the interrupt vector table for
// program code in order to shrink the target size.
//
// Other Info: For more information, refer to the Application Note
// Documentation.
//=============================================================================
-ca90
-w29
//=============================================================================
// Interrupt vectors
-Z(CODE)INTVEC=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1)
-H1895 -h(CODE)(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1)
//=============================================================================
// Code memory
-Z(CODE)NEAR_F,HUGE_F,SWITCH,INITTAB,DIFUNCT,CODE=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1)
-Z(FARCODE)FAR_F=(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1)
//=============================================================================
// RAM
//-Z(DATA)TINY_I,TINY_Z,TINY_N=RAM_BASE-FF
-Z(DATA)NEAR_I,NEAR_Z=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
-Z(DATA)RSTACK+40=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
-Z(DATA)CSTACK+(RAM_SIZE-40)=RAM_BASE-(RAM_BASE+RAM_SIZE-1)
- Код: Выделить всё • Развернуть
BOOT_SIZE=2000
FLASH_SIZE=20000
IVT_SIZE=E4
RAM_SIZE=2000
RAM_BASE=100
legion » 30 июл 2012, 12:17
А откуда данные брал? В IAR ничего не понимаю, но странные цифры какие-то.
Сам нашел -
http://www.atmel.com/Images/doc2589.pdf, страница 22. Но логика выбора цифр мне тоже непонятна.
grek » 30 июл 2012, 13:18
цифры нормальны байтовые, но вот в правильности их я не уверен
grek » 31 июл 2012, 08:43
Настроить вроде удалось,данные передаются. Но появилась новая проблема. Данные передаются, но не пишутся в контроллер.Такое ощущение, что модуль SPM неправильно работает. Может кто направит на путь,подскажет чего искать,и где.
- Код: Выделить всё • Развернуть
//=============================================================================
// Copyright (C) 2003 Atmel Corporation
//
// File: bootldr.xcl
// Linker: IAR Atmel AVR Linker
// Created: 14-Feb-2003 JP (Atmel Finland)
// Modified:
//
// Support Mail: avr@atmel.com
//
// Description: Linker file. This file is configured from
//
// Project Options->XLINK->#define
//
// This version utilizes the interrupt vector table for
// program code in order to shrink the target size.
//
// Other Info: For more information, refer to the Application Note
// Documentation.
//=============================================================================
-ca90
-w29
-DSRAM_BASE=200 /* Start of ram memory */
-DSRAM_TEND=100 /* End of tiny ram memory */
-DSRAM_END=21FF /* End of ram memory */
//=============================================================================
// Interrupt vectors
-Z(CODE)INTVEC=1E000-(1E0CC-1) // 0-(IVT_SIZE-1) ///(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1) //
//=============================================================================
// Code memory
-Z(CODE)NEAR_F,HUGE_F,SWITCH,INITTAB,DIFUNCT,NEAR_ID,CODE=(1E000+IVT_SIZE)-1FFFF // (FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1) //
-Z(FARCODE)FAR_F=(1E000+IVT_SIZE)-1FFFF //(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-1) //
-H1895 -h(CODE)1E000-1E0CC //-h(CODE)00000-1E000 //(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1) //(1E000-1E0CC) //
//-H7777 //(FLASH_SIZE-BOOT_SIZE)-(FLASH_SIZE-BOOT_SIZE+IVT_SIZE-1)
//=============================================================================
// RAM
//-Z(DATA)TINY_I,TINY_Z,TINY_N=RAM_BASE-FF
-Z(DATA)NEAR_I,NEAR_Z=RAM_BASE-SRAM_END //(RAM_BASE+RAM_SIZE-1)
//-Z(DATA)RSTACK+40=RAM_BASE-SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */ //(RAM_BASE+RAM_SIZE-1)
//-Z(DATA)CSTACK+200=RAM_BASE-SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */ //(RAM_BASE+RAM_SIZE-1)
-Z(DATA)RSTACK+40=(RAM_BASE)-(RAM_BASE+RAM_SIZE-1)
-Z(DATA)CSTACK+(RAM_SIZE-60)=200-21FF //RAM_BASE-(RAM_BASE+RAM_SIZE-1) //200=RAM_BASE-(RAM_BASE+RAM_SIZE-1) //
- Код: Выделить всё • Развернуть
BOOT_SIZE=2000
FLASH_SIZE=10000
IVT_SIZE=CC
RAM_SIZE=2000
RAM_BASE=200
может, что то все таки не так?
grek » 16 авг 2012, 02:36
Может кто все-таки подскажет как переделать загрузчик AVR230 или AVR231 под атмегу1281. Не как не получается, вроде как что то шьется, а в микросхеме ничего нет.Но пробовал пока только AVR230
.