Как написать программу по алгоритму?

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

Ivanoff-iv писал(а):гдето здесь должна быть инверсия?
ага, спасибо, код подправил.
Ivanoff-iv писал(а):я не про майн, я про ф-ю static uint8_t get_button_num(void){ кейс ведь в ней...
ну а я об чем? и я об этой функции:

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

static uint8_t get_button_num(void){
   uint8_t btn;
   while(1){
      // опрашиваем кнопки
      btn = PIND;
      if(btn != 0xFF){
         // если хоть какая-то нажата
         _delay_ms(15);
         // после паузы для защиты от дребезга
         if(btn == PIND){
            // проверяем, что состояние кнопок не поменялось
            // а затем вычисляем номер кнопки
            switch(btn){
            case 0b11111110: return 1;
            case 0b11111101: return 2;
            case 0b11111011: return 3;
            case 0b11110111: return 4;
            case 0b11101111: return 5;
            case 0b11011111: return 6;
            case 0b10111111: return 7;
            case 0b01111111: return 8;
            default:
               // если нажато несколько кнопок - игнорируем
               break;
            }
         }
      }
   }
}
break - то из switch, а охватывающий его while(1) никто не трогает
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как написать программу по алгоритму?

Сообщение Ivanoff-iv »

вайл(1) я проглядел...
_______________
[uquote="Андрей342432",url="/forum/viewtopic.php?p=3588358#p3588358"]2)После выполнения программы она останавливается и ждет следующее нажатие[/uquote]
ARV писал(а): 

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

// светодиоды горят еще 1 секунду, потом гаснут
      _delay_ms(1000);
      PORTB = 0;
неувязочка... :)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

вы о том, что ждет с погашенными светодиодами? ну так ТС ничего не сказал об этом, а мне представляется логичным, что они не горят в "нормальном" состоянии. иначе скачок от 8 светящихся к 1 светящемуся при нажатии кнопки 1 будт выглядеть уныло...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как написать программу по алгоритму?

Сообщение Ivanoff-iv »

у меня сначала все гаснут, уже потом по одному зажигаются...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
7seg
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Re: Как написать программу по алгоритму?

Сообщение 7seg »

ОФФТОП:
@AVR,я прочел ваш меседж по поводу читабельности кода. Зато могу теперь успокоить себя т.к мой вариант легко читабелен.
Ну а многовато строк в нем, потому что я себе прививаю привычку делать код легко переносимым\расширяемым\универсальным.
@AVR и если не секрет в каком месте мой вариант вогнал вас в ступор ? (хочу сделать для себя выговор) .

И того две страницы форума исписано , а автор темы даже не удосужился зайти и выразить благодарность за предоставленные варианты.Хотя возможно он уже и забил на это задание и занялся физ подготовкой, т.к армия любит крепких мужчин XD )))
andrei23061996@gmail.com
.................................................................................................................
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3590024#p3590024"]у меня сначала все гаснут, уже потом по одному зажигаются...[/uquote]
а у меня по-вашему, как?

эх, видимо, все мои старания делать "легко читаемый код" напрасны... :(
7seg писал(а):в каком месте мой вариант вогнал вас в ступор ?
да в объеме писанины. ваш вариант не соответствует ни одному из трех моих принципов.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как написать программу по алгоритму?

Сообщение Ivanoff-iv »

не, я не про код, я про скачёк...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

если у вас ПОСЛЕ того, как все, что надо, зажглось, оно горит до очередного нажатия на кнопку, то скачок возникает как раз в момент нажатия. то есть при нажатии кнопки 1 произойдет мгновенное переключение из 8 в 1 горящий светодиод. сам процесс "загорания" будет как бы упущен.
7seg писал(а):хочу сделать для себя выговор
кстати, разглядел только сейчас: вы запрещаете прерывания на время от 500 до 4000 мс - это круто. за это можно и строгача влепить :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как написать программу по алгоритму?

Сообщение Ivanoff-iv »

я вот по другой теме немного в ступоре, я перенял у Вас некоторые тонкости программирования и считаю Вас хорошим кодером (наслышан и об умении при минимуме ресурсов получать хорошие результаты), но сам алгоритм программы у меня вызывает двойственные чувства, он понятен, это да, но написан так, что мне кажется, чтото ещё параллельное ему засунуть в мк будет трудно (код то ждет зажигания следующего светодиода, то нажатия кнопки) а часто приходится крутить несколько параллельных процессов и любой программист рано или поздно с этим столкнётся, кроме того работа кода косная (пока все требуемые светодиоды не зажгутся и через секунду не погаснут, кнопку жать бесполезно) да и с энергосбережением его подружить тоже трудно... (ИМХО)
___________
ПС: про скачек, у меня всё правильно: сначала гасим, потом ждём, потом зажигаем - 0 горящих светодиодов тоже бывают.

Добавлено after 3 minutes 20 seconds:
про косность конечно вопрос... мы ведь не знаем что автор задумывал...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
7seg
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Re: Как написать программу по алгоритму?

Сообщение 7seg »

[uquote="ARV",url="/forum/viewtopic.php?p=3590138#p3590138"]кстати, разглядел только сейчас: вы запрещаете прерывания на время от 500 до 4000 мс - это круто. за это можно и строгача влепить :)))[/uquote]

