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

 
 
> Шаблон (tamplete ) для работы с EEPROM
paravozru
сообщение Jul 29 2013, 06:42
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-07-12
Пользователь №: 72 586



Возникла проблема при работе с EEPROM на STM32L-Discovery
Как можно создать адресацию EEPROM в заголовочном файле. Вот грабли на которые я наткнулся: в заголовочном файле .h сначала объявил указатели и им присвоил адреса вот примерно так
1.Мысля:
uint16_t *ModBusAddr = (uint16_t *)0x08080000;
в каком то .с файле вызов функции чтения EEPROM
uint16_t ReadEEPROM(uint16_t *addr) { // функция чтения EEPROM принимающая адрес указателя, и возвращающая uint16_t
uint16_t *ptr;
uint16_t result;
ptr = (uint16_t *)(addr);
result = *ptr;
return result;
}
Вот грабли №1: Keil выдал ошибку что множественное объявление «ModBusAddr » , оказывается можно только объявить переменные в .h но присвоить значения можно только в .с файлах.

2. Мысля
Решил адресацию EEPROM через #define
#define ModBusAddr 0
в таком случае функция чтения EEPROM приняла вид
uint16_t ReadEEPROM(uint16_t addr) { // функция чтения EEPROM принимающая позицию в памяти , и возвращающая uint16_t
uint16_t *ptr;
uint16_t result;
ptr = (uint16_t *)(eepromADR + addr ); // где #define eepromADDR 0x08080000 - начало EEPROM в STM32L-discovery
result = *ptr;
return result;
}
вот грабли №2: Да все работает, но во первых придется рассчитать каждый short, int, переменную в адресном пространстве EEPROM и задавать последовательность 0,1,2,3,4 и т п
Например для
#define ModBusAddr 0 //так в голове держу 0x08080000 , выделю два байта для этой переменной
#define ModBusFunc 2 // так в голове держу 0x08080002 выделю два байта для этой переменной
и т д.
Вот еще проблема функция uint16_t ReadEEPROM(uint16_t addr) имеет тип uint16 что принимаемый что возвращаемый, как быть если я хочу выделить для одной переменной например только байт, для другой два байта, а с float что делать ?

Тоже подумал и решил так создам Шаблон функции которая будет принимать различные типы данных и в зависимости от этого читать определенное количество байт с EEPROM/

template<typemane eeType>

eeType ReadEEPROM(eeType addr) {
eeType *ptr;
eeType result;
ptr = (eeType *)(addrEEPROM + adrr);
result = *ptr;
return result;
}

Проошу помощи, каким образом Вы распределяете память и как описаны функции чтения и записи c различными типами данных с EEPROM.

Забыл указать, при создании шаблона Keil выдал ошибку "this declaration has no storage class or type specifier"

Сообщение отредактировал paravozru - Jul 29 2013, 06:46
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- paravozru   Шаблон (tamplete ) для работы с EEPROM   Jul 29 2013, 06:42
- - jcxz   1. При объявлении переменной, задаёте ей альтернат...   Jul 29 2013, 08:46
|- - paravozru   Цитата(jcxz @ Jul 29 2013, 12:46) 1. При ...   Jul 29 2013, 09:57
|- - jcxz   Так я же привёл пример.   Jul 29 2013, 09:59
- - =F8=   А теперь подставьте вместо eeType к примеру char и...   Jul 29 2013, 09:01
|- - paravozru   Цитата(=F8= @ Jul 29 2013, 12:01) А тепер...   Jul 30 2013, 05:18
|- - paravozru   в .icf define symbol __region_EEPROM_start__= 0x08...   Jul 30 2013, 11:34
|- - MrYuran   Цитата(paravozru @ Jul 30 2013, 14:34) #p...   Jul 30 2013, 11:41
- - =F8=   Цитата(paravozru @ Jul 29 2013, 12:57) Не...   Jul 29 2013, 10:52
|- - jcxz   Цитата(=F8= @ Jul 29 2013, 16:52) в .с #p...   Jul 29 2013, 11:03
|- - =F8=   Цитата(jcxz @ Jul 29 2013, 14:03) А это з...   Jul 29 2013, 11:23
|- - paravozru   Цитата(=F8= @ Jul 29 2013, 15:23) Мдя... ...   Jul 29 2013, 12:27
|- - =F8=   Цитата(paravozru @ Jul 29 2013, 15:27) но...   Jul 29 2013, 14:50
- - Golikov A.   я сделал файл EEPROM который пихает данные и читае...   Jul 29 2013, 13:43
|- - paravozru   Цитата(Golikov A. @ Jul 29 2013, 17:43) я...   Jul 29 2013, 13:48
|- - Golikov A.   Цитата(paravozru @ Jul 29 2013, 17:48) Пр...   Jul 31 2013, 07:31
|- - Сергей Борщ   QUOTE (Golikov A. @ Jul 31 2013, 09:31) О...   Jul 31 2013, 08:01
|- - =F8=   Цитата(Golikov A. @ Jul 31 2013, 10:31) Ч...   Aug 3 2013, 08:55
- - DASM   Когда-то задавлся таким вопросом, вкратце тут http...   Jul 31 2013, 07:53
- - Golikov A.   приват можно делать не только через статик, а прос...   Aug 2 2013, 10:53
- - Сергей Борщ   QUOTE (Golikov A. @ Aug 2 2013, 12:53) пр...   Aug 2 2013, 14:47
- - Golikov A.   Цитата(Сергей Борщ @ Aug 2 2013, 18:47) К...   Aug 5 2013, 10:19


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

 


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


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