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

 
 
> Внутренний flash для хранения пользовательских данных, как правильно?
athlon64
сообщение Jul 6 2010, 03:18
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



В процессоре at91sam7x512 нужно отдать последние 128Кб для хранения настроек устройства (конфигурационного файла).
Запись и чтение у меня сделано и работает, но начиная с определённого размера конфигурации, запись повреждает основную программу.
В icf-файле уменьшил адрес конца ROM __ICFEDIT_region_ROM_end__ со стандартных 0x17FFFF до 0x15FFFF, чтобы линкер не помещал программу выше 384Кб флеша. Но, видимо, этого недостаточно.
Как правильно настроить линкер?
Прикрепленные файлы
Прикрепленный файл  flash.zip ( 899 байт ) Кол-во скачиваний: 21
 


--------------------
Руслан
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
athlon64
сообщение Jul 6 2010, 14:11
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(cornflyer @ Jul 6 2010, 14:14) *
добавь в main.c
#include <intrinsics.h>

тогда иар ругатся не будет
__enable_interrupt(); // это глобальное прерывание

Конфигурация 272 байта:
Теперь из 5 пачек по 62 байта пишет все
Тут же при контрольном чтении читает 4 и виснет

Конфигурация 968 байт:
Пишет успешно 3 пачки по 62 байта и виснет

Конфигурация 348 байт:
Пишется 5 пачек по 62 байт и виснет
При повторной записи виснет после 2 пачек

Во всех случаях после резета начинает выполнять программу и зависает

Вот такие вот дела sad.gif


--------------------
Руслан
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 7 2010, 16:03
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(athlon64 @ Jul 6 2010, 17:11) *
Во всех случаях после резета начинает выполнять программу и зависает

Вот такие вот дела sad.gif

Для того чтобы функции __enabled_interrupt() и __disable_interrupts() работали, необходимо чтобы проц был в SYS или SVC режиме.
В USR mode эти фукнции работать не будут.

В USR mode запретить прерывания можно так:
Код
U32 iMask = pAIC->AIC_IMR;
pAIC->AIC_IDCR = 0xFFFFFFFF;

// execute function from SRAM
...

// restore interrupt sources
pAIC->AIC_IECR = iMask;


Цитата(athlon64 @ Jul 7 2010, 10:18) *
Из flash

А надо из RAM.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- athlon64   Внутренний flash для хранения пользовательских данных   Jul 6 2010, 03:18
- - athlon64   Посмотрел map-файл, линкер действительно не помеща...   Jul 6 2010, 04:48
- - cornflyer   проверь содержимое Flash Mode Register: AT91C_BASE...   Jul 6 2010, 05:42
- - athlon64   Цитата(cornflyer @ Jul 6 2010, 11:42) про...   Jul 6 2010, 05:59
- - cornflyer   пропиши строчку: AT91C_BASE_MC->MC_FMR = ((AT91...   Jul 6 2010, 06:14
- - athlon64   Цитата(cornflyer @ Jul 6 2010, 12:14) про...   Jul 6 2010, 06:37
- - cornflyer   выкладывай код функций чтения/записи.... во время ...   Jul 6 2010, 07:37
- - athlon64   Цитата(cornflyer @ Jul 6 2010, 13:37) во ...   Jul 6 2010, 08:04
|- - dimka76   Функция КодFLASHD_Write(firstPageAddress+...   Jul 7 2010, 07:05
- - cornflyer   добавь в main.c #include <intrinsics.h> тог...   Jul 6 2010, 08:14
- - cornflyer   я к сожалению только сейчас получил возможность по...   Jul 7 2010, 06:37
- - athlon64   Цитата(dimka76 @ Jul 7 2010, 13:05) Функц...   Jul 7 2010, 07:18
- - athlon64   В общем разобрался в ситуации, дело было не в боби...   Jul 15 2010, 04:49


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

 


RSS Текстовая версия Сейчас: 20th August 2025 - 10:12
Рейтинг@Mail.ru


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