Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?

releyshic
Offline
Зарегистрирован: 20.11.2015

Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?

Собственно ругается компилятор на скобочки, не может найти  ))

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

А то вроде как и ООП даже есть а такие мелочи не поддерживает

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

какие мелочи? - скобки за тебя писать?

кретинам, забаненым на arduino.ru Программирование

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

releyshic пишет:

Поддерживает ли Arduino IDE Вложенные функции? Какой вообще компилятор там и где весь синтаксис глянуть?

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

Компилятор там gcc.

Гляньте стандарт С++ и документацию на gcc.

releyshic пишет:

А то вроде как и ООП даже есть а такие мелочи не поддерживает

"Даже ООП" - есть в стандарте C++, а "такой мелочи" в стандарте нет. Вот такой Вам язык попался. В принципе, gcc, вроде, поддерживает влоенные функции, если правильно опции выставить, но как расширение языка, т.к. в стандарте языка ничего такого нет. Но, не думаю, что это расширение поддерживается в версии для AVR, т.к. вложенные функции довольно трудно реализовать на гарвардской архитектуре. На фон-неймановской они реализуются за счёт того, что исполняемый код размещается на стеке. Хотя, может как-то и реализовали, я специально не исследовал.

В стадарте С++ есть более продвинутая вещь - лямда-выражения, которые полностью перерывают функционал вложенных функций и дают ещё много чего другого. Пользуйтесь ими - это средство стандартное и от компилятора по идее не зависит.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ого как глубоко. я думал про банальное 

void raz(){
  //.......
}

void dva(){
  raz();
  //.......
}

void tri(){
  dva();
  //.......
}

 

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

jeka_tm пишет:
ого как глубоко. я думал про банальное

Ну, не знаю, я-то подумал, что ТС имеет в виду честные вложенные - когда одна функция определяется внутри другой (и является локальной).

releyshic
Offline
Зарегистрирован: 20.11.2015

О том и речь )) что функция внутри функции обьявляется ) наподобии пользовательских классов

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

Зато вот только щас опять на долбаный касяк Копилятора нарвался!

Нельзя комметрии /* */ внутри /* */ делать, падла достал уже ))

releyshic
Offline
Зарегистрирован: 20.11.2015

и они не работают

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

releyshic пишет:

Зато вот только щас опять на долбаный касяк Копилятора нарвался!

то компилятор нарвался на косяк.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Уважаемый ТС. 

Я не силен в программировании микроконтроллеров, но МК это не интерпретатор JAVA. Тут вся суть программирования заключается в том, что нужно уложится в несколько килобайт компилированного кода. 

Да... Прошли времена когда на моем МК-61 было 104 байта для программы и несколько байт для переменных.

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

Давеча искал библиотеку для своего LCD. - Нашел, но работала криво и медленно. Начал выбрасывать все не нужное и... О чудо!!!! Из огромной библиотеки осталось 10% кода.

Как все запущено.  - Иду учить ассемблер.

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

releyshic пишет:

О том и речь )) что функция внутри функции обьявляется ) наподобии пользовательских классов

Не вижу никакого подобия, но Вам виднее.

releyshic пишет:

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

Это самое мерзкое, что они могли придумать нагло насрав на стандарт языка - это создаёт массу проблем при программировании. Так что не знаю, чему Вы радуетесь.

releyshic пишет:

Зато вот только щас опять на долбаный касяк Копилятора нарвался!

Нельзя комметрии /* */ внутри /* */ делать, падла достал уже ))

Это косяк Вашего знания языка. Такие комментарии не вкладываются по стандарту языка и компилятор точно следует стандарту, а не Вашим фантазиям.

 

releyshic
Offline
Зарегистрирован: 20.11.2015

Arduina и ассемблер несовместимы, одна идея другой противоречит ))

Нравится ассемблер вот и купи себе Тиню 2313 и кодь её ))

Вложенные фукции наврятли делают код тяжёлым сравнению с ООП например или массивами )

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

Okmor пишет:

Иду учить ассемблер.

сразу в машинном коде - хули тратить бесценные машинные ресурсы на компилляцию?

releyshic
Offline
Зарегистрирован: 20.11.2015

"Это косяк Вашего знания языка. Такие комментарии не вкладываются по стандарту языка и компилятор точно следует стандарту, а не Вашим фантазиям."

Вообще тут не в компиляторе дело, а в среде

