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

 
 
7 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> bootloader в IARe 3,10, Помогите разобраться как сделать
arttab
сообщение Jul 7 2006, 08:00
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Спасибо всем. разбираюсь...
А что значит:
Цитата
сделать два проекта в одном рабочем пространстве
? Я понял что в одном проекте есть и bootloader и обновляемая прога. Или Вы имели ввиду адресное пространство мк?
для линкера и экстра опций нужно указывать в байтах или в словах?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 7 2006, 08:16
Сообщение #17


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(arttab @ Jul 7 2006, 11:00) *
Спасибо всем. разбираюсь...
А что значит:
Цитата
сделать два проекта в одном рабочем пространстве
? Я понял что в одном проекте есть и bootloader и обновляемая прога. Или Вы имели ввиду адресное пространство мк?

Под рабочим пространством имеется в виду именно сущность среды проектирования, называемая workspace, в которой создаются включаемые в неё подсущности, называемые project (меню Project/Add existing project... или Create new project...).
Причём, все проекты одного рабочего пространства можно собирать групповым способом (Project/Batch build), что иногда весьма удобно.
Цитата(arttab @ Jul 7 2006, 11:00) *
для линкера и экстра опций нужно указывать в байтах или в словах?

В байтах, т. к. линкер универсальный на всю поддерживаемую IAR гамму МК.
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 7 2006, 08:27
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Сергей Борщ,
в указаном Вами файле
RSEG LOADER:CODE:NOROOT(1)
менять так:
RSEG LOADER:CODE:NOROOT(1) ?

Попробую сделать отдельный проект для загрузчика


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 7 2006, 09:37
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Jul 7 2006, 11:27) *
Сергей Борщ,
в указаном Вами файле
RSEG LOADER:CODE:NOROOT(1)
менять так:
RSEG LOADER:CODE:NOROOT(1) ?

Да, именно это.
Цитата(arttab @ Jul 7 2006, 11:27) *
Попробую сделать отдельный проект для загрузчика

Тогда оставьте c_startup как есть (точнее отключите от проекта чтобы брался библиотечный) и просто в .xcl измените:
Код
-Z(CODE)INTVEC=1800-1825 /* 19 Interrupt vectors * 2 bytes each */

/* Fill unused interrupt vector's with RETI */
-H1895 -h(CODE)1800-1825

-Z(CODE)TINY_F=1826-18FF
-Z(CODE)NEAR_F,SWITCH,INITTAB,DIFUNCT=1826-1FFF
-Z(CODE)CODE=1826-1FFF
-Z(CODE)TINY_ID,NEAR_ID=1826-1FFF
-Z(CODE)CHECKSUM#1FFF

Цитата(IgorKossak @ Jul 7 2006, 10:32) *
3. в опциях XLINK/Include в поле XCL file name укажите путь к Вашему файлу xcl.

Причем лучше в форме
Код
$PROJ_DIR$\mynew.xcl
Тогда при переносе проекта в другую папку не придется переписывать путь заново.

Сообщение отредактировал Сергей Борщ - Jul 7 2006, 09:38


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 9 2006, 05:46
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Начал делать отдельно Bootloader.
В проекте определил сегмент и внес в неё фу-ии:
#pragma segment = "LOADER"
void main(void) @ "LOADER";
void Init_USART(void) @ "LOADER";

В main переместил таб. векторов:
MCUCR = (1<<IVCE);
MCUCR = (1<<IVSEL); //move interruptvectors to the Boot sector

в XLINK/Extra Options/ прописал -Z(CODE)LOADER=1C26-1FFF
в Genetal использовать XCL не по умолчанию
в XLINK/Include прописал какой файл использовать $PROJ_DIR$\my_lnkm8s.xcl
в файле my_lnkm8s.xcl сделал так:
/*-Z(CODE)INTVEC=0-25 19 Interrupt vectors * 2 bytes each */
-Z(CODE)INTVEC=1C00-1C25


При компиляции появляется код с адресов 1С00 (вектора и прога) и 0000-009E. ???!!!!
Прикрепленные файлы
Прикрепленный файл  BOOTLOADER.rar ( 5.8 килобайт ) Кол-во скачиваний: 138
 


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 10 2006, 06:53
Сообщение #21


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(arttab @ Jul 9 2006, 08:46) *
Начал делать отдельно Bootloader.
В проекте определил сегмент и внес в неё фу-ии:
#pragma segment = "LOADER"
void main(void) @ "LOADER";
void Init_USART(void) @ "LOADER";

