Страница 246 из 421

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 05, 2013 03:43:42
unalex
vitalik_1984 писал(а):unalex , откуда тогда взяться универсальности?
универсальность хорошо, но к конкретной задаче думаю она излишняя, проще передать функции ссылку на массив в качестве параметра и возвращать void

в моем примере кода разобрался - он читать то читает, но только первую строку массива а потом теряется

но я так и не понял как вернуть указатель на многомерный массив и какого типа должна быть функция в этом случае?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 05, 2013 11:14:41
pokk
Разобрался я со своим косяком. Всё дело было в типе переменные chanel1 chanel6 (unsigned char)
А с таймером пока тёмное дело.
Всем спасибо за помощь.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 05, 2013 11:50:12
Аlex
но я так и не понял как вернуть указатель на многомерный массив
Да в принципе так-же, как и на любой тип данных:

Код: Выделить всё

/*********************************************************/
typedef unsigned int t_arr[5][5];   // Создаём тип - массив 5x5
typedef t_arr*  tp_arr;             // Создаём тип - указатель на массив t_arr
/*********************************************************/
unsigned int* asd(void){
static t_arr    arr;        // Создаём статический массив
unsigned char   i, a;       
    
for(i=0;i<5;i++)            // Работаем с массивом
    for(i=0;i<5;i++)        //
        arr[i][a]=i*10+a;   //

return (unsigned int*)arr;  // Возвращаем указатель на массив
}


/*********************************************************/
void main (void){

tp_arr   ret_arr;               // Создаём указатель на двумерный массив
ret_arr=(tp_arr)asd();          // Вызываем ф-ию и присваиваем возвращённый указатель
*ret_arr[1][1] = *ret_arr[0][0];// Работаем с массивом через указатель

...
...
Только после возврата, указатель приходится явно приводить к своему типу.
Короче, геморно это всё... :facepalm:

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 07, 2013 19:05:00
FreshMan
ПЫТАЮСЬ РАСПЕЧАТАТЬ ПРОГУ
файл-принт
а он мне выдате вот такое окно
http://www.imgup.ru/image-wbpx2019539.html
в чем может быть проблемма ?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 07, 2013 19:18:49
unalex
выбран не тот принтер, а именно, вместо нормального принтера выбран Microsoft XPS Writer

в настройках печати выбрать нужный принтер, если его нет, значит не установлены драйвера на него

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 07, 2013 19:33:01
FreshMan
спасибо, Саня ! :beer:

Re: CodeVision AVR в вопросах и ответах

Добавлено: Сб мар 09, 2013 00:58:42
FreshMan
как ВООБЩЕ отключить оптимизацию ?
вот сдесь что-то нашол http://www.imgup.ru/image-wcsx9014010.html
это самая низкая оптимизация, полный 0 ? или есть еще ниже ?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Сб мар 09, 2013 04:28:32
Vov123
#pragma opt- //отключает оптимизацию

#pragma opt+ //включает оптимизацию

AVR ATmega16A кнопка

Добавлено: Ср мар 13, 2013 08:53:55
Valiullin.Amir
здравствуйте коты
хотелось бы задать вопрос по поводу кнопок в CVAVR на C
как сделать так чтобы при нажатии на кнопку и удержании ее
цикл срабатывал всего один раз до тех пор пока ее не нажмешь снова
код примера пока предложить не смогу нахожусь не дома

понял что надо как-то с флагами мутить и с swich case
но не могу понять как

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 10:08:39
Vov123
Чтобы мозг не парить,открой самоучитель Белова(2008),там на стр.150 всё подробно описано,и для асм,и для С.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 12:15:04
Аlex
Или загляни в соседнюю ветку по кнопкам, там есть примеры.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 12:27:17
unalex

Код: Выделить всё

while(1)
{
   if (PORTA != KEY_OFF && PORTA != lastState)
    {
         lastState = PORTA;
         doSomething();
    }
   else lastState = PORTA;
}

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 12:53:46
Valiullin.Amir
unalex
KEY_OFF - это флаг ?
спс сегодня опробую

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 12:57:23
Аlex
Неудачный код.
Во первых. Есть комбинация условий, при которых PORTA не сохранится в lastState, а это значит, что есть вероятность пропустить изменение порта.
Во вторых. Между if(PORTA != lastState) и lastState = PORTA; состояние порта может измениться. Хоть это и кажется невероятным, но вероятность имеется. А значит, как и в первом случае, есть вероятность пропустить изменение.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 12:58:36
unalex
Valiullin.Amir писал(а):KEY_OFF - это флаг ?
KEY_OFF - это состояние когда кнопки не нажаты(я просто не знаю какой логический уровень они выдают при нажатии)

немного сократил код

логика та же
если любая кнопка нажата и состояние изменилось - сохраняем новое состояние и делаем что хотим
иначе сбрасываем сохраненное состояние

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 13:00:29
unalex
Аlex писал(а):Неудачный код.
Во первых. Есть комбинация условий, при которых PORTA не сохранится в lastState, а это значит, что есть вероятность пропустить изменение порта.
Во вторых. Между if(PORTA != lastState) и lastState = PORTA; состояние порта может измениться. Хоть это и кажется невероятным, но вероятность имеется. А значит, как и в первом случае, есть вероятность пропустить изменение порта.
предложите свой 100% рабочий код

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 13:01:25
Аlex
Я уже написал выше где его искать.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 13:07:32
unalex
Alex, вас наверное смутило отсутствие антидребезга(я не делал этого, полагая что его сделает автор)
ну а если с антидребезгом, то как-то так

Код: Выделить всё

while(1)
{
	if (PORTA != KEY_OFF)
	{
		_delay_ms(DEBOUNCE);
		if(PORTA != KEY_OFF && lastState != PORTA)
		{
			lastState = PORTA;
			doSomething();
		}
	}
	else lastState = PORTA;
}
ЗЫ. Не понимаю тех, кто занимается критикой, но сам не может привести нормальный по его мнению код

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 13:34:05
Аlex
Дело не в антидребезге, а в правильности сохранения предыдущего состояния. Даже при использовании задержки, возможен такой момент, что состояние порта/пина может измениться между его опросом и сохранением для следующего опроса. В этом случае будет пропуск изменения. Для кнопки, может это и ерунда, но, не зная что у Вас в голове, осмелюсь предположить, что Вы можете ловить какой-либо сигнал на изменение подобным способом. И в этом случае, подобный алгоритм сыграет с Вами злую шутку, которую тяжело будет отловить.
По этому, не поймите мои посты как критику, а поймите как некую попытку предостеречь от неприятностей.
Я то код могу привести, но в данный момент мы рассматриваем Ваш код, в котором есть небольшие недочёты. Я на них указал, а Вам уже решать как их исправлять и исправлять ли вообще. Если не знаете как это сделать - всегда можете об этом сказать или спросить на форуме. Вам с радостью ответят.

ЗЫ: Я не понимаю тех, кто начинает дуться и вставать на дыбы, когда в ихнем коде находят недостатки. Я бы, наоборот, спасибо сказал. :)

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср мар 13, 2013 14:23:36
Valiullin.Amir
ругается на LastState
как будто CVAVR не знает такой команды
undefined symbol 'LastState'
может какую нить библиотеку надо подключить или CVAVR не работает LastState
З.Ы. сейчас подключено
<mega16a.h>
<alcd.h>
<stdio.h>
<delay.h>