покритикуйте вывод на экран

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

заглушка

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Критикую

Voodoo Doll пишет:

заглушка

С заглавной буквы нужно было!

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

гавно?

Вопросы:

- быстрее ли писать конкретный в массиве, чем динамически? т. о.

1case 9:  /*......*/
2         if(read_div==400)    disp_data[9]=4;

вместо

1case 9:  /*......*/
2         if(read_div==400)    disp_data[pos]=4;

- как оно вообще, сравнить вместо деления, по скорости? всё равно в той переменной будут только цифры аля 400, 70000, 200000 и т д, то есть одна полезная цифра плюс куча нулей, которые надо делить только ради того чтобы понять что это допустим 2 раза по 100000.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

по схеме: kingbright ba-56 два штуки, общие кинуты на pnp-транзисторы (т. е нулём включаются и аноды и катоды)

upd: на процедуру proc_disp пока можно не обращать внимания, там тестовая версия из голого loop() (тикающие 0-9, blank, F, C цифры)

фак, только что дошло что я считаю деление не с той стороны числа. ладно пофиг, перепишу и выложу, думаю ясен принцип? вопрос тот же.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Там не то что принцип, там вообще ниуя не ясно.
Особенно непонятно, зачем в сетапе так порты инициализировать.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

доделанная версия

Kakmyc, так быстрее

sadman41
Offline
Зарегистрирован: 19.10.2016

Voodoo Doll пишет:
<

Вопросы:

- быстрее ли писать конкретный в массиве, чем динамически? т. о.

1case 9:  /*......*/
2         if(read_div==400)    disp_data[9]=4;

вместо

1case 9:  /*......*/
2         if(read_div==400)    disp_data[pos]=4;


Константа - она завсегда быстрее и предсказуемей в работе, но сложнее в саппорте.

Деление потенциально тяжелее сравнения, если только деление при оптимизации на битшифт не заменяется.

Green
Offline
Зарегистрирован: 01.10.2015

Быдлокод. DDR-ы, PORT-ы, всякие B000000 заменяешь смысловыми значениями. Определяешь сегменты, общие, начертание отображаемых символов и т.д. Пример индикации.
 

01uint8_t segment[COM_MAX];
02bool dot;
03 
04 
05void ledExe() {
06  static uint8_t com;
07   
08  segment_off();                        //выключим всё
09  com_off();
10  switch (com) {                        //включим один общий
11    case 0: com1_on(); break;
12    case 1: com2_on(); break;
13    case 2: com3_on(); break;
14  }
15  segment_on(segment[com]);             //включим сегменты
16  if (++com >= COM_MAX)                 //следующая позиция 
17    com = 0;                           
18}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Voodoo Doll, почему форумчане не кинулись править ваш код? Так это из-за уважения. Но по факту вы нарушили все написанные и ненаписанные правила при написании кода. Так что подымайте литературу и учите.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Мне вот не понятно все же, почему ТС твердо уверен , что все поняли о каком дисплее ("экране") идёт речь ?

sadman41
Offline
Зарегистрирован: 19.10.2016

О семисегментном LED.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот про это я и говорю. Язык Си создавался как язык высокого уровня, который может работать на низком уровне. Что такое язык высокого уровня? Это любой программист средней квалификации глядя на код, сразу поймет какое железо и софт используется в программе. Но зачем писать на Си словно это ассемблер. 

sadman41 пишет:
О семисегментном LED.

Семисегментные LED бывают разные одиночные, двойные и так далее.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ппц сразу ясно стало какой экран.
Теперь осталось узнать о каком типе индикации идёт речь

sadman41
Offline
Зарегистрирован: 19.10.2016

Бл. Написано же: kingbright ba-56.
И этот сегментник не мой, не надо меня пригружать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qwone пишет:
Что такое язык высокого уровня? Это любой программист средней квалификации глядя на код, сразу поймет какое железо и софт используется в программе.

Такого определения ещё не видел! Буду знать.

Logik
Offline
Зарегистрирован: 05.08.2014

qwone пишет:

Это любой программист средней квалификации глядя на код, сразу поймет какое железо...

Очень смешно ляпнул про кросплатформенный язык.

Но код таки гамно.

Чего бы не написать стр.66 и далее типа 

1byte Seg[]={B00000001,B00000010,B00000001,B01000000,B10000000,B00000100,B00000010}; // эти константы и именовать не грешно бы
2 
3..
4 
5for(byte a=digits[n_dig], i=0;i<7;i--,a>>=1)
6{
7  if(a&1){ PORTD|=Seg[i]; }else{ PORTD&=~Seg[i]; }
8}

а то что в свиче fill_disp_data - адское адище.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Зачем вообще нужно это недоразумение , если все намного проще ?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Люди, а ассемблер сложно учить? Может быть я реально зря на c (даж не c++) пишу...

nik182
Offline
Зарегистрирован: 04.05.2015

Изначально не сложно. Нужно выучить все команды процессора, структуру регистров процессора и их ограничения. Дальше правила оформления кода. Но зачем? Си даёт эффективный код. Очень редко, когда требуется или точный по времени или кратчайший код может потребоваться ассемблерная вставка. Писать целиком на ассемблере в современных условиях развития компиляторов чистой воды мазохозм.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Да чёт подумал что по стилю мои скетчи больше напоминают ассемблер, чем обычный ардуинный wiring/c. Ну и плюс привычка оптимизировать по размеру кода.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

nik182 пишет:

Изначально не сложно. Нужно выучить все команды процессора, структуру регистров процессора и их ограничения. Дальше правила оформления кода. Но зачем? Си даёт эффективный код. Очень редко, когда требуется или точный по времени или кратчайший код может потребоваться ассемблерная вставка. Писать целиком на ассемблере в современных условиях развития компиляторов чистой воды мазохозм.

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

Ну и еще полезно представлять, во что именно выльется та или иная строка на Си. Потому как одна строка превращается в 2-3 оператора, которые выполняются 2-3 такта, а другая - ведет к вызову функции, которая может выполняться не одну тысячу тактов.

nik182
Offline
Зарегистрирован: 04.05.2015

Ну да. Однако знать ассемблер, что бы посмотреть, что там намудрил компилятор не обязательно. Достаточно знать ассемблерные комаманды процессора - это необходимый минимум.

Green
Offline
Зарегистрирован: 01.10.2015

Voodoo Doll пишет:

Да чёт подумал что по стилю мои скетчи больше напоминают ассемблер, чем обычный ардуинный wiring/c. Ну и плюс привычка оптимизировать по размеру кода.


Для себя вы можете писать как угодно. Только критерии нужно установить - быстро, компактно, хитронакручено и т.д. Как правило, в большинстве случаев, это всё лишнее. Иначе, пишите на ассемблере.
Если выставляете на оценку - должны понимать что читают люди. А значит лаконично и понятно (а не хитрозакручено), правильно оформлено и переносимо.