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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> WinAVR(avr gcc 4.1.2): использование RAM и ЕЕПРОМ, компилятор
namelos
сообщение Sep 24 2007, 15:02
Сообщение #16


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Цитата
У меня с константой не прошло. Работает только при O0. При Os уже мои данные в 0 адресе.

Странно. И куда же записывалась первая константа? Я проверил, запись констант EEPROM при Os начинается с 0 адреса, ввел в начале дополнительную константу, она размещается под 0-адресом.

Сообщение отредактировал namelos - Sep 24 2007, 15:15
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 24 2007, 18:44
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(namelos @ Sep 24 2007, 19:02) *
Странно. И куда же записывалась первая константа? Я проверил, запись констант EEPROM при Os начинается с 0 адреса, ввел в начале дополнительную константу, она размещается под 0-адресом.

Ну вот примерно так:

#include <avr/io.h>
#include <avr/eeprom.h>


uint8_t EEMEM non_zero = 31;
uint8_t EEMEM store = 6;
unsigned int tmp;

int main (void)
{
tmp = eeprom_read_byte(&store);
while(1)
{
;
}
return (1);
}

В результате при оптимизации О0 еепром выглядит правильно 0x0000 0x1F 0x06
При Os все не так радужно 0x0000 0x06 0x1F
WinAvr20060421.
Прикрепленные изображения
Прикрепленное изображение Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
namelos
сообщение Sep 24 2007, 22:27
Сообщение #18


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

Группа: Свой
Сообщений: 77
Регистрация: 4-08-06
Пользователь №: 19 324



Попробуй так
Код
#inlcude <avr/eeprom.h>

#define   EESIZE   512 // max size

uint8_t ee_mem[EESIZE] EEMEM =
{
  0x00,  //zero                
  0x1F,   //non_zero                
  0x06    //store              
};
int main (void)
{
uint8_t tmp;    
tmp = eeprom_read_byte(ee_mem+2);

return (1);
}

по-моему должно сработать...smile.gif

Сообщение отредактировал namelos - Sep 24 2007, 22:28
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 24 2007, 22:49
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(namelos @ Sep 25 2007, 02:27) *
Попробуй так
.....
по-моему должно сработать...smile.gif

Так сработает, но уж очень способ неудобный. А если переменные разных типов, то что - структуру вместо массива???? Тогда уж можно просто eeprom_write_block использовать... В общем удобного решения так и не найдено. Я пробовал секции в еепром создавать, указывая стартовый адрес, но что-то лыжи не едут, а так было бы самым красивым решением. Надо попробовать то,что aesok предложил...
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 25 2007, 09:36
Сообщение #20


кекс
******

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



Цитата(Qwertty @ Sep 24 2007, 21:44) *
Так сработает, но уж очень способ неудобный.

Такие "забобоны" как проблемы с адресом 0 считаю надуманными.
Поступаю так:
Конфигурация устройства с которой я работаю хранится в ОЗУ, в eeprom записывается две копии кофигурации защищенных CRC8. При стартапе хоть одна копия да будет целой, она и читается в ОЗУ целиком, сбойнувшая перезаписывается целой. Если слетели обе копии конфигурации (такого у меня на счету не бывало) - устанавливаются параметры по-умолчанию.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Sep 26 2007, 20:53
Сообщение #21


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



В дополнение к сказанному defunct.
Деле так: пишется блок данных с CRC три раза. Считывается все при старте. Проверяется CRCблока, а далее мажоритарная схема 2 из 3. Проблем не было.

Сообщение отредактировал mdmitry - Sep 26 2007, 20:53


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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