Как разместить программу в STM32F4xx начиная с сектора 1
28.09.2014, 00:49
|
|
|
Временная регистрация
Регистрация: 19.08.2014
Сообщений: 60
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
"Быть не может" - НО ТАК ОНО И ЕСТЬ. Такова физическая организация Flash. Попробуйте сами.
|
|
|
|
28.09.2014, 00:53
|
|
|
Временная регистрация
Регистрация: 19.08.2014
Сообщений: 60
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
"быть не может" - НО ТАК ОНО И ЕСТЬ. ТАКОВА физическая организация Flash. Попробуйте на ЛЮБОМ микроконтроллере.
|
|
|
|
28.09.2014, 01:00
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
А вы сами попробуте - сотрите страницу, запишите в в 0 адрес страницы 1. Завершите запись. А потом, не стирая, запишите,например, В адрес 100 стрницы 2. И помотрите что будет.
|
|
|
|
28.09.2014, 10:11
|
|
|
Временная регистрация
Регистрация: 19.08.2014
Сообщений: 60
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Я хочу отвести под константы, например, сектор 11 (128Кб). Туда нужно писать константы типа сhar, int, float. Для записи каждой ОТДЕЛЬНОЙ константы нужно сперва ПРОЧИТАТЬ содержимое сектора 1 в БУФЕР, изменить в БУФЕРЕ содержимое по необходимым адресам, СТЕРЕТЬ сектор 1 (после стирания во всех ячейках сектора - 0хFF), записать в сектор 1 ВСЕ содержимое БУФЕРА. Поэтому нужно выбирать Flash c минимальными по объему секторами. Так реализуется запись в Flash.
|
|
|
|
28.09.2014, 11:05
|
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Главное условие для записи, что бы по адресу записи было FF, и для этого нет необходимости стирать всю страницу! можно лишь смещать адрес для предстоящей записи! а вот как лучше и где сохранять адрес последней записи сократив число стираний не врублюсь! кто то это решал?
|
|
|
|
28.09.2014, 11:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Через счётчик в первом байте пакета констант
Программа последовательно ищет максимальное значение - там и будут самые свежие данные
|
|
|
|
28.09.2014, 11:55
|
|
|
Прописка
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Спасибо! теперь врубился!
|
|
|
|
28.09.2014, 12:07
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Сделал для Вас кусочек проги.
И что Вы теперь скажите?
|
|
|
|
28.09.2014, 12:11
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Ну да, еще текст, а то подумаете что при записи считываю в буфер ))
|
PHP код:
|
void ClearFlash()
{
FLASHStatus = FLASH_COMPLETE;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR |FLASH_FLAG_WRPRTERR);
if (FLASH_ErasePage(FLASH_W_ADDR )== FLASH_COMPLETE)
FLASH_Lock();
}
void ReadFlash(uint32_t adr,uint32_t *dat,int n )
{
for(int i=0;i‹n;i++)
{
dat[i] = *(__IO uint32_t *)(FLASH_W_ADDR+adr+i*4) ;
}
}
void WriteFlash(uint32_t adr, uint32_t *dat,uint32_t n)
{
FLASHStatus = FLASH_COMPLETE;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR |FLASH_FLAG_WRPRTERR);
for(int i=0;i‹n;i++)
{
FLASH_ProgramWord(FLASH_W_ADDR+adr+i*4, dat[i]);
}
FLASH_Lock();
}
///////++++++++++++
int ncol=0;
char *txk="RGY";
int main()
{
InitDev();
ClearFlash();
uint32_t rez1[8];
uint32_t rez[8]={1,2,3,4,5,6,7,8};
WriteFlash(0,rez,4); // Записали 16 байт с адреса 0
ReadFlash(0,rez1,8); // посмотрели
WriteFlash(20,&rez[4],4); // Записали еще 16 байт, но через дырочку по адресу 16
ReadFlash(0,rez1,8); // посмотрели что там у нас
|
|
|
|
|
28.09.2014, 12:47
|
|
|
Временная регистрация
Регистрация: 19.08.2014
Сообщений: 60
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Как разместить программу в STM32F4xx начиная с сектора 1
Вы показали пример отладки в RAM (0x20000000). В ФИЗИЧЕСКОЙ Flash все по другому, нашел ссылку (если не верите мне) :
http://amberclan.clan.su/publ/uroki_...2f4/11-1-0-121
Последний раз редактировалось vvv998; 28.09.2014 в 12:49.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:45.
|
|