В любой среде программирования можно вложенные комметарии делать, это очень удобно, не нравится, не делай, а по поводу прототипов то они просто не нужны видимо из-за отсутствия сложных синтаксических конструкций или объясняет полдучасовую компиляцию скетчей ))

releyshic
Offline
Зарегистрирован: 20.11.2015

Можно ещё триггеры компановать в логичекие цепочки ))

releyshic
Offline
Зарегистрирован: 20.11.2015

"Это самое мерзкое, что они могли придумать нагло насрав на стандарт языка - это создаёт массу проблем при программировании."

а в чём проблемы то могут быть ?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Я вижу тут есть два типа хобби-програмистов.

Первый начинает с arduino и понемногу движется к ООП. Когда не хватает мощностей, то переходят на более мощную arduin-у. Это все заканчивается на переход к "raspberry pi" и дальше. Ихние изделия становятся красивыми и красочными.

Второй тип хобби-програмистов движутся в другую сторону. Они начинают изучать регистры, прерывания, отказываются от digitalwrite, analogread, и постепенно переходять на avr studio. Ихние изделия становятся маленькими, дешовыми и экономичными.

Мне трудно определить какой путь лучше.

releyshic
Offline
Зарегистрирован: 20.11.2015

Okmor пишет:

Я вижу тут есть два типа хобби-програмистов.

Первый начинает с arduino и понемногу движется к ООП. Когда не хватает мощностей, то переходят на более мощную arduin-у. Это все заканчивается на переход к "raspberry pi" и дальше. Ихние изделия становятся красивыми и красочными.

Второй тип хобби-програмистов движутся в другую сторону. Они начинают изучать регистры, прерывания, отказываются от digitalwrite, analogread, и постепенно переходять на avr studio. Ихние изделия становятся маленькими, дешовыми и экономичными.

Мне трудно определить какой путь лучше.

Надо применять ассемблер там где он нужен, если нужен вообще, от него уходят потихоньку, тем более в С низкоуровневость есть и применять ООП там где оно нужно

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

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

releyshic пишет:

Вообще тут не в компиляторе дело, а в среде

Правила записи комментариев определяются стандартом языка. Среда тут не при делах.

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

Если сильно нужна вложенная функция, её легко эмулировать через lambda-выражение

typedef int (* MyFunctType)(int);

void setup() {
	Serial.begin(115200);
	MyFunctType kv = [](int x) { return x * x; };
	Serial.print (kv(3));
}

Здесь kv вполне себе "вложенная функция".

Только не забудьте включить опцию -std=c++11

releyshic
Offline
Зарегистрирован: 20.11.2015

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

releyshic пишет:

Вообще тут не в компиляторе дело, а в среде

Правила записи комментариев определяются стандартом языка. Среда тут не при делах.

среда может показывать тебе комментарии а компилятору не показывать ))

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

releyshic пишет:

а в чём проблемы то могут быть ?

Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.

Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.

typedef int MyType;

MyType myFunc(MyType n) {
	return n + 1;
}


void setup() {
	MyType a = myFunc(1);
}

void loop(void) {}

 

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

releyshic пишет:

среда может показывать тебе комментарии а компилятору не показывать ))

Это и есть мерзость (см. мой пост про собственные типы чуть выше). Это приводит к абсолютно непонятным сообщениям компилятора. Пусть уж лучше она показывает компилятору в точности то, что я написал. Кто, блин, в доме хозяин я  - или дебильный редактор.

releyshic
Offline
Зарегистрирован: 20.11.2015

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

releyshic пишет:

а в чём проблемы то могут быть ?

Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.

Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.

typedef int MyType;

MyType myFunc(MyType n) {
	return n + 1;
}


void setup() {
	MyType a = myFunc(1);
}

void loop(void) {}

наверняка могу сказать что функции принимают Обьекты типа Класс, насчёт возвращения не знаю не пробовал, ну указатели то можно

Може тему typedef не нравится

releyshic
Offline
Зарегистрирован: 20.11.2015

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

releyshic пишет:

среда может показывать тебе комментарии а компилятору не показывать ))

Это и есть мерзость (см. мой пост про собственные типы чуть выше). Это приводит к абсолютно непонятным сообщениям компилятора. Пусть уж лучше она показывает компилятору в точности то, что я написал. Кто, блин, в доме хозяин я  - или дебильный редактор.

настрой как надо в чём проблема, а так долше с комментариями возишься чем код пишешь если чтото не работает

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

releyshic пишет:

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

