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

 
 
 
Reply to this topicStart new topic
> Инициализация данных при прошивке
buktak
сообщение Jun 3 2009, 15:46
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 21-01-08
Пользователь №: 34 263



Пишу простенькую программу.
В программе нужно с помощью IAP считывать данные из определенной области. Иногда в эту область нужно записывать данные.
А как эти данные проинициализировать при прошивке, чтобы при первом считывании не получить мусор?
Работаю с LPC2378, среда Keil uVision.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 3 2009, 15:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Добавьте magic number и/или CRC, и инициализируйте при несовпадении.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 3 2009, 20:47
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(buktak @ Jun 3 2009, 18:46) *
А как эти данные проинициализировать при прошивке, чтобы при первом считывании не получить мусор?
Если я правильно понял вопрос, то объявить константный массив, задав ему конкретный адрес или сегмент (что-то вроде @ addr, не знаю точно как это будет у кейла). Что-то вроде такого:
Код
typedef struct
{
   uint32_t a;
   uint8_t b;
} my_struct_t;

my_struct_t const  config_array[] @ 0x12345 =
{
  { 1,2},
  {3, 4}
}
Тогда содержимое этого массива попадет в файл прошивки. И еще надо позаботиться, чтобы компилятор не выкинул этот массив при оптимизации. Но раз планируется чтение, то значит обращение к этому массиву будет, и коомпилятор его оставит.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
buktak
сообщение Jun 4 2009, 08:37
Сообщение #4





Группа: Новичок
Сообщений: 6
Регистрация: 21-01-08
Пользователь №: 34 263



Цитата(Сергей Борщ @ Jun 4 2009, 02:47) *
Если я правильно понял вопрос, то объявить константный массив, задав ему конкретный адрес или сегмент (что-то вроде @ addr, не знаю точно как это будет у кейла).

Спасибо за наводку.
У Keil'a будет так:

#include <absacc.h>

int var __at (0x4000E800) = 100;
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 21:42
Рейтинг@Mail.ru


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