|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Jan 27 2010, 11:47
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
Я неточно изложил вопрос, извиняюсь. 1 - это проект, который можно править в компиляторе, получить бинарный файл, и заливать в начало флешь. а 2 - это именно бинарный файл, исходников его нет. так вот, возможно ли из 1 - го проекта при определенных условиях передать управление второй прошивке?
|
|
|
|
|
Jan 27 2010, 11:56
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
А почему не будет???
|
|
|
|
|
Jan 27 2010, 12:25
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
Хм...теперь ясно.. А как можно поменять стартовый адрес программы на этапе компиляции? Компилятор кейл.
|
|
|
|
|
Jan 27 2010, 12:37
|

Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 1-10-07
Из: НЧ
Пользователь №: 30 966

|
сделай свой скаттер файл и на вкладке Linker, в настройках проекта укажи его. вот например Код ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x00201400 0x00000800 { ; load region size_region ER_IROM1 0x00201400 0x00000800 { ; load address = execution address *.o (RESET, +First) .ANY (+RO) .ANY (+RW +ZI) } } стартовый адрес 0x00201400, в область памяти начиная с 0x00201400 и размером 0x00000800 байт будет "линковаться" вся программа, и код(.ANY (+RO)) и переменные (.ANY (+RW +ZI)). Первым линкер положит секцию RESET (*.o (RESET, +First)), в которой содержится у меня стартап код и вектора сброса и прерываний.
|
|
|
|
|
Jan 27 2010, 12:46
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
Да, спасибо! Только что сам залез в кейл, и нашел там эти настройки. И если я допустим, создам 2 одинаковых проекта, с разницей лишь в стартовых адресах, и запишу обе программы по своим адресам, то смогу переключаться с одной на другую?
|
|
|
|
|
Jan 27 2010, 12:53
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
Универсальная - то есть одна для двух программ?
|
|
|
|
|
Jan 27 2010, 13:15
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
пока не понятно, но разберусь я думаю...спасибо!
|
|
|
|
|
Jan 27 2010, 14:43
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
в контроллере сейчас работают 2 разных приложения, переключаясь поочередно между собой, оба созданы в кейле, и записаны на разные адреса. и при включении начинает работать 1-е приложение. А для того чтобы грузить при включении сразу второе, нужно направить на него вектор ресет, я так понимаю. А как это сделать в кейле?
|
|
|
|
|
Jan 27 2010, 15:56
|

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

|
Цитата(Freeuser @ Jan 27 2010, 16:43)  А для того чтобы грузить при включении сразу второе, нужно направить на него вектор ресет, я так понимаю. А как это сделать в кейле? Это никак нельзя сделать не только в кейле, но и в кристалле. За исключением случая, когда приложения лежат в разных (внутреняя/внешняя) памятях и у процессора есть специальная нога для этого. В вашем случае первое приложение сразу после старта должно проверять какой-либо признак, и по этому признаку идти дальше или передавать управление на вектор ресета второго приложения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 28 2010, 07:21
|
Участник

Группа: Участник
Сообщений: 66
Регистрация: 18-11-09
Из: Мск
Пользователь №: 53 718

|
понятно..спасибо. буду делать как Вы посоветовали.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|