Вы ошибаетесь - нельзя. Попробуйте:

class MyClass {
	public: 
		MyClass() {
			a = 1;
		};
		int a;
};

int myFunc(MyClass * pMC) {
	return pMC->a;
}


void setup() {
	MyClass mc;
	int a = myFunc(&mc);
}

void loop(void) {}

releyshic пишет:

Може тему typedef не нравится

releyshic, я - профессионал, и если я что-то говорю, то отвечаю за свои слова. Конструкция, которую я написал абсолютно корректна.

Не нравится ему то, что дебильная среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.

Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.

 

releyshic
Offline
Зарегистрирован: 20.11.2015

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

releyshic пишет:

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

Вы ошибаетесь - нельзя. Попробуйте:

class MyClass {
	public: 
		MyClass() {
			a = 1;
		};
		int a;
};

int myFunc(MyClass * pMC) {
	return pMC->a;
}


void setup() {
	MyClass mc;
	int a = myFunc(&mc);
}

void loop(void) {}

releyshic пишет:

Може тему typedef не нравится

releyshic, я - профессионал, и если я что-то говорю, то отвечаю за свои слова. Конструкция, которую я написал абсолютно корректна.

Не нравится ему то, что дебильная среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.

Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.

 

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

к тому же этот код у меня работает, в скетче работает

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

releyshic пишет:

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

Не сомневаюсь. Инклудами - пожалуйста.  И возвращать, кстати, можете сколько угодно. Разве я где-то говорил про инклуды? Я говорил про определения класса в том же файле.

А ещё точнее - я говорил в целом о том, что из-за дебильных дествий разработчиков IDE (которым Вы радуетесь) не работают абсолютно корректные язывковые конструкции. Руки повыдёргивать за такие "усовершенствования" надо.

releyshic
Offline
Зарегистрирован: 20.11.2015

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

jeka_tm пишет:
ого как глубоко. я думал про банальное

Ну, не знаю, я-то подумал, что ТС имеет в виду честные вложенные - когда одна функция определяется внутри другой (и является локальной).

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

а что ещё другое может быть?

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

releyshic пишет:

я это собственно и имел ввиду мне локальная нужна функция

Ну и делайте, как я написал в посте №21, нахрена это нужно, я не понимаю, но если нужно - делайте.

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

Зачем вам локальные функции?

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

Для удобства? А какое может быть удобство в нескольких килобайт машинного кода. 

Конечно программировать используя ООП довольно удобно, но тогда перестаешь понимать куда девается память и почему контроллер начинает прос так перегружатся.

И меня действительно удручает отсутствие порядка обявления функций. Но тут есть нюанс. Функции все и всегда загруженны в память и каждая имеет свой адрес. Все функции всегда присутствуют в контроллере и пофигу когда их объявляли.

releyshic
Offline
Зарегистрирован: 20.11.2015

Okmor пишет:

Зачем вам локальные функции?

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

Для удобства? А какое может быть удобство в нескольких килобайт машинного кода. 

Конечно программировать используя ООП довольно удобно, но тогда перестаешь понимать куда девается память и почему контроллер начинает прос так перегружатся.

И меня действительно удручает отсутствие порядка обявления функций. Но тут есть нюанс. Функции все и всегда загруженны в память и каждая имеет свой адрес. Все функции всегда присутствуют в контроллере и пофигу когда их объявляли.

причём тут ООП? оно вообще тут никаким боком/

Мне кажется порядок всё же есть при явном указании прототипов, но это пробовать надо

releyshic
Offline
Зарегистрирован: 20.11.2015

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

releyshic пишет:

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

Не сомневаюсь. Инклудами - пожалуйста.  И возвращать, кстати, можете сколько угодно. Разве я где-то говорил про инклуды? Я говорил про определения класса в том же файле.

А ещё точнее - я говорил в целом о том, что из-за дебильных дествий разработчиков IDE (которым Вы радуетесь) не работают абсолютно корректные язывковые конструкции. Руки повыдёргивать за такие "усовершенствования" надо.

так в твоём примере же и есть "Я говорил про определения класса в том же файле." и он работает в скетче

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

releyshic пишет:

так в твоём примере же и есть "Я говорил про определения класса в том же файле." и он работает в скетче

Мой пример работает в скетче? Вы бредите :) Вы что-то перепутали - такое работать не может.

releyshic
Offline
Зарегистрирован: 20.11.2015

работает и не лень даже было циферки твои убирать номера строк

