|
Как в Keil разместить массив во флеш чтоб не висел в ОЗУ, и как настроить printf чтоб вывод через usart? |
|
|
|
Nov 14 2011, 08:03
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Есть массив Код const unsigned char rf_fram_table[][3]={ {0x30,0x98,0x00},{0x31,0xff,0x0F},{0x32,0x80,0x28},{0x33,0x80,0x56}, {0x34,0x4E,0xF6},{0x35,0xF6,0xF5},{0x36,0x18,0x5C},{0x37,0xD6,0x51}, {0x38,0x44,0x04},{0x39,0xE0,0x00} }; Используется он один раз при инициализации. Их таких одноразовых несколько. Нужно сделать так чтобы содержимое этих массивов не висело в ОЗУ и не занимало место бесцельно. Как это сделать? И еще нужно настроить printf на вывод через usart0 LPC2103. Собственно usart0 настроил, а как чтоб в него посредством printf ? Спасибо.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
 |
Ответов
|
Nov 14 2011, 13:43
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(aaarrr @ Nov 14 2011, 14:38)  В C-файле #pragma arm section, в scatter'е прописать соответствующую секцию по нужному адресу. Спасибо, я так и думал. но - я сижу разбираюсь с чужим исходником, вот выделил кусок ко всему этому относящемуся: Код // Save/Load Config
#define DMA_BUF_A 0x2007C000 #define CFG_ADDR 0x00078000
// #define IAP_ADDRESS 0x1FFF1FF1
#define cmdPrepareSector 50 #define cmdCpyRAM2FLASH 51 #define cmdEraseSector 52
#define CMD_SUCCESS 0
// uint32_t cmd[5]; uint32_t res[5]; // BYTE *IAPBuffer = (BYTE *) (DMA_BUF_A); BYTE *Cfg_flash = (BYTE *) (CFG_ADDR);
//================================================================================ ==============
void iap_entry(unsigned int param_tab[], unsigned int result_tab[]) { void (*iap)(unsigned [],unsigned []);
iap = (void (*)(unsigned [],unsigned []))IAP_ADDRESS; iap(param_tab,result_tab); } //-------------------------------------------------------------------------------------------------- // config >> flash
int SaveConfig(void){ uint32_t WaitTime;
memcpy(IAPBuffer, &config, sizeof(config));
__disable_irq(); cmd[0] = cmdPrepareSector; cmd[1] = 29; cmd[2] = 29; cmd[3] = 96000; iap_entry (cmd, res); if (res[0] != CMD_SUCCESS) return 0; cmd[0] = cmdEraseSector; cmd[1] = 29; cmd[2] = 29; cmd[3] = 96000; iap_entry (cmd, res); if (res[0] != CMD_SUCCESS) return 0;
cmd[0] = cmdPrepareSector; cmd[1] = 29; cmd[2] = 29; cmd[3] = 96000; iap_entry (cmd, res); if (res[0] != CMD_SUCCESS) return 0;
cmd[0] = cmdCpyRAM2FLASH; cmd[1] = CFG_ADDR; cmd[2] = DMA_BUF_A; cmd[3] = 256; cmd[4] = 96000; iap_entry (cmd, res); if (res[0] != CMD_SUCCESS) return 0;
WaitTime = 0x027FFFFF; while(WaitTime--); __enable_irq();
return 1; } //--------------------------------------------------- // config << flash void Load_Config(void){ memcpy(&config, Cfg_flash, sizeof(config)); return; }
//================================================================================ ================= никакого scatter файла я в проекте не нашел. более того - я ни одной pragma, (кроме тех, что были в core_cm3.c и lpc17xx.h) в файлах проекта не нашел. Проект работает, но помоему аффтор просто взял кусок флеша, заведомо выше программы, и все!
|
|
|
|
Сообщений в этой теме
smk Как в Keil разместить массив во флеш чтоб не висел в ОЗУ Nov 14 2011, 08:03 Палыч Цитата(smk @ Nov 14 2011, 12:03) Как это ... Nov 14 2011, 08:16 esaulenka Цитата(smk @ Nov 14 2011, 12:03) Есть мас... Nov 14 2011, 09:01 smk Цитата(esaulenka @ Nov 14 2011, 11:01) C:... Nov 15 2011, 06:28 smk Даю map. Как я понял массивы в ОЗУ.
Nov 14 2011, 11:47 aaarrr Цитата(smk @ Nov 14 2011, 15:47) Даю map.... Nov 14 2011, 12:18  smk Цитата(aaarrr @ Nov 14 2011, 14:18) Нет, ... Nov 14 2011, 12:51    Allregia Цитата(aaarrr @ Nov 14 2011, 16:10) Ну, м... Nov 14 2011, 15:09 ViKo Цитата(smk @ Nov 14 2011, 11:03) Нужно сд... Nov 14 2011, 14:20
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|