Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 29 мар 2024, 01:49

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 01 сен 2011, 16:59 
Не в сети

Зарегистрирован: 13 авг 2011, 18:52
Сообщения: 11
Когда привинчу календарь к ним, выложу.. Я там многое изменил. Глянешь потом.
На счёт volatile и места хранения это да.. Я когда это все писал,ещё не знал, что это все значит. Где то вычитал, что от volatile хуже не будет. Вот и совал его везде.. А код ведь больше от него..


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 01 сен 2011, 17:10 
Не в сети

Зарегистрирован: 13 авг 2011, 18:52
Сообщения: 11
Ещё попутный вопрос..
Как мне менять содержимое массива в зависимости от состояния переменной?
Хочу сделать типа этого..

char month=1, month_str[3]; // month меняется от 1 до 12

switch (month){
case 1: month_str="Yan"; break;
case 2: month_str="Fev"; break;
case 3: month_str="Mar"; break;
case 4: month_str="Apr"; break;
case 5: month_str="Maj"; break;
case 6: month_str="Iun"; break;
case 7: month_str="Iul"; break;
case 8: month_str="Avg"; break;
case 9: month_str="Sen"; break;
case 10: month_str="Okt"; break;
case 11: month_str="Noy"; break;
case 12: month_str="Dec"; break;
default:;
Пишет ошибку компилирования. Уже не помню какую..

Сделал так. Но это ОЧЕНЬ громоздко...

if (month==1){
month_str[0]=177;
month_str[1]=189;
month_str[2]=179;
}
if (month==2){
month_str[0]=170;
month_str[1]=101;
month_str[2]=179;
}
if (month==3){
month_str[0]=77;
month_str[1]=97;
month_str[2]=112;
}
if (month==4){
month_str[0]=65;
month_str[1]=190;
month_str[2]=112;
}
if (month==5){
month_str[0]=77;
month_str[1]=97;
month_str[2]=185;
}
if (month==6){
month_str[0]=165;
month_str[1]=198;
month_str[2]=189;
}
if (month==7){
month_str[0]=165;
month_str[1]=198;
month_str[2]=187;
}
if (month==8){
month_str[0]=65;
month_str[1]=179;
month_str[2]=180;
}
if (month==9){
month_str[0]=67;
month_str[1]=101;
month_str[2]=189;
}
if (month==10){
month_str[0]=79;
month_str[1]=186;
month_str[2]=191;
}
if (month==11){
month_str[0]=72;
month_str[1]=111;
month_str[2]=199;
}
if (month==12){
month_str[0]=224;
month_str[1]=101;
month_str[2]=186;
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 02 сен 2011, 22:14 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 91
Выкинте default: или пропиши что там у Вас по дефолту.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 05 сен 2011, 12:40 
Не в сети

Зарегистрирован: 13 авг 2011, 18:52
Сообщения: 11
Default там не причём. Он там в принципе и не нужен. Переменная month по любому будет равна от 1 до 12, а все эти случаи прописаны case.. Ошибка при компилировании
Error: the expression must be a modifiable lvalue
Всего ошибок 12. На каждую строчку...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 05 сен 2011, 21:52 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 91
У Вас что-то с объявлением массива. Скачать прогу не могу :oops: .
Массив числовой, а Вы , похоже, загоняете строковый.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 05 сен 2011, 23:09 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2011, 23:15
Сообщения: 141
Тут скорее косяк в том, что содержимое строковых переменных можно менять только посимвольно, но никак не строкой сразу. Рою документацию, пока ничего обнадеживающего не нашел :(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 05 сен 2011, 23:53 
Не в сети

Зарегистрирован: 13 авг 2011, 18:52
Сообщения: 11
Действительно, присвоить содержимое массива сразу можно только при объявлении. Потом же, менять можно только посимвольно.. В этом скорее всего и косяк. Вычитал в книге.
Пробовал типа этого:

switch (month){
case 1: month_str[0]=177, month_str[1]=189, month_str[2]=179; break;
.
.
.
.
................
default:;

Тоже не алё.. Походу последний вариант с if единственный громоздкий выход...(((


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 06 сен 2011, 09:12 
Не в сети
Аватара пользователя

Зарегистрирован: 06 июн 2011, 23:15
Сообщения: 141
case 1: month_str[0]=177, month_str[1]=189, month_str[2]=179; break;

Здесь у тебя косячина, нужно не запятыми разделять а точкой с запятой. Поскольку у тебя здесь идет список операторов:

case 1: month_str[0]=177; month_str[1]=189; month_str[2]=179; break;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 06 сен 2011, 22:53 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 91
Вот тут небольшая :) цитата
Массивы и строки
Массив — это тип данных, который используется для представления последовательности однотипных значений. Массивы объявляются подобно обычным переменным, с указанием в квадратных скобках размерности (количества элементов в массиве):
int digits[10]; //Массив из десяти элементов типа int char str[10]; //Массив из десяти символов (строка)
Доступ к элементам массива реализуется с помощью индекса (порядкового номера элемента, начиная с 0):
digits[0] = 0; digits [1] = 1; str[C] = 'А';
str[l] = 'В1;
Зачастую гораздо удобнее инициализировать массив непосредственно при его объявлении, например:
int digits [10] = {О, 1, 2, 3, 4, 5, б, 7, 8, 9};
char str[10] - {'Т', 'h', 'e', ' ', Ч', '!', 'п1, 'е'};
int n;
char.с;
п = digits[2]; //п = 2
с = str[1]; //с = 'h'
Строки
Строка в С — это массив типа char. Выше был рассмотрен пример объявления такого массива, соответствующего строке "The Jine". Это объявление можно было бы выполнить и с помощью строкового литерала:
char str[10] = "The line";
Однако в таком случае следует помнить, что компилятор неявно завершает строковые литералы символом '\0', и, таким образом, реальная длина строки больше на 1. Это следует учитывать, чтобы при инициализации массива не выйти за его пределы.
При инициализации строк размерность массива можно явно не указывать:
char str[] = "The line";
В этом случае компилятор определит размерность самостоятельно. (Это правило применимо и к инициализации любых других массивов.)
Многомерные массивы
Язык С допускает использование многомерных массивов, то есть массивов, элементами которых являются массивы. Примеры объявления таких массивов:
int a2[10] [2]; //Двухмерный массив 10x2 int аЗ[3] [2] [5]; //Трехмерный массив 3x2x5
Фактически, все элементы многомерного массива хранятся в памяти последовательно, поэтому представленные ниже примеры инициализации аналогичны:
int а[2][3] = { {1, 2, 3},
(4, 5, 6} };
и
int а[2][3] = { 1, 2, 3, 4, 5, 6 };
Для доступа к элементам многомерного массива используются индексы по каждой из размерностей или операции разыменования указателя. Например, чтобы извлечь в некоторую переменную п цифру 4 из представленного выше массива а, можно воспользоваться одним из двух вариантов:
п = а[1][0]; //Извлекаем элемент из "строки" 1 (вторая),
//"столбца" 0 (первый), то есть - цифру 4
п = * (a -t- 3); //а - указатель на первый элемент массива,
//следовательно a -t- 3 - указатель на 4-й


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Общие вопросы по CVAVR
СообщениеДобавлено: 06 сен 2011, 23:13 
Не в сети

Зарегистрирован: 20 май 2011, 23:58
Сообщения: 91
А вообще лучше создать хидер font.h
и в нем прописать что-то типа
const unsigned char str_corr[]= {0x40, 0x39, 0x9C, 0x14, 0x54};//Corr.
const unsigned char str_cal[]= {0x30, 0x39, 0xB7, 0x59};//CAL.
const unsigned char str_pit[]= {0x30, 0xB3, 0x82, 0x5D};//
const unsigned char str_t_stat[]= {0x82, 0x1D, 0x4, 0xAD, 0x1D, 0xB7, 0x1D};//t, -, s, t, a, t,
А в основной проге
#include "font.h"
и вызывать уже строку
if (regim==7){
load_str_in_lcdbuffer(&str_calls[0]);
return;
}
И на экране будет строка CAL


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB