buktak 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Пишу простенькую программу. В программе нужно с помощью IAP считывать данные из определенной области. Иногда в эту область нужно записывать данные. А как эти данные проинициализировать при прошивке, чтобы при первом считывании не получить мусор? Работаю с LPC2378, среда Keil uVision. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Добавьте magic number и/или CRC, и инициализируйте при несовпадении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба А как эти данные проинициализировать при прошивке, чтобы при первом считывании не получить мусор?Если я правильно понял вопрос, то объявить константный массив, задав ему конкретный адрес или сегмент (что-то вроде @ addr, не знаю точно как это будет у кейла). Что-то вроде такого:typedef struct { uint32_t a; uint8_t b; } my_struct_t; my_struct_t const config_array[] @ 0x12345 = { { 1,2}, {3, 4} } Тогда содержимое этого массива попадет в файл прошивки. И еще надо позаботиться, чтобы компилятор не выкинул этот массив при оптимизации. Но раз планируется чтение, то значит обращение к этому массиву будет, и коомпилятор его оставит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
buktak 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Если я правильно понял вопрос, то объявить константный массив, задав ему конкретный адрес или сегмент (что-то вроде @ addr, не знаю точно как это будет у кейла). Спасибо за наводку. У Keil'a будет так: #include <absacc.h> int var __at (0x4000E800) = 100; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться