Этюды для начинающих: мрамор и штукатурка эффективности

arduinec
Offline
Зарегистрирован: 01.09.2015

Arhat109-2 пишет:

Тот, кто утверждает что на 16Мгц МК ногодрыг работает с 8Мгц - неправ однозначно.

Как я указывал выше, мой осциллограф старенький и может ошибаться, но при шаге по горизонтали 0,1 мкс он выдал следующую картинку:

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да все верно выдал ваш осцилоскоп. 3 команды по 62.5 наносекунды. одна в 1, вторая в 0 и переход "взад" и это 5,33Мгц. Это предел для бесконечного цикла. Кому он такой нужен в практических целях? Как только ставите ограничение на "сколько надо дрыгов" - счетчик импульсов - добавляется ещё одна команда или 2 получите 4Мгц. Как только заворачиваете это дело в функцию - получаете 2 такта на параметр + 4 такта на вызов и 4 такта на возврат .. итого 14 тактов по 62.5 наносекунды для байтового параметра .. вот и весь сказ про осцилоскоп. :)

Ещё раз. Как только речь заходит об ОПТИМАЛЬНОМ программировании для микорконтроллеров (МК) - это ни разу не Wiring. А если пользуем Wiring, то вопросы "мрамора и штукатурки" по своей сути сводятся к решению задачи "как элегантнее левой пяткой почесать правое ухо". Особенно этот момент относится к соседней теме про перегрузку операций вывода в Serial через потоки С++.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Arhat109-2 пишет:

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

Вроде все, зрелые люди, а обиженки как в детском саду. Вы при конкретных примерах не ссылку на нее давайте, а фрагменты кода. Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет. "У каждого свой вкус", сказал кот, вылизывая себе экстерьер.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

bwn пишет:

Многоиндексного с лисапедом критиковали, но кто то пользуется, кто то нет.

а, не было критики по сути алгоритма обработки работы кнопки.
была критика по оформлению всех переменных в классе как публичных.
ТС предлагал виртуальные методы.
что качественно не изменило бы работу класса никак от слова НИКАК.
поэтому нужно признать, что класс титановый велосипед для тактовой кнопки на данный момент является идеальным для ползателя любого уровня обарзования и не выдумывать гуманитарные придирки - нравится-ненравится.
 
*да, забыл - были свидетели непорочного зачатия, но я их всерьёз не воспринял.
Клапауций 123
Offline
Зарегистрирован: 06.12.2015

Arhat109-2 пишет:

Да, каюсь .. пришло с утра очередное письмо на тему "вы зачем это выставили? Хотите профи оставить без работы .. wiring это для дураков" .. с разного рода оскорблениями .. извиняюсь, под настроение получилось. :)

оставь их(профи) без работы - пусть сдохнут с голоду. :D

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

arduinec пишет:

Как я указывал выше, мой осциллограф старенький и может ошибаться, но при шаге по горизонтали 0,1 мкс он выдал следующую картинку:

arduinec,

у моего есть функция частотометра. Вечером доберусь до дома, загружу Ваш скетч и выложу скриншот. "Не переключайтесь!" :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
«Никогда такого не было, и вот опять!»
В.С. Черномырдин

Тема об эффективности, как всегда выродилась в подсчёт тактов и безапелляционные заявления о том, что Wiring писали «дураки для дураков» и пользоваться им нельзя.

Я, конечно, может и дурак, но пользуюсь digitalWrite как-то спокойно и абсолютно не парюсь. За мою практику мне всего лишь дважды попадались проекты*, в которых реально надо было считать такты и «выжимать все соки». Во всех остальных проектах ресурсов МК вполне хватало, чтобы не думать ни о тактах, ни о wiring.

Поскольку тема для начинающих, обращаюсь к ним.

Коллеги, относитесь к заявлениям типа «ни в жисть не пользовать Wiring» спокойно и с головой. Посмотрите на свой проект и ответьте себе на вопрос, а правда ли Вам так уж критично сколько там тактов 2, 200 или 2000? Уверяю Вас для «хрен знает сколько целых и столько же десятых» процентов проектов это абсолютно фиолетово! Да, для остальных «100 – хрен знает сколько целых и столько же десятых»% это важно, но Вы подумайте о своём конкретном проекте, а не о гипотетических ситуациях.

Рассуждения же о том, что «wiring пользовать нельзя» без указания в каком именно проекте, напоминает смертельный холивар о том, что лучше: мерседес-кабриолет или камаз с фурой между парнями, одному из которых нужно девочку покатать, а другому – партию холодильников перевезти.

---------------------------
*
 Речь о хоббийных проектах на ардуино, а не о бортовых вычислителях.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollero...

Вот грамотная реализация того, что я тут "пиарил" на С++. Это и есть то самое "применение Template" о котором пишу. С ЭТОГО и должен был начинаться Wiring "для начинающих". И всё это можно легко упрятать внутрях, не показывая новичку вовсе. :)

bwn
Онлайн
Зарегистрирован: 25.08.2014

Поддержу ЕвгенийП, если мы посмотрим на предлагаемые здесь проекты, то обнаружим, что 90% из них можно свести к трем категориям: термостат, светорегулятор и управление мощной нагрузкой. При нормальном планировании, МК основное время занят гонянием loop и подсчетом таймингов до очередной проверки и смысл здесь считать такты?
 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

https://github.com/KonstantinChizhov/AvrProjects ссылка на гитхаб автора. Наслаждайтесь. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну и для начинающих: http://easyelectronics.ru/category/avr-uchebnyj-kurs/page/5 читать с 5 к 1 странице. Есть всё. Статьи с этого сайта есть смысл перепостить сюда в раздел для начинающих.

Logik
Онлайн
Зарегистрирован: 05.08.2014
Шото цитирование приглючило.
Arhat109-2 пишет:
 
 
Вот грамотная реализация того, что я тут "пиарил" на С++. Это и есть то самое "применение Template" о котором пишу. С ЭТОГО и должен был начинаться Wiring "для начинающих". И всё это можно легко упрятать внутрях, не показывая новичку вовсе. :)
 
Совсем не понятны причины восторга от статьи. Автор сразу пляшет на известных граблях.
 
Цитата:
 
1. Препроцессор
Способов использования препроцессора для работы с портами в МК существует великое множество. 
 
....................................
 
В итоге при использовании препроцессора для манипуляций с портами ввода-вывода мы получаем:
 
Простоту и ясность для простых вещей – очень просто написать пару макросов, чтоб поморгать светодиодом.
Высокую скорость и компактность кода при отказе от универсальности (все ножки в одном порту и желательно по порядку).
Не расходуется дополнительная память.
Содержащий большое количество битовых операций код достаточно сложно читать.
Можно сделать универсально и относительно переносимо пожертвовав размером и скоростью кода (побитовый вывод).
Для управления несколькими однотипными устройствами придется дублировать код.
 
 
2. Передача порта через указатель.
Как уже выяснили один из основных недостатков пи работе с портами ввода-вывода с помощью препроцессора это сложность использования однотипных устройств. 
 
..................
 
Итого:
 
Удобно использовать для подключения многих однотипных устройств, требующих не много линий ввода-вывода.
Нет необходимости в дублировании кода.
Можно менять порт и линии подключения устройства во время выполнения программы.
Низкая скорость доступа к портам.
Большой размер кода.
Требуется дополнительная память для хранения указателя на порт и битовых масок.
Неудобно и неэффективно работать с большим количеством линий ввода-вывода.
 
 
Разжевано у него конечно подробнейше, а что в итоге? Либо "Высокую скорость" и "Для управления несколькими однотипными устройствами придется дублировать код." Либо "Нет необходимости в дублировании кода" и "Низкая скорость". Чего мы с Вами тут не знали?!
 
Далее варианты многопиновые, виртуальный порт, с верным выводом "Манипуляции с отдельными битами неэффективны." 
 
Далее С++.
 
Проблема в общем озвучена верно
 
Цитата:
 
1. Логика работы с устройством должна быть отделена от способа его подключения.
2. Не должно быть дублирования кода при подключении многих однотипных устройств.
3. Эффективно работать с отдельными битами.
4. Эффективно работать с многобитовыми значениями.
5. Решение должно быть переносимо на разные аппаратные платформы.
6. Не должно использоваться дополнительная память.
7. Легкость написания и сопровождения кода.
8. Реализация полностью на стандартном Си++.
 
Но п.1 расплывчатый, п.3 и п.4 допустим как или-или, п.5 в общем игнор, т.к. когда потребуется достаточно легко решаем, п.6 надо уточнять и оговаривать отдельно.
 
А дальше появляется
 
"//Установить биты в порту PORT |= value;
 
static void Set(DataT value);"
 
Заметим он статический. Это хороше. Все унаследованое от него будет вместо вызова функции содержать одну команду и тоже быть статическим. Значить снова - одно устройство, один код, второе устройство - новый класс с новым Set-ом из этого же шаблона и сново повтор кода. Далее многопиновость, традиционные знаменитые извращения в стиле С++ ))).
 
В итоге - нет решения. Проблема "максимум скорости"&"дублирование кода" принципиально не решаема в чистом виде. Возможен только компромис. И весь вопрос как его сделать грамотно.
 
ПС. На будущее, давайте точней указанее на то, что интересно, читать "простыни" давно понятного не интересно.
 
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Перечитайте сами простыни. Как понимаю, эта либа уже как 6 лет юзается для генерации кода близкого или даже лучшего чем ассемблерное писалово. Всё там есть с 1 по последний пункт. Больше того, на гитхабе есть релизы под несколько разных архитектур и для texas Instruments и для STM и для AVR. В т.ч. и для разных компиляторов, в т.ч. и avr-gcc. :)

Концовка для тех, кто в танке:

Подведём итоги.

Цели поставленные перед реализацией ввода-вывода для МК на Си++ были достигнуты в полной мере. Достигнута как эффективность манипуляций с многобитовыми значениями, так и отдельными линиями ввода-вывода. Списки линий, как и код их использующий, полностью изолированы от конкретной реализации портов. Чтобы добавить новый способ подключения (например через SPI расширитель портов) устройства использующего списки линий, или портировать его на другое семейство МК, достаточно написать соответствующий класс реализующий интерфейс порта ввода-вывода.

Единственными существенными недостатками этого подхода является относительная сложность реализации списков линий (но ведь они уже написаны) и необходимость изучения языка Си++.

 

© Константин Чижов

Logik
Онлайн
Зарегистрирован: 05.08.2014

Arhat109-2 пишет:

Перечитайте сами простыни. 

Я как раз перечитал. И даже вник.  А Вы? Нет там ничего толкового по предмету. Обзор существующего плюс извраты С++. Местами извраты очень хороши, в плане техники владения шаблонами и остроумия вподходе, но не более. Вы его либы пользуете 6 лет? Можете продемонстрировать быстрый вывод из его либ без дублирования кода для нескольких устройст? Я не собир изучать мегабайтные "выхлоп" чтоб очередной раз убедится в невозможности невозможного.  Здесь возможен только хороше продуманный компромис, а автор статьи это не осознает. Увы...

ПС. Еще раз прошу. Ссылки более предметно, тратить свое время в пустую больше не намерен, жду пример на основе этой либки, дизасемблер предметного места тогда и продолжим.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ок. Но придется подождать .. не многозадачен. :(

Logik
Онлайн
Зарегистрирован: 05.08.2014

Arhat109-2 пишет:

Ок. Но придется подождать .. не многозадачен. :(

ха! С указателями на функции еще прикольней получается! Скетча кусок, целый даже работает

 
#include <SSD1306.h>

#define OLED_SDA_PIN 4
#define OLED_SCL_PIN 3
#define OLED_VCC_PIN 2


ssd1306_i2c_(OLED_SCL_PIN, OLED_SDA_PIN, myOLED);

void setup() 
{
  pinMode(OLED_VCC_PIN, OUTPUT);
  digitalWrite(OLED_VCC_PIN, HIGH);
  delay(20); // пауза после подачи питания
  
  myOLED.begin();
  myOLED.setFont( SSD1306::FONT_SIZE_1);
  myOLED.clrScr();
  myOLED.drawString(0,0,"hello!"); 

 

В либе. Дефайник громоздковат, может шаблоном красивей будет.

class SSD1306
{
public:
....
    enum
    {
       OPERATION_SEND_START,
       OPERATION_SEND_STOP,
       OPERATION_SEND_ACK,
       OPERATION_INIT
    } I2C_OPERATION;

...
   void(*Wr)(byte );
   void(*Op)(byte );
   SSD1306(void(*w)(byte ),void(*o)(byte )){Wr=w;Op=o;Op(OPERATION_INIT);};
 ....
protected:

 .....
     void writeByte(uint8_t value){Wr(value);};
     void BusOperation(byte OperationID){Op(OperationID);};
}

.........
#define ssd1306_i2c_(scl,sda, name)  \
   void  SDA_OUT(void){bitSet(ARDUINO_DDR(sda), ARDUINO_PIN_NUM(sda));}                             \
   void  SDA_IN(void){bitClear(ARDUINO_DDR(sda), ARDUINO_PIN_NUM(sda));}                             \
   void  SDA_HIGHT(void){bitSet(ARDUINO_PORT(sda), ARDUINO_PIN_NUM(sda));}                        \
   void  SDA_LOW(void){bitClear(ARDUINO_PORT(sda), ARDUINO_PIN_NUM(sda));asm volatile ("nop");}                       \
   void  SCL_HIGHT(void){bitSet(ARDUINO_PORT(scl), ARDUINO_PIN_NUM(scl));}                           \
   void  SCL_LOW(void){bitClear(ARDUINO_PORT(scl), ARDUINO_PIN_NUM(scl));}                          \
void ssd1306_i2cWriteByte##scl(byte v)           \
{                                            \
    SDA_OUT();                       \
    for (byte i=8;i;i--)  { if (v & 0x80)   SDA_HIGHT();  else  SDA_LOW();SCL_HIGHT();  v <<=1; SCL_LOW(); }                \
  SDA_IN(); SCL_HIGHT(); loop_until_bit_is_clear(ARDUINO_PIN(sda), ARDUINO_PIN_NUM(sda)); SCL_LOW();        \
}\
   void ssd1306_i2cBusOperation##scl(byte OperationID)        \
    {                                                                                                \
       switch (OperationID)                                                              \
       {                                                                                             \
          case  SSD1306::OPERATION_SEND_START:                   \
             SDA_OUT(); SDA_HIGHT();SCL_HIGHT();SDA_LOW();SCL_LOW(); ssd1306_i2cWriteByte##scl(SSD1306_ADDR<<1);break;     \
          case  SSD1306::OPERATION_SEND_STOP:                    \
             SDA_OUT();    SDA_LOW();    SCL_HIGHT();    SDA_HIGHT();    SDA_IN(); break; \
          case  SSD1306::OPERATION_SEND_ACK:                      \
             SDA_OUT();    SCL_LOW();    SDA_LOW();    SCL_HIGHT();    SCL_LOW();    SDA_IN();  break; \
          case  SSD1306::OPERATION_INIT:                      \
                        bitSet(ARDUINO_DDR(scl), ARDUINO_PIN_NUM(scl));break;  \
       }  \
    }  \
SSD1306 name(&ssd1306_i2cWriteByte##scl, &ssd1306_i2cBusOperation##scl);

........

В ассемблере смотрим

00001022 <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh>:
    1022:	54 9a       	sbi	0x0a, 4	; 10
    1024:	98 e0       	ldi	r25, 0x08	; 8
    1026:	87 ff       	sbrs	r24, 7
    1028:	02 c0       	rjmp	.+4      	; 0x102e <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh+0xc>
    102a:	5c 9a       	sbi	0x0b, 4	; 11
    102c:	02 c0       	rjmp	.+4      	; 0x1032 <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh+0x10>
    102e:	5c 98       	cbi	0x0b, 4	; 11
    1030:	00 00       	nop
    1032:	5b 9a       	sbi	0x0b, 3	; 11
    1034:	5b 98       	cbi	0x0b, 3	; 11
    1036:	91 50       	subi	r25, 0x01	; 1
    1038:	11 f0       	breq	.+4      	; 0x103e <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh+0x1c>
    103a:	88 0f       	add	r24, r24
    103c:	f4 cf       	rjmp	.-24     	; 0x1026 <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh+0x4>
    103e:	54 98       	cbi	0x0a, 4	; 10
    1040:	5b 9a       	sbi	0x0b, 3	; 11
    1042:	4c 99       	sbic	0x09, 4	; 9
    1044:	fe cf       	rjmp	.-4      	; 0x1042 <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh+0x20>
    1046:	5b 98       	cbi	0x0b, 3	; 11
    1048:	08 95       	ret

0000104a <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh>:
    104a:	81 30       	cpi	r24, 0x01	; 1
    104c:	89 f0       	breq	.+34     	; 0x1070 <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x26>
    104e:	81 30       	cpi	r24, 0x01	; 1
    1050:	28 f0       	brcs	.+10     	; 0x105c <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x12>
    1052:	82 30       	cpi	r24, 0x02	; 2
    1054:	99 f0       	breq	.+38     	; 0x107c <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x32>
    1056:	83 30       	cpi	r24, 0x03	; 3
    1058:	d1 f4       	brne	.+52     	; 0x108e <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x44>
    105a:	18 c0       	rjmp	.+48     	; 0x108c <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x42>
    105c:	54 9a       	sbi	0x0a, 4	; 10
    105e:	5c 9a       	sbi	0x0b, 4	; 11
    1060:	5b 9a       	sbi	0x0b, 3	; 11
    1062:	5c 98       	cbi	0x0b, 4	; 11
    1064:	00 00       	nop
    1066:	5b 98       	cbi	0x0b, 3	; 11
    1068:	88 e7       	ldi	r24, 0x78	; 120
    106a:	0e 94 11 08 	call	0x1022	; 0x1022 <_Z32ssd1306_i2cWriteByteOLED_SCL_PINh>
    106e:	08 95       	ret
    1070:	54 9a       	sbi	0x0a, 4	; 10
    1072:	5c 98       	cbi	0x0b, 4	; 11
    1074:	00 00       	nop
    1076:	5b 9a       	sbi	0x0b, 3	; 11
    1078:	5c 9a       	sbi	0x0b, 4	; 11
    107a:	06 c0       	rjmp	.+12     	; 0x1088 <_Z35ssd1306_i2cBusOperationOLED_SCL_PINh+0x3e>
    107c:	54 9a       	sbi	0x0a, 4	; 10
    107e:	5b 98       	cbi	0x0b, 3	; 11
    1080:	5c 98       	cbi	0x0b, 4	; 11
    1082:	00 00       	nop
    1084:	5b 9a       	sbi	0x0b, 3	; 11
    1086:	5b 98       	cbi	0x0b, 3	; 11
    1088:	54 98       	cbi	0x0a, 4	; 10
    108a:	08 95       	ret
    108c:	53 9a       	sbi	0x0a, 3	; 10
    108e:	08 95       	ret

Видим пины дергаются одной командой.
.......................... 
Цикл отправки данных и вызов стопа после цикла.
    1554:	ed 81       	ldd	r30, Y+5	; 0x05
    1556:	fe 81       	ldd	r31, Y+6	; 0x06
    1558:	8c 81       	ldd	r24, Y+4	; 0x04
    155a:	09 95       	icall
    155c:	0f 5f       	subi	r16, 0xFF	; 255
    155e:	1f 4f       	sbci	r17, 0xFF	; 255
    1560:	84 e0       	ldi	r24, 0x04	; 4
    1562:	00 30       	cpi	r16, 0x00	; 0
    1564:	18 07       	cpc	r17, r24
    1566:	b1 f7       	brne	.-20     	; 0x1554 <_ZN7SSD13066updateEv+0x4c>
    1568:	ef 81       	ldd	r30, Y+7	; 0x07
    156a:	f8 85       	ldd	r31, Y+8	; 0x08
    156c:	81 e0       	ldi	r24, 0x01	; 1
    156e:	09 95       	icall

Как видим издержки на вызов - 3 ldd (один из них данные, так что в реале - 2) и icall ну и ret. В вызванной функции все кратко. switch можно убрать, тогда вместо одной функции надо 4 соответственно. Будет чуть быстрей но это не принципиально. На этом я и успокоюсь)) Дискусию закончил. Всем привет!

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

что за куски кода вы привели .. ничё не понял .. но, тут виден дефайн для конструктора класса .. то есть идея с темплейтами и интерфейсами вам стала понятна. Верно? :)

Logik
Онлайн
Зарегистрирован: 05.08.2014

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

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

Как обещал, выкладываю результаты теста скетча от arduinec.

Скетч (копипаста из моего IDE - надеюсь, ничего не напутал?). Плата - Arduino Nano.

#define DATA_PIN 7

#if DATA_PIN > 7
#define P_PORT PORTB
#else
#define P_PORT PORTD
#endif

const byte P_BIT1 = 1U << (DATA_PIN % 8);
const byte P_BIT0 = ~P_BIT1;

void setup()
{
  pinMode(DATA_PIN, OUTPUT);
  digitalWrite(DATA_PIN, LOW);
}

void loop()
{
metka:
  P_PORT |= P_BIT1;  // High
  P_PORT &= P_BIT0;  // Low
  goto metka;
}

В моём IDE включены warning'и компилятора (по-умолчанию почему-то выключены). В процессе компиляции был warning

test.ino:10:22: warning: large integer implicitly truncated to unsigned type [-Woverflow]

Результат работы (копипаста - осциллограф умеет по USB на компьютер передавать):

screenshot.jpg

Т.е. частотометр показал 2,67МГц

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Nano на 8Мгц, так? :)

Beginner100500
Offline
Зарегистрирован: 24.07.2015

Ув. ЕвгенийП, ну вот я такой как раз начинающий, подскажите что я делал не так?

Купил летом starter kit на Arduino Mega 2560 R3 , и первым делом попробовал примеры: поморгал светодиодом, покрутил серводвигатель с потенциометра, почитал, подключил ультразвуковой датчик, слегка помучался но подсоединил входящий в набор LCD1602. Да, размер скетчей поначалу не вызывал вопросов ну 2,3..4 там килобайта, наверное так и должно быть. Потом из примеров собрал свой первый скетч и ужаснулся его размеру 21 килобайт на всего-то несколько библиотек и простенькую программку! Я же ещё ничего не написал даже!

Пользуюсь сейчас тем что написал Arhat109-2 и огромное ему спасибо. Скетч из 850 строк программы, с кучей датчиков и прерываний занимает около 4000 байт.

Вот я и хочу вас спросить: Как мне добится такого же эффекта при использовании типовой библиотеки? Очень жду ваши советы.

Дополню для конкретики:

Подключаем 1 серву для датчика HCSR-04, сам датчик, 2 простых мотора с энкодерами и делаем так: машинка крутит датчиком и запоминает расстояния +-180грд с шагом 6грд (30шт), находит свободный проезд на 30см и шириной не менее 20см и едет в него. При этом по мере движения она уточняет датчиком расстояния только по ширине прохода и пересчитывает положение найденных расстояний согласно тому что уже проехала. То есть поддерживает актуальность предыдущих измерений. Если по завершению движения прямо ехать нельзя, то ищет новый проезд или возвращается обратно. Во время движения надо ещё следить за энкодерами и выравнивать скорости двигателей, чтобы получилось движение по прямой.

Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.

Заранее благодарю за ваши рекомендации.

Beginner100500
Offline
Зарегистрирован: 24.07.2015

Дополню. В программировании не силен, было только в ВУЗе немного Паскаля и С, но это было уже давно, лет 10 назад. То что вы тут приводите, мне мало понятно как китайская грамота. Но очень интересно читать, всем участникам дискусси и ТС - мои благодарности.

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

Beginner100500 пишет:

Очень жду от Вас рекомендации как используя Wiring такой скетч упихать в занимаемые им сейчас 2.5 килобайта (с выводом на LCD выбранного направления), потому что хочу перенести его на меньшую плату.

Напрасно ждёте :)

Если Вы поняли мой пост №109 как совет цепляться за wiring - таки нет. Это был совет всегда исходить их нужд своег проекта, а не из того, какие там цифири после компиляции пишутся. Если Вас устраивает как сейчас работает, не вижу никаких оснований переходить на что-то другое, разве что Вам совсем уж заняться нечем.

Так что вопрос не "как упихать?", а "зачем упихивать?". По мне, так незачем, если всё работает и всё устраивает.

arduinec
Offline
Зарегистрирован: 01.09.2015

Beginner100500 пишет:

Arduino Mega 2560 R3 ... ужаснулся его размеру 21 килобайт

перенести его на меньшую плату

На Arduino Mega 2560 R3 ужасаться нечему - там этот счет занял менее 10% флеш-памяти.

На Arduino Nano он займёт 66% флеш-памяти, что тоже не критично.

Более важным ресурсом в Arduino является оперативная память (в Nano 2 Кб).

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Тут как раз недавно, кто-то поднимал тему как упихать робота-картографа во флеш Mini .. "не лезет" с таким Wiring. Да и просто поиском фразы "как уменьшить размер скетча", "не хватает памяти" и т.п. - с завидной регулярностью. :)

Кстати, Wiring кушает оперативу не хуже флеша .. уже приводил примеры со скрытой "буферизацией" данных. Про дисплейные либы - ваще надо молчать .. по килобайту только на буфер экрана.

ЕвгенийП, и почему меня это не удивляет? В смысле ваш отказ помочь начинающему юзверю .. Вы предлагаете "изящно чесать левое ухо правой пяткой" .. поскольку "рук" вы предварительно лишены кривостью реализации Wiring и большинства библиотек к нему и на нем (часто как следствие). Кстати, в сети много кто об этом пишет, но видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..

Извините, но я вам не верю после таких высказываний "за" Wiring. Сильно сомневаюсь в вашей реальной квалификации после предложений "не подскажу, вам не надо - не пользуйтесь".. сильно рекомендую, для начала, активно поучаствовать в темах по означенным поисковым запросам "не влезает", "как уменьшить" .. прежде чем что-то рекомендовать начинающим. Ваши посты вызывают сильное недоверие, уж извините.

Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.

arduinec
Offline
Зарегистрирован: 01.09.2015

ЕвгенийП пишет:

Так что вопрос не "как упихать?", а "зачем упихивать?". По мне, так незачем, если всё работает и всё устраивает.

Поддерживаю.

Arhat109-2 пишет:

отказ помочь начинающему юзверю

А что мешает самому броситься на помощь новичку?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Так вроде он сам справился .. и вроде бы вовсе не рекомендую Wiring а где-то даже наоборот .. :)

Нельзя вести речь про "алгоритмическую оптимизацию" и тем более для МК, когда львиная доля ресурсов жрется "базовым инструментом".

Для примеру, все тот же TWI недавно писанный. Можно наверное алгоритмически оптимизировать какое-то его пользование, безотносительно к реализации .. но, я сейчас пользуюсь "своей версией" и она способна пахать на скоростях 800кгц и не жрать 70 байт оперативы (это экономия только скрытой буферизации в twi.c! про Wire.h даже молчу), ведя при этом логирование передач и занимая миниум памяти не смотрел, байт 200 максиум ..

но что "оно даст"? Можно ли сэкономить сожранные под буферизацию объемы памяти и под избыточный код на этом улучшении? А поднять скорость до 800? Сильно сомневаюсь. А если даже и можно, то кто помешает мне этим "улучшенным" алгоритмом воспользоваться на этой "компактной" реализации? Интерфейс - это стандарт обмена.

Вот. Как-то так с отсутствием "рук". Сплошная "эквилибристика" чесания уха пяткой. :)

Я к тому, что прежде чем вести речь про алгоритмическую оптимизацию - надо иметь нормальный инструмент, позволяющий ощутить от неё выгоду.

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

Arhat109-2 пишет:

Кстати да. Я ваш пост тоже понял именно так. Как совет "цепляться" за Wiring.

Значит, Вы просто нихрена не поняли из того, что я пишу.

Очевидно, моя вина - плохо объяснял.

Arhat109-2 пишет:

ваш отказ помочь начинающему юзверю

А разве он нуждается в помощи? У него всё, как я понял, работает. А то, что ему из эстетических соображений хочется что-то куда-то впихать - так это "хочется - пусть впихивает".

Arhat109-2 пишет:

 видимо такие как Вы участники "суперкрутых" встреч и форумов об этом не знают..

 
Разумеется. Где уж нам. Мне такая позиция хорошо знакома - дураки все, кроме Вас. Спорить не буду. Вполне возможно, так оно и есть.
Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну извините, раз уж обидел. Значит сам тормоз, что ни хрена не понял .. Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет? А в качестве примеров что привели? Разного рода банальности, да ещё и не соответствующие результату. Вам это ещё на первой странице показали куда как наглядно. Ну и? Где ваши хваленые "алгоритмические оптимизации"? Третья страница идет .. как не было так и нет.

И НЕ БУДЕТ. По той самой причине: Wiring не заточен.

Нет никакого смысла искать "крутой алгоритм" в задачах управления железяками у которых стандарт обращения к ним прописан в даташитах, да в условиях когда "базовый инструмент" способен занять 66% всей памяти, как тут указали выше. Ну найдете вы что-то из ряда вон выходящее .. вместо 33% оставшихся оно займет пусть даже 5% .. перевести код на МК "меньшего класса" с двое меньшей памятью оно вам не позволит по-любому. Нет, я - не прав? :)

А вот реализация грамотного базового инструмента позволяет из 66% сделать 10% .. что существенно снижает проблему ресурсов и не менее существенно расширяет круг задач. Так может сюда направить усилия, знания и опыт, нет? Я опять не прав? :)

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

Arhat109-2 пишет:

Вы тему с чего начали? С ненужности "кодоптимизации" вроде как. Нет?

Нет, не так. Вы действительно нихрена не поняли.

Я начал с того, что есть два подхода к оптимизации. Один даёт выигрыш на проценты, другой на порядки. Я нигде не писал, что каким-то пользовать не нужно. А ещё я показал, что некоторые распространённых "оптимизации" спокойно выполняются компилятором и не нужно делать их самому.

Другое дело, что я призывал всегда думать о том, что даёт та или иная оптимизация для решения поставленной задачи. В посте №109, так прямо сказано, что походить надо "с головой", а не отвергать что-то с порога.

Arhat109-2 пишет:

да ещё и не соответствующие результату. 

Результаты у меня приведены в замерах времени. Отрицать их невозможно, да и глупо.

Arhat109-2 пишет:

Вам это ещё на первой странице показали куда как наглядно. 

Не заметил. Рассуждения про "некоторые процессоры", когда я говорил о конкретном - это флуд.

Arhat109-2 пишет:

Ну и? Где ваши хваленые "алгоритмические оптимизации"? Третья страница идет .. как не было так и нет.

И не будет. В первом посте был пример. Вам нужны ещё? Пишите сами.

Arhat109-2 пишет:

По той самой причине: Wiring не заточен.

Какое вообще отношение wiring имеет к построению алгоритмов? Вы боретесь с wiring - боритесь на здоровье. Мне это неинтересно. В тех проектах, где ресурсы были критичны, я просто писал программу в лоб, вообще без среды. А разводить огород ради мигания светодиодом - это по Вашей части - я и wiring'ом помигаю. Пусть занимает столько ресурсов, сколько ему нужно, если их хватает.  

Arhat109-2 пишет:

Нет никакого смысла искать "крутой алгоритм"

Это Ваше мнение. Оно безграмотно, но спорить я не буду.

Arhat109-2 пишет:

перевести код на МК "меньшего класса" с двое меньшей памятью оно вам не позволит по-любому. Нет, я - не прав? :)

Вы по-прежнему не понимаете о чём я здесь говорю. Для того, чтобы сказать правы Вы или не правы не хватает данных. А именно, не хватает информации о цели разработчика. Если перед разработчиком стоит цель перейти на меньший МК, он должен об этом думать. А если цель, чтобы работало на том МК, что есть и оно работает, так пусть оно занимает хоть 100% памяти. Какая разница? 

Arhat109-2 пишет:

А вот реализация грамотного базового инструмента позволяет из 66% сделать 10% .. что существенно снижает проблему ресурсов и не менее существенно расширяет круг задач. 

Сделать 66% вместо 10% не может быть целью (разве что "ради спортивного интереса"). Цель - чтобы устройство работало. И если цель достигнута, то 66 там процентов или 99 - меня  не волнует абсолютно.

Arhat109-2 пишет:

Так может сюда направить усилия, знания и опыт, нет?

Направляйте куда хотите, мы свободные люди в свободной стране. Я направляю свои услия на то, чтобы разрабатываемые устройства работали и отвечали предъявляемым требованиям. Вы - на борьбу с wiring и доказательство того, что у Вас длинее - ради Бога, я не возражаю

------------

Ещё раз, самое главное, чего Вы у меня не можете понять: вы бросаетесь в холивар как будто бы я отрицаю кодовую оптимизацию. Да, Господь с Вами, я не отрицаю ничего, что требуется для достижения цели разработки. Я отрицаю "оптимизацию ради оптимизации" и утверждаю, что подходить ко всему надо с головой! Если мой проект влазит в имеющиеся ресурсы и при этом занимает 99% памяти, я и пальцем не шевельну, чтобы сделать 98% - мне это не надо.  А вот если не влазит, тогда я напишу его по-другому. Всё делается исходя из задачи, а тратить усилия, чтобы на экране было написано 10%, а не 66% считаю глупостью. Но если Вам нравится тратить силы на это - ради Бога, я Вам ничего не запрещаю и не навязываю.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну значит я ни хрена не понял. Развлекайтесь далее с "оптимизацией" помазыванием кучки сверху .. эквилибристика "как чесать задней лапкой переднее ушко" - в свою очередь не интересует меня. Раз "если оно работает, то и ладно", а на то что тысячи начинающих учатся ПЛОХОМУ на ПЛОХОМ инструментарии Вам - "пофиг", то это не моя тема.

Развлекайтесь дальше, я Вас действительно не понял. Мне показалось, что вы решились научить новичков чему-то полезному. Извините, раз уж ошибся.

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

Не извиняйтесь, бывает. А вот за что "пасть порву" - это за то, что я кого-то плохому учу. Чему это я плохому кого-то обучил? Данное завления расцениваю, как бездоказательный и безответсвенный бред. Из того, что Вам что-то непонятно, ещё не следует, что оно плохое. Я же говрил, что надо подходить "с головой". Не заставляйте меня думать, что как раз с этим у Вас напряжёнка.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования. Что каждый вменяемый прогер видит наглядно. Посмотрите типовые заголовки тем и поднимающиеся в них вопросы. Одно и тоже .. годами. И часто от одних и тех же.

То что Вы взялись за "этюды" - наверное может стать "благом" .. хотя, тема про потоковый вывод - есть явно "не айс", ибо кучеряво писать исходный код - не есть самоцель. Он ещё и в МК влезть должен .. а там "тонким слоем поверх наверченного" .. для обычных систем - "угу, красяво", а для МК - зло. Эта тема .. увы, с вашей стороны не только НЕ затронула важные вопросы оптимизации скетчей, но и получила противодействие с вашей стороны... что, согласитесь - несколько напрягает.

Но имхо, куда как важнее предоставить этим уже "не совсем новичкам" - нормальный инструмент, который судя по словам логика, да и вашим и глядя в свои "закрома" - каждый вменяемый прогер уже давно сделал для себя сам (потому и были ваши слова мне: "не востребовано"! Конечно.. такую фигню каждый способен себе слепить на коленке). А равно, придать этим "не совсем новичкам" правильное направление и "вектор тяги" при создании новых библиотек .. собственно, вся вторая да и часть третьей страницы тут - куда как наглядно демонстрируют НЕПОНИМАНИЕ принципов построения таких либ для МК. Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)

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

Arhat109-2 пишет:

правильное направление и "вектор тяги" при создании новых библиотек ..

"не совсем новички" и "создатели новых библиотек" не та аудитория для которой пишутся этюды. Потоковый вывод - просто урок по языку. И урок неплохой, чтобы Вы не говорили. "Не совсем новичкам" он не нужен, но и не для них писано.

Arhat109-2 пишет:

Вот, мне кажется в этом направлении "копать этюды" надо. Нет? :)

Для "не совсем новичков", возможно и надо. Только "этюды" не для них. Если Вы хотите писать цикл этюдов для "не совсем новичков" - пишите. Я пишу просто уроки языка, использования компилятора, базовых приёмов программирования и т.п.  

Следующий этюд будет о работе с ОЗУ: new, malloc, объявления на стеке и т.п. Можете там отписаться, что Вы знаете (или даже разработали) более продвинутую систему управления памятью, чем та, что есть в avr-libc - Ваше право, только я буду рассматривать именно её. То, что есть другие, да есть - но это не тема этюда.

Для профи я тоже, кстати, пишу, но не здесь, а в журналах типа "Программирование" и "Суперкомпьютеры" - там пишется о другом, по-другому и для другой аудитории. Не смешивать же всё в кучу.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

ЕвгенийП, Arhat109-2 я конечно понимаю что в споре рождается истина. Но сразу вам скажу, если на этом этапе возникли разногласия то лучше воздержаться от взаимных упреков и перехода на личности. Ничего хорошего это не принесет. Я далек от программирования, мне ближе экономика, тоже расчеты и цифры, но в несколько иной плоскости.

Вот приведу пару примеров которые как мне казалось очень просты и понятны всем, всех же в школе учили считать, даже программы учебные очень одинаковы, и цифры арабские, но.....

Предистория. У нас на предприятии уважают рацпредложения, и именно те которые несут предприятию прибыль. За них платят единоразово 10% от годовой экономии, которую принесет внедрение рацпредложения.

1 История. Один Сотрудник, без имен обойдемся, просто Сотрудник, внес предложение которое удешевляло изготовление детали на 1 рубль. Так как деталей в год выпускаем примерно миллион, то экономия как не трудно посчитать 1 миллион рублей в год. Причем материальных затрат не было никаких, только изменения алгоритма работы оборудования, как следствие увеличение производительности и уменьшение отходов. Расчет показал что экономия действительно составляет 1 миллин рублей. Все проверили, протестировали, рассчитали премию в 100 тысяч рублей и выплатили. Все вроде бы логчно и всем понятно. И тут он приходить через месяц примерно и говорит - вот мне жена (бухгалтер) сказала что меня обманули. Мне должны были заплатить не 100 а 200 тысяч. Потому как первый миллион мы экономим когда производим эту деталь, а второй когда продаем, потому как цену продажи не изменили. И вот казалось бы где он не прав? Догадайтесь! В итоге как ни доказывали, убедить не смогли. Человек обиделся и уволился. 

2 История по следам первой. Через пару лет другой Сотрудник узнав что за оптимизацию платят неплохо, сам думать не стал, а взял идею первого сотрудника и решил ее модернизировать, как Эдисон лампочку. Но не учел что основная экономия была за счет уменьшения отходов, а не за счет оптимизации алгоритма работы оборудования. В итоге еще более оптимально настроил оборудование. Экономия составила в год 100 тысяч рублей. То есть премии полагается 10 тысяч. Когда он узнал про сумму то очень возмутился. Как так Первому сотруднику оплатили 100 тысяч а мне всего 10! Грабеж! Говорим если ты вообще выбросишь из производственного процесса работу оборудования то сэкономишь 300 тысяч в год, то есть максимальная премия это 30 тысяч. Но это нереально, уберешь процесс, не будет производится деталь вообще. Эти доводы его не убедили. И что думаете? Он тоже уволился обиженным.

То есть даже такие простые вещи люди не могут трактовать одинаково. И убедить их нет никакой возможности. Люди не глупые, инженеры, высшее образование. А мы тут пытаемся о сложном спорить. Мне кажется спорить надо именно когда будет практическое применение.  А пока теория. изучай, применяй, тестируй.

И какой резюм - нет смысла обяснять друг другу вещи на которые у вас разные взгляды. А тем более не надо из за этого конфликтовать.

Давайте просто делится идеями. А брать на вооружение какуюто идею или нет это личное дело каждого.

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Arhat109-2 пишет:

Я как раз не Вас лично имел ввиду, а ситуацию "в целом": есть откровенно плохой инструмент. совсем новичкам "сойдет и он", и благо что он для них ваще есть, но популярность этого инструмента - уже достаточно высокая, чтобы утверждать то, что пишу: он плохой и вынужденно учит людей плохим подходам программирования. 

Тут вы неправы в корне! Для чего плохой? Для профессионалов? Да может и так. Но он не для них. Я думаю если мне водителю с 20 летним стажем доверить самолет я на нем далеко не улечу, если вообще смогу взлететь :-)

Скажу про себя, я тоже лет 5 назад начал смотреть на AVR в плане реализации идей для умного дома. Купил программатор, накачал продвинутых IDE и итог? А дальше? А дальше все сложно. То есть это все путь специалиста для которого это направление является основным. А не просто хобби как для меня. Ну хорошо упрусь я сделаю устройство. Много таких же как я смогут его повторить? Нет. А модернизировать, переделать под свои нужды, нет. И какой смысл? Профессионал все сделает и лучше меня, а любителю мои разработки будут бесполезны. 

А вот Ардуино очень хорошо подходит для так называемого DIY. То есть я сделал, написал какие модули купить выложил схему, скетч. Какая вероятность того что любитель повтроит мою конструкцию? Думаю довольно высокая. Это доказывают некоторые публикации в проектах, когда один любитель публикует. Другие берут и используют. И чем меньше вмешательства в стандартные модули и в среду разработки тем вероятность выше.

То есть у меня не стоит задача виртуозно программировать, ни сил ни времени нет на это. А вот делать так чтобы работало и меня устраивало я могу. И мне для этого не нужно прилагать массу усилий и тратить много времени. То есть я использую Ардуино и его IDE с максимальным КПД для себя. 

Поэтому как говориться что русскому хорошо то немцу смерть :-)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Не, я вас уже понял ..<удалено самоцензурой>..

Мой совет остановитесь детальнее на паре: глобалы - локалы. Ибо это не так очевидно как кажется. И оба метода "предоставлены компилятором". О них не надо заботится прогеру специально (конструкторы, деструкторы, утечка памяти и пр.). Особенно на затраты на локалы в виде не только занимаемой памяти но и процессов помещения их туда, особенно в приложении к МК, а не системам "общего назначения", ибо специфика: .. часто глобал (пин, регистр устройства и т.п.) читается из памяти(!) и суется как параметр на стек, а потом тащится из метода в метод.. чего вполне можно и не делать. Пихать номер пина в память - тянет хвост из этой же оперы.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Arhat109-2, очевидно Вы родились с серебрянной ложкой во рту, поздравляю, потому что Вы, судя по распальцовке, сразу начали писать оптимальные тексты, потому мы, в отличии от Вас, видимо ошибочно считаем, что начинать нужно с простого, пускай и не всегда оптимального, а не с изучения внутренностей синхрофазатрона. На счет пейсателей в промышленных масштабах, так они на свои грабли наступят, не беспокойтесь, когда заказчики обломаются, тогда всё и кончится, а не кончится, пусть и дальше пишут, разводят лохов-заказчиков на бабло, нам учить заказчиков как тратить их бабло?

Новичок, если он действительно хочет чему то научиться, он научится. И этому не помогут и не помешают наши "советы". Я не говорю, при этом, что они НЕ повлияют, конечно повлияют. Разумеется если он не тупой и у него есть в голове что-то, а не просто мосК, он вырастет, как специалист и без нас.

 

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

Arhat109-2 пишет:

Вы забыли об уже значительной части подросших "профессионалов", которые кропают на wiring вполне промышленные поделки .. и считают такой подход "нормой". про что можно много чего (не)лестного почитать в сети..

Нет не забыл. Просто в данный момент я пишу не для них.

Невозможно написать материал одинаково интересный профессионалу и тому, для кого сообщение "a is not declared in this scope" является проблемой, достойной публикации вопроса на форуме. Нельзя объять необъятного.

Вы читали Джерома про часы? Там шикарный диалог:

- Странные у Вас часы. Показывают дату, день недели, фазу Луны, а который час не показывают!
- С какой стати? Часы не обязаны всё показывать!

Так что если Вы хотите написать материал для "писателей библиотек" - пишите. Я же Вам не запрещаю. Но не требуйте от меня, чтобы я его писал. Я пишу то, что интересно писать мне. А Вы - что Вам. И всем будет хорошо.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.

Первая моя прога на С - это компилятор из книжки Риччи с модификацией ряда синт. диаграмм. Пришел этакий свежеиспеченный спец. в НИИ .. и даже не прогер, а так, оптик. А ему завлаб с порога: "будешь писать на С и АСМ" .. ?!? а это хто такое? А в ответ: вот тебе книжка, там есть компилятор с этого языка .. сделаешь, но вот с таким изменением .. и заместо работы .. бывший студент три месяца перепиливал компилятор из Риччи. Заодно и язык освоил .. так с тех пор привычка и осталась знакомится с новым инструментом подобным способом. :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это было не вам. Читал. В оригинале ржачнее на порядок. :)

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

Arhat109-2 пишет:

:) просто у меня были отличные учителя. Ершов П.П. в частности и лично.

Простите мою безграмотность, а кто это? Я в пору своей молодости имел честь быть знакомым с Андреем Петровичем Ершовым, а П.П. Ершов - я только писателя такого знаю. Над чем он работал? Основные труды? Поделитесь ссылочкой.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Да господа, тему "Этюдов для начинающих" превратили в писькометрию программистов. Каждый должен сам пройти по своим граблям, а потом начинают слышать и думать, если есть чем.

Beginner100500
Offline
Зарегистрирован: 24.07.2015

Блин, ну что Вы на самом деле. Новосибирск, НГУ, Минск-222М, Фортран-2 и программки с грифом UG - Under Ground. Конечно же Андрей Петрович. "Babubi" - помните? :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bwn пишет:

Да господа, тему "Этюдов для начинающих" превратили в писькометрию программистов.

а каждый Программист мог бы спасти одного и более ДУМАЮЩЕГО начинающего......

Piskunov
Offline
Зарегистрирован: 13.02.2014

Вот читал я всё внимательно. Кое-чего понятно, кое-где ясно о чём говорят, но нет представления во что оно выльется. В целом тема полезная. Несмотря на.

Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?

По моему личному мнению - ничего сложнее стиральной машинки на ней делать нельзя.

Если чо - я новичок, про существование ардуины узнал два года назад, и если авторитетные товарищи скажут, что коллайдер на ардуине собран - поверю.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Piskunov пишет:

Но вот один вопрос мне спать спокойно не даёт и практически лишает аппетита: неужели найдётся такой мчудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino?

Если для проекта хватит ресурсов Atmegi, то почему нет? Мои контроллеры пленочных полов, думаю и вовсе на тиньке смастрячены, а цена при старом баксе по 2,5тыров за штуку, сколько их продается только по Раше предположить боюсь, и что? Работают себе четвертый год.
А использование дуин в проекте, за исключением типа про мини (если десятками штамповать), это полный бред.

Piskunov
Offline
Зарегистрирован: 13.02.2014

Ok.

Я оказался неправильно понят, уточняю. Речь не идёт о чипах производства Atmel. Речь идёт об Arduino.

В комплексе, так сказать, с средой разработки и схемными решениями.