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

 
 
> Вопрос по 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
NickSmith
сообщение Feb 26 2011, 20:47
Сообщение #6


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

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



Цитата(zltigo @ Feb 26 2011, 23:39) *
хотение надо уметь описать словами:
__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] };


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

Т.е это лучше в озу хранить??
И как я понимаю для указателя unsigned char не нужно??
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 26 2011, 20:53
Сообщение #7


Гуру
******

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



QUOTE (NickSmith @ Feb 26 2011, 23:47) *
Т.е это лучше в озу хранить??
И как я понимаю для указателя unsigned char не нужно??

Что "'это" и что "не нужно" для указателя unsigned char я совсем не понял sad.gif.


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


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

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



Цитата(zltigo @ Feb 26 2011, 23:53) *
Что "'это" и что "не нужно" для указателя unsigned char я совсем не понял sad.gif.

Я имел в виду тип данных для хранения указателей unsigned int. Можно ли использовать char?

Теперь не могу разобраться как при помощи bdz получить данные из нужнго мне массива..
Например мне нужно записать данные в строку 5 ячейку 1 m4 их temp
...
bdz[1][4][1]=temp;
Работать не хочет??
Go to the top of the page
 
+Quote Post

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


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

 


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


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