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

 
 
> Вопрос по 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
Ответов
Палыч
сообщение Feb 23 2011, 04:23
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(NickSmith @ Feb 23 2011, 00:01) *
как мне выдрать от туда нужные данные
Например, так:
Код
a = m[2][0];
b = m[2][1];
соответственно, сохранение в EEPROM будет выглядеть так
Код
m[2][0] = a;
m[2][1] = b;


Цитата(NickSmith @ Feb 23 2011, 00:01) *
Как сделать, что бы у меня всегда выводилось 10.00??

Код
sprintf(lcd_buffer,"Fq:%i.%02u",ts/100,ts%100);
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Feb 23 2011, 10:16
Сообщение #3


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

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



Цитата(Палыч @ Feb 23 2011, 07:23) *
Например, так:
Код
a = m[2][0];
b = m[2][1];
соответственно, сохранение в EEPROM будет выглядеть так
Код
m[2][0] = a;
m[2][1] = b;



Код
sprintf(lcd_buffer,"Fq:%i.%02u",ts/100,ts%100);

Большое спасибо.
А из за чего он не хочет создавать ссылочный массив при многомерных массивах??
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 23 2011, 13:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(NickSmith @ Feb 23 2011, 13:16) *
А из за чего он не хочет создавать ссылочный массив при многомерных массивах?
А, вот так?
Код
eeprom unsigned int * bdz[] = { &m3[0][0], &m4[0][0], &m7[0][0] };
Если Вы собираетесь заниматься профессионально программированием AVR (ну, или любительством, но на профессиональном уровне), то сразу перейдите с CV на GCC или IAR, позже это будет сделать гораздо труднее.
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Feb 23 2011, 15:33
Сообщение #5


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

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



Цитата(Палыч @ Feb 23 2011, 16:17) *
А, вот так?
Код
eeprom unsigned int * bdz[] = { &m3[0][0], &m4[0][0], &m7[0][0] };
Если Вы собираетесь заниматься профессионально программированием AVR (ну, или любительством, но на профессиональном уровне), то сразу перейдите с CV на GCC или IAR, позже это будет сделать гораздо труднее.

меня заинтересовал IAR? но по нему как то мало документации на русском.. Может что то посоветуете?? Основы от CV подойдут или у него синтаксис языка совсем другой??
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 23 2011, 18:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(NickSmith @ Feb 23 2011, 18:33) *
... или у него синтаксис языка совсем другой??

Собственно, это CV - чёрти что, а не транслятор языка Си... Как раз IAR - в соответствии со стандартом, так что, любая хорошая книга (например, Керниган и Ричи) вполне помогут с освоением языка. Другое дело: микроконтроллеры имеют свои особенности и, поэтому, язык дополнен конструкциями, специфичными для разных трансляторов (отдано это на "откуп" разработчикам трансляторов, а они делают по-своему: при переходе от одного транслятора к другому могут возникнуть трудности - лучше сразу начинать с "серьезного" транслятора).
Go to the top of the page
 
+Quote Post
NickSmith
сообщение Feb 23 2011, 20:05
Сообщение #7


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

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



Цитата(Палыч @ Feb 23 2011, 21:47) *
Собственно, это CV - чёрти что, а не транслятор языка Си... Как раз IAR - в соответствии со стандартом, так что, любая хорошая книга (например, Керниган и Ричи) вполне помогут с освоением языка. Другое дело: микроконтроллеры имеют свои особенности и, поэтому, язык дополнен конструкциями, специфичными для разных трансляторов (отдано это на "откуп" разработчикам трансляторов, а они делают по-своему: при переходе от одного транслятора к другому могут возникнуть трудности - лучше сразу начинать с "серьезного" транслятора).

Ну да, пишут, что IAR разрабатывался совместно с производителями.. По первым граблям, на которые я наступил тоже стало понятно что CV это язык пионерии.. Мигающие светодиоды и данные с датчика считать в простую можно, а как только что то серьезное, то тут же бяки выползают...
В общем будем изучать IAR...
Go to the top of the page
 
+Quote Post

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


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

 


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


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