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

 
 
> настройка проекта в ИАР 5.20, размещение функции во флеш секторе
buba
сообщение Oct 9 2009, 09:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 24-07-07
Из: Ташкент
Пользователь №: 29 326



Привет всем!

Работаю с LPC2468. Есть проблемка. Студия не хочет определять функцию main в неперезаписываемую область памяти (сектор) BOOTSEG, которую я определяю в файле .icf. Размещение в BOOTSEG связано с поддержкой IAP, которое не могу запустить. Так сделано, что IAP обработчик и основная программа запускаются из ф-ции main.
Код прилагается:

- <main.c>
//---------------------------------------------------------------------
__thumb __interwork main() @ "BOOTSEG";

//---------------------------------------------------------------------
// Non-rewritable Main function
//---------------------------------------------------------------------
__thumb __interwork main() @ "BOOTSEG"
{
if ( /* Program in LPC flash is correct */)
{ //start rewritable part of program
RW_main();
}
else
{ //start iap routines
IAP_ReLoad();
IAP_Restart();
}
}
//---------------------------------------------------------------------

- <lpc2468.icf>
//---------------------------------------------------------------------
...
define region ROM1_region = mem: [from __ICFEDIT_region_ROM_start__ to 0x00003FFF];
define region ROM2_region = mem: [from 0x00004000 to __ICFEDIT_region_ROM_end__];
...
place in ROM1_region { readonly section .difunct, section .cstart, section BOOTSEG };
place in ROM2_region { readonly };
//---------------------------------------------------------------------

- <lpc2468_project.map>
//---------------------------------------------------------------------
...
**************************************************
*** ENTRY LIST
***

Entry Address Size Type Object
----- ------- ---- ---- ------
?main 0x00011610 Code Gb cmain.o [4]
...
__iar_via_R0 0x00012045 Code Wk boot_segment.o [1]
__iar_via_R2 0x0001204d Code Wk boot_segment.o [1]
__iar_via_R3 0x00012051 Code Wk boot_segment.o [1]
__iar_via_R5 0x00012049 Code Wk boot_segment.o [1]
//---------------------------------------------------------------------


Необходимо, чтобы ф-ия main вставала между адресами 0x00001000 и 0x00004000.
Ф-ии __iar_via_Rn определяют iap-процедуры при вызове iap_entry( iap_command, iap_result );. Они тоже попадают в перезаписываемую часть памяти, хотя процедуры IAP_ReLoad() и другие определены в памяти BOOTSEG.

Подскажите, в чём дело?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Oct 9 2009, 09:52
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



c 5.xx версий @ "BOOTSEG" помоему не катит

используйте
Код
#pragma section="NAME" [align]
Go to the top of the page
 
+Quote Post
buba
сообщение Oct 9 2009, 12:29
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 24-07-07
Из: Ташкент
Пользователь №: 29 326



Цитата(MALLOY2 @ Oct 9 2009, 14:52) *
c 5.xx версий @ "BOOTSEG" помоему не катит


Дело не в этом. Это про константы:

There are major changes in the EWARM between version 4.x and version 5.x.
Absolute placement of constants are no longer allowed:
int const a @ 102030;

По хорошему мне нужен пример кода, где используется IAP.
Дело в том, что я перешел с ИАР 4.10 на 5.20. В студии 4.10 всё было ок, IAP работал.
Перешёл на 5.20, подправил проект, заработало. Стал проверять IAP, и вот застрял!

При стирании областей во флеш, стираются нужные процедуры, которые я хочу разместить в BOOTSEG. Как это сделать - пока не знаю.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 19:44
Рейтинг@Mail.ru


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