Это было сделано умышлено чтобы не лепить флаги, т.к у меня всего лишь одно прерывание которое обслуживает функцию обработки кнопок.
А в условии задачи сказано что мы не должны прервать последовательность действий до окончания выполнения в моем случае функции блинк . :)
Если выкинуть _делаймс(), то все станет нормально про что я вроде бы уже писал. 8)
andrei23061996@gmail.com
.................................................................................................................
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Как написать программу по алгоритму?

Сообщение Ivanoff-iv »

перечитал... действительно я не прав - написано что ждём кнопку после зажигания всех светодиодов... придется переписывать :( (ладно, хоть немного, 9 знаков всего :) )
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

Ivanoff-iv писал(а):я перенял у Вас некоторые тонкости программирования и считаю Вас хорошим кодером
и вам спасибо :) но я только учусь. всю жизнь.
Ivanoff-iv писал(а):по другой теме немного в ступоре
проблема в том, что вы, решая конкретную задачу, зачем-то думаете о возможных вариантах развития... а я в конкретном случае ни о чем не думал, потому как задача явно "этюдная", полностью выдуманная, без цели и продолжения. и главная цель, что я преследовал - создать код, понятный неучу и не вызывающий у препода подозрений. и, как мне кажется, цели я достиг.
Ivanoff-iv писал(а):чтото ещё параллельное ему засунуть в мк будет трудно
вы не поверите, как много можно всунуть "паралельно", если не стараться думать об этом специально! и часто бывает наоборот: когда слишком много думаешь о параллельности, попадаешь в большие затруднения - моя тема о RTOS тому пример. буквально до последних дней я никогда не использовал работу с USART по прерываниям и с кольцевым буфером, все делал на тупейшем поллинге UCSRA - и, представьте себе, при этом и интерфейс не зависал, и что-то там регулировалось "параллельно" и т.п. фишки-пышки были.
Ivanoff-iv писал(а):и с энергосбережением его подружить тоже трудно...
наоборот, чрезвычайно легко: в функции определения номера кнопки всего лишь в случае, если ни одна кнопка не нажата, сразу уходить в глубокий сон (разумеется, заранее настроив способ пробуждения по прерыванию от порта кнопок или таймера или еще чего-либо).

Добавлено after 9 minutes 35 seconds:
7seg, кстати... раз уж вы юзаете avr-gcc, рекомендую пользоваться такой поддерживаемой этим компилятором фишкой, как "анонимные юнионы/структуры". у вас там многоступенчатая вложенность структур, что код не украшает. с анонимными структурами/юнионами это будет более красиво:

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

typedef union{
   uint8_t as_byte;
   struct{ // структура, под которую не выделено "поля" в union - безымянная или анонимная структура
      uint8_t bit0 : 1;
      uint8_t bit1 : 1;
      uint8_t bit2 : 1;
      uint8_t bit3 : 1;
      uint8_t bit4 : 1;
      uint8_t bit5 : 1;
      uint8_t bit6 : 1;
      uint8_t bit7 : 1;
   }; // вот тут бы идентификатор - а его нет!
} my_type_t;

my_type_t var;

var.bit7 = 1;
var.as_byte++;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
7seg
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Ср май 03, 2017 03:22:26

Re: Как написать программу по алгоритму?

Сообщение 7seg »

ARV писал(а):рекомендую пользоваться такой поддерживаемой этим компилятором фишкой, как "анонимные юнионы/структуры".
Хоть этот подход и более красив, но из-за завязке на компиляторе, и возможности возникновении проблем при дальнейшем сопровождении кода, все таки откажусь от данной рекомендации.
andrei23061996@gmail.com
.................................................................................................................
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение ARV »

дело-то ваше... вроде как в версии стандарта C11 это добавлено... MS VC как бы поддерживает...
лично меня проблема совместимости/переносимости мало беспокоит, поскольку для любительских целей это совершенно неакутально.
а GCC он везде одинаков...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

Re: Как написать программу по алгоритму?

Сообщение Demiurg »

Вообще-то ТЗ такое, какая кнопка нажата, столько светодиодов загорается. Смущает: последовательно 1, 2. Если он имеет в виду, сразу, какая кнопка, столько светодиодов - это одно. Если же с задержкой, сначала 1, потом второй, то это уже совсем другое.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Как написать программу по алгоритму?

Сообщение OKF »

А вот когда ТЗ ТАКОЕ, тот так и пишется от балды. Т.е., как проще. А потом уже утрясается, с доплатой.
Ответить

Вернуться в «AVR»