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

 
 
> Вопрос по CV AVR, cvavr
NickSmith
сообщение Feb 22 2011, 21:01
Сообщение #1


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

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Добрый день, вечер, ночь!
Начал осваивать Си и столкнулся с двумя проблемами
1. Массивы
Мне нужно сделать массив в eeprom для хранения настроек моего устройства. У устройства есть три функции имеющие две переменных у каждой.
Т.е я создал три массива по десять строк и две ячейки в каждой строке.
Когда я попытался создать ссылки на все эти массивы, то получил отлуп. Если делать одномерный массив, то все проходит, но как только добавляется колличество ячеек в строке, все CV ругается
вот код
Код
// Declare your global variables here

eeprom unsigned int m3 [10][2];
eeprom unsigned int m4 [10][2];
eeprom unsigned int m7 [10][2];
eeprom unsigned int *bdz[]={m3,m4,m7};

И еще я не смог найти пример, как мне выдрать от туда нужные данные
Например у меня есть две переменные в которых должны считываться ячейки из какого либо массива
напр
а,б как мне в них загрузить значение из например m3 строки 3???
Понимаю, что вопрос глупый, но я только осваиваю язык, а описания как это сделать так и не нашел.
2.
Для вывода на индикатор использую функцию sprintа
Код
sprintf(lcd_buffer,"Fq:%i.%u",ts/100,ts%100);

в итоге если я вывожу значение например 1000 у меня выводится на дисплей 10.0. Как только я начинаю уменьшать или увеличивать это число появляется еще один разряд после запятой. Как сделать, что бы у меня всегда выводилось 10.00??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
NickSmith
сообщение Feb 26 2011, 19:28
Сообщение #2


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

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Переполз на IAR и опять те же грабли..
делаю так:
Код
__eeprom unsigned int m3 [10][2];
__eeprom unsigned int m4 [10][2];
__eeprom unsigned int m7 [10][2];
__eeprom unsigned int *bdz[]={m3,m4,m7};

Код
Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"
Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"  
Error[Pe144]: a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"  
Error while running C/C++ Compiler


Что не так??
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2011, 19:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (NickSmith @ Feb 26 2011, 22:28) *
Что не так??

Что не так, написано черным по белому ТРИ раза подряд.
1) указатель на EEPROM и указатель на RAM это разные указатели.
2) имя двухмерного массива есть указатель на одномерный массив а не на элемент одномерного массива.

Думать. Читать K&R и думать.

QUOTE (Палыч @ Feb 26 2011, 22:48) *
CODE
__eeprom unsigned int ** bdz[] = {m3, m4, m7};
или
CODE
__eeprom unsigned int * bdz[] = {m3[0], m4[0], m7[0]};
в зависимости от того, что Вам нужно

Оба неверные sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Feb 26 2011, 20:06
Сообщение #4


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

Группа: Участник
Сообщений: 84
Регистрация: 21-10-09
Пользователь №: 53 117



Цитата(zltigo @ Feb 26 2011, 22:55) *
Что не так, написано черным по белому ТРИ раза подряд.
1) указатель на EEPROM и указатель на RAM это разные указатели.
2) имя двухмерного массива есть указатель на одномерный массив а не на элемент одномерного массива.

Думать. Читать K&R и думать.


Оба СОВСЕМ неверные sad.gif.


K&R читаю постоянно, но пока не все понятно..

Мне нужно организовать три массива для сохранения трех типов параметров.
Хочу создать массив с указателями, что бы можно было было работать с массивами через указатели...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2011, 20:39
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (NickSmith @ Feb 26 2011, 23:06) *
Хочу....

хотение надо уметь описать словами:
__eeprom unsigned int __eeprom *bdz[] = { m3[0], m4[0], m7[0] };

но для читабельности я бы так то-же самое описал:
__eeprom unsigned int __eeprom *bdz[] = { &m3[0][0], &m4[0][0], &m7[0][0] };

QUOTE
что бы можно было было работать с массивами через указатели...

С вероятностью 95% это очень неудачная мысль хранить в EEPROM рабочие указатели. EEPROM это не RAM.

QUOTE
K&R читаю постоянно, но пока не все понятно..

Ну тут-то, в сообщении компилятора:
QUOTE
a value of type "unsigned int __eeprom (*)[2]" cannot be used to initialize an entity of type "unsigned int *"

, что непонятно-то что? sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:54
Рейтинг@Mail.ru


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