http://www.fayloobmennik.net/5910132

скетч и фото

http://www.fayloobmennik.net/5910138

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

Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:

sketch_mar10a:2: error: 'MyClass' was not declared in this scope
sketch_mar10a:2: error: 'pMC' was not declared in this scope
sketch_mar10a.ino: In function 'int myFunc(MyClass*)':
sketch_mar10a:11: error: 'int myFunc(MyClass*)' redeclared as different kind of symbol
sketch_mar10a:2: error: previous declaration of 'int myFunc'
sketch_mar10a.ino: In function 'void setup()':
sketch_mar10a:20: error: 'myFunc' cannot be used as a function
sketch_mar10a.ino:20:7: warning: unused variable 'a' [-Wunused-variable]
'MyClass' was not declared in this scope
releyshic
Offline
Зарегистрирован: 20.11.2015

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

Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:

sketch_mar10a:2: error: 'MyClass' was not declared in this scope
sketch_mar10a:2: error: 'pMC' was not declared in this scope
sketch_mar10a.ino: In function 'int myFunc(MyClass*)':
sketch_mar10a:11: error: 'int myFunc(MyClass*)' redeclared as different kind of symbol
sketch_mar10a:2: error: previous declaration of 'int myFunc'
sketch_mar10a.ino: In function 'void setup()':
sketch_mar10a:20: error: 'myFunc' cannot be used as a function
sketch_mar10a.ino:20:7: warning: unused variable 'a' [-Wunused-variable]
'MyClass' was not declared in this scope

значит среда другая у меня 1.6.7 или в настройках нах***ертил

убери ; после конструктора

пора пересаживаться на Visual  Micro, задолбался ждать компиляции, тем более с ТФТ работаю и с РТЦ впридачу

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

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

releyshic пишет:

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

Не сомневаюсь. Инклудами - пожалуйста...

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

#include "C:/Documents and Settings/DED5~1/C316~1/Arduino/Osciloscop_32/str.inc"

Это из 1.6.5.

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

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

среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.

Но если объявить функцию в нужном месте, то компиляция проходит.

class MyClass {
    public:
        MyClass() {
            a = 1;
        };
        int a;
};

int myFunc(MyClass * pMC);

void setup() {
    MyClass mc;
    int a = myFunc(&mc);
}

void loop(void) {}

int myFunc(MyClass * pMC) {
    return pMC->a;
}

 

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

arduinec пишет:

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

среда ради того, чтобы Вы могли размещать функции где попало, сама вставляет в код предварительные объявления функций в самом начале. В результате они оказываютя ВЫШЕ обявлений типов и классов.

Но если объявить функцию в нужном месте, то компиляция проходит.

class MyClass {
    public:
        MyClass() {
            a = 1;
        };
        int a;
};

int myFunc(MyClass * pMC);

void setup() {
    MyClass mc;
    int a = myFunc(&mc);
}

void loop(void) {}

int myFunc(MyClass * pMC) {
    return pMC->a;
}

 

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

И это не единствееная беда. Там ещё с условной копиляцией проблемы возникают из-за того же.

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

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

Беда-то в том, что тот код, который не проходит, абсолютно корректен с точки зрения языка, но из-за их идиотских "улучшений" он не компилируется - за такое разработчикам среды надо руки отрывать.

Согласен, проблемы есть. Сам сейчас пытаюсь большой си-шный проект в Ардуину запихать,

Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.

P.S. Что касается примера с классами и функциями, то меня ещё в прошлом веке учили (и сам учился), что функцию сначала нужно объявить, а затем описать. Сейчас мы просто расслабились и позволяем компилятору самому объявлять за нас функции.

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

arduinec пишет:

Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.

"За всю Одессу" не скажу, а что лично мне мешает этим заняться, ответить могу.

Мешает отсутствие потребности. Зачем, когда есть AVR-студия? Лично я нормально живу и с IDE и со студией, когда надо. А делать что-то своё - надо понимать что ты от этого поимеешь. Вариантов собственно два: удовольствие или деньги (или и то, и другое в каких-то пропорциях). Удовольствия от такой работы я лично не получу - с точки зрения программирования она тривиальна, но при этом весьма трудоёмка. Денег тут тоже не поднять - какой дурак будет мне платить, когда есть бесплатная AVR-студия, да и и IDE тоже. Потому я и не делаю. 

releyshic
Offline
Зарегистрирован: 20.11.2015

