|
Шаблон (tamplete ) для работы с EEPROM |
|
|
|
Jul 29 2013, 06:42
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jul 30 2013, 05:18
|
Участник

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

|
Цитата(=F8= @ Jul 29 2013, 12:01)  А теперь подставьте вместо eeType к примеру char и что вы получите?... Да вот проблема Keil ругается на template <typename eeType> "this declaration has no storage class or type specifier". не могу заставить работать, хотя в Visual Studio без пролбем. На сколько я понимаю __no_init, segment, location, pack это директивы препроцессора ? Огромное спасибо всем по поводу советов размещения переменных в EEPROM.
Сообщение отредактировал IgorKossak - Aug 1 2013, 06:30
Причина редактирования: бездумное цитирование
|
|
|
|
Сообщений в этой теме
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  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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|