В main переместил таб. векторов:
MCUCR = (1<<IVCE);
MCUCR = (1<<IVSEL); //move interruptvectors to the Boot sector

в XLINK/Extra Options/ прописал -Z(CODE)LOADER=1C26-1FFF
в Genetal использовать XCL не по умолчанию
в XLINK/Include прописал какой файл использовать $PROJ_DIR$\my_lnkm8s.xcl
в файле my_lnkm8s.xcl сделал так:
/*-Z(CODE)INTVEC=0-25 19 Interrupt vectors * 2 bytes each */
-Z(CODE)INTVEC=1C00-1C25


При компиляции появляется код с адресов 1С00 (вектора и прога) и 0000-009E. ???!!!!

Если проект отдельный, нет нужды создавать сегмент LOADER.
Достаточно переопределить диапазоны адресов у существующих сегментов.
Кроме того, компилятор (а не линкер) по умолчанию использует зарезервированные имена сегментов, в частности INTVEC для векторов прерываний, NEAR_ID для инициализаторов и т. д.
И я не знаю как эти сегменты по умолчанию, используемые неявно, переключить на новые имена.
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 10 2006, 14:15
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Спасибо за подсказку. В my_lnkm8s.xcl переправил так:
/* -Z(CODE)NEAR_F,SWITCH,INITTAB,DIFUNCT=26-1FFF */
-Z(CODE)NEAR_F,SWITCH,INITTAB,DIFUNCT=1C26-1FFF
/* -Z(CODE)CODE=26-1FFF */
-Z(CODE)CODE=1C26-1FFF
/* -Z(CODE)TINY_ID,NEAR_ID,CHECKSUM=26-1FFF */
-Z(CODE)TINY_ID,NEAR_ID,CHECKSUM=1C26-1FFF

Код в начале остался только с 00 по 25.

А как сделать 2 проекта в одном пространстве? Что получиться на выходе? 2 Hex файла? И что это дает?
И еще вопрос по операциям стирания и записи в буфер....
Это все делается через регистры РОН. К ним можно получить доступ из Си? no_init unsigned char @ 0x00 RR0 Или нужно делать асм. вставки? Не будет ли конфликта с компилятором?
Ы.З. Похоже из моих попыток получиться пособие для других как сделать bootloader smile.gif


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 10 2006, 17:59
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Jul 10 2006, 17:15) *
Код в начале остался только с 00 по 25.

Обрати внимание на строчку .xcl:
-H1895 -h(CODE)00-25
Цитата(arttab @ Jul 10 2006, 17:15) *
А как сделать 2 проекта в одном пространстве? Что получиться на выходе? 2 Hex файла? И что это дает?
общие исходные файлы?
Цитата
И еще вопрос по операциям стирания и записи в буфер....
Это все делается через регистры РОН. К ним можно получить доступ из Си?
Не совсем понял о каком буфере идет речь, но если о команде SPM, то обрати внимание на функции и макросы из intrinsics.h:
Код
#define _SPM_FILLTEMP(Addr,Data)  \
  __AddrToZWordToR1R0ByteToSPMCR_SPM((void __flash*)(Addr), (Data), 0x01)

#define _SPM_PAGEWRITE(Addr) \
  __AddrToZByteToSPMCR_SPM((void __flash*)(Addr), (0x05))

Цитата
Ы.З. Похоже из моих попыток получиться пособие для других как сделать bootloader smile.gif

Ну если описать толково, то beer_warrior не должен отказаться включить в FAQ :-)

Сообщение отредактировал Сергей Борщ - Jul 10 2006, 18:00


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 11 2006, 02:05
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата
Обрати внимание на строчку .xcl:
-H1895 -h(CODE)00-25

Увидел. Исправил -H1895 -h(CODE)1C0-1C25
Кстати, в примерах видел выражения типа FLASH_SIZE-BOOT_SIZE, но у меня так сделать не вышло. Нужно какуюто библиотеку прицепить?
Цитата
Не совсем понял о каком буфере идет речь, но если о команде SPM, то обрати внимание на функции и макросы из intrinsics.h:

Оно. Я не ясно выразился, но Вы правильно поняли. Поразбараюсь с intrinsics.h
Спасибо, буду дальше разбираться


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 11 2006, 03:03
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Сергей Борщ? А где лежит файл intrinsics.h? не нашел в каталоге IAR. Или это в старшей версии есть?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 11 2006, 09:00
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Jul 11 2006, 06:03) *
Сергей Борщ? А где лежит файл intrinsics.h? не нашел в каталоге IAR. Или это в старшей версии есть?
Не знаю что считать старшей версией, у меня в 4.10B лежит в каталоге IAR\AVR\INC


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 11 2006, 09:36
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Цитата
Не знаю что считать старшей версией