arduinec пишет:

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

Беда-то в том, что тот код, который не проходит, абсолютно корректен с точки зрения языка, но из-за их идиотских "улучшений" он не компилируется - за такое разработчикам среды надо руки отрывать.

Согласен, проблемы есть. Сам сейчас пытаюсь большой си-шный проект в Ардуину запихать,

Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.

P.S. Что касается примера с классами и функциями, то меня ещё в прошлом веке учили (и сам учился), что функцию сначала нужно объявить, а затем описать. Сейчас мы просто расслабились и позволяем компилятору самому объявлять за нас функции.

сначала не было объявлений вообще, их ввели для удобства чтобы запихивать тела функции куда попало и вызывать откуда хочется. Функции были цельными

releyshic
Offline
Зарегистрирован: 20.11.2015

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

arduinec пишет:

Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.

"За всю Одессу" не скажу, а что лично мне мешает этим заняться, ответить могу.

Мешает отсутствие потребности. Зачем, когда есть AVR-студия? Лично я нормально живу и с IDE и со студией, когда надо. А делать что-то своё - надо понимать что ты от этого поимеешь. Вариантов собственно два: удовольствие или деньги (или и то, и другое в каких-то пропорциях). Удовольствия от такой работы я лично не получу - с точки зрения программирования она тривиальна, но при этом весьма трудоёмка. Денег тут тоже не поднять - какой дурак будет мне платить, когда есть бесплатная AVR-студия, да и и IDE тоже. Потому я и не делаю. 

конечно нет смысла делать, это очевидно )

но вот могли бы Хорошие качественные уроки сделать по AVR-студии на русском нажстройке ардино к ней

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

arduinec пишет:

Что мешает собраться всем на форуме и клонировать Arduino IDE, улучшив среду разработки так, чтобы все си-шные процедуры в ней выполнялись.

что мешает ЕвгенийП, юзать актуальные версии Дуино ИДЕ?

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

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

releyshic пишет:

а в чём проблемы то могут быть ?

Нельзя использовать собственные типы (или классы) в параметрах и возвращаемых значения функций.

Например, вот такая конструкция с точки зрения языка абсолютно корректна. Однако, попробуйте её скомпилировать в среде Ардуино.

typedef int MyType;

MyType myFunc(MyType n) {
	return n + 1;
}


void setup() {
	MyType a = myFunc(1);
}

void loop(void) {}

 

попробовал, и чего?

Скетч использует 314 байт (5%) памяти устройства. Всего доступно 6 144 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2 039 байт для локальных переменных. Максимум: 2 048 байт.
Клапауций 322
Offline
Зарегистрирован: 31.12.2015

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

Вы ошибаетесь - нельзя. Попробуйте:

class MyClass {
	public: 
		MyClass() {
			a = 1;
		};
		int a;
};

int myFunc(MyClass * pMC) {
	return pMC->a;
}


void setup() {
	MyClass mc;
	int a = myFunc(&mc);
}

void loop(void) {}

попробовал:

Скетч использует 314 байт (5%) памяти устройства. Всего доступно 6 144 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2 039 байт для локальных переменных. Максимум: 2 048 байт.

 

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

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

Т.е. авторы IDE просто поглумились над программой, а Вас это почему-то радует.

прошу авторов Дуино ИДЕ прекратить глумиться над ЕвгенийП!

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

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

Я не знаю, что это за картинка. У меня выдаётся вот такое сообщение:

sketch_mar10a:2: error: 'MyClass' was not declared in this scope
sketch_mar10a:2: error: 'pMC' was not declared in this scope
sketch_mar10a.ino: In function 'int myFunc(MyClass*)':
sketch_mar10a:11: error: 'int myFunc(MyClass*)' redeclared as different kind of symbol
sketch_mar10a:2: error: previous declaration of 'int myFunc'
sketch_mar10a.ino: In function 'void setup()':
sketch_mar10a:20: error: 'myFunc' cannot be used as a function
sketch_mar10a.ino:20:7: warning: unused variable 'a' [-Wunused-variable]
'MyClass' was not declared in this scope

ну, да - "я не знаю", "я-профессионал", "я ищу баги в гавне мамонта, в то время, как непрофессионалы не могут понять, в чём, собственно, проблема..."

*всем непрофессионалам, срочно перейти на версию Дуино ИДЕ 0.1, дабы быть с ЕвгенийП на одной волне и испытывать аналогичный батхерт профессионализму!