Имел в виду цифры версии. В 4.10 есть, а в моей 3.10 нет. файл взял у др. человека.
Как я понял, в этом файле описываются функции. Если я подключю к своему проекту, не будет ли конфликта версий? Или взять из файла только нужное:
__intrinsic void __DataToR0ByteToSPMCR_SPM(unsigned char data, unsigned char byte);

__DataToR0ByteToSPMCR_SPM
{
MOV R0,data
OUT SPMCR,byte
SPM
}
Или надо переходить на версию 4.10 и старше (>4.10)


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 11 2006, 14:15
Сообщение #28


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttab @ Jul 11 2006, 12:36) *
Цитата
Не знаю что считать старшей версией

Имел в виду цифры версии. В 4.10 есть, а в моей 3.10 нет.
Да, извиняюсь. Я поискал упоминание версии в постах а в тему и не посмотрел :-)
Цитата
файл взял у др. человека.
Как я понял, в этом файле описываются функции. Если я подключю к своему проекту, не будет ли конфликта версий?
В нем описываются прототипы функций. Сами тела __intrinsic- функций знает компилятор. Это позволяет ему встраивать тела функций в код очень эффективно.
Цитата
Или взять из файла только нужное:
__intrinsic void __DataToR0ByteToSPMCR_SPM(unsigned char data, unsigned char byte);
__DataToR0ByteToSPMCR_SPM
{
MOV R0,data
OUT SPMCR,byte
SPM
}
Боюсь такой вариант не пройдет. Особенно последняя смесь асма и С. Если нет возможности перейти на более свежую версию - то имеет смысл эти функции написать самому на асме (как в приложенных файлах от апликашки AES loader). Однако такой вариант будет менее эффективным ибо компилятор не сможет встроить такие функции.
Цитата
Или надо переходить на версию 4.10 и старше (>4.10)
Это наиболее здравое решение. Снизу вверх проекты конвертятся легко.
Прикрепленные файлы
Прикрепленный файл  spm.ZIP ( 1.49 килобайт ) Кол-во скачиваний: 135
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 12 2006, 09:02
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Уф, переполз на 4.12А. с трудом.
intrinsics.h нужно подключить к проекту или она автоматом как только сделаю вызов ее функций?
выражения типа FLASH_SIZE-BOOT_SIZE работают в этой версии?
Пока поразбираюсь SPM функциями intrinsics.h


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Jul 13 2006, 07:33
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



Сергей Борщ, не моглибы Вы прокоментировать мои изыскания:
/*
__DataToR0ByteToSPMCR_SPM, pseudo code.
MOV R0,data
OUT SPMCR,byte
SPM
*/
__intrinsic void __DataToR0ByteToSPMCR_SPM(unsigned char data,
unsigned char byte);
Какой смысл этой команды? Нужно по 2 байта в буфер отправлять,
а по одному R0 не используется.
//-------------------------------------------
/*
__AddrToZByteToSPMCR_SPM, pseudo code.
MOVW R31:R30,addr
OUT SPMCR,byte
SPM
*/
__intrinsic void __AddrToZByteToSPMCR_SPM(void __flash* addr,
unsigned char byte);

Передается адрес и выполняется возможная команда ( команда - byte):
стирание страници, запись страници
//------------------------------------------------
/*
__AddrToZWordToR1R0ByteToSPMCR_SPM, pseudo code.
MOVW R31:R30,addr
MOVW R1:R0,word
OUT SPMCR,byte
SPM
*/
__intrinsic void __AddrToZWordToR1R0ByteToSPMCR_SPM(void __flash* addr,
unsigned short word,
unsigned char byte);
запись данных word (2 Б) в буфер по адресу addr.
значение byte фиксировано (1<<PGWRT)&(1<<SPMEN)
//----------------------------------------------
/*
__AddrToZByteToSPMCR_LPM, pseudo code.
MOVW R31:R30,addr
OUT SPMCR,byte
LPM
*/
__intrinsic unsigned char __AddrToZByteToSPMCR_LPM(void __flash* addr,
unsigned char byte);
Ошибка или это что то специфическое?
//---------------------------------------
Что то не понял я с этой библиотекой
И как Вы управляли самопрограммированием (какие функции использовали для стирания, записи, ожидания готовности...).


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post

7 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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