[info] Микро-урок по программированию rusEfi

Про байтики и логику ЭБУ
Locked
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Микро-урок по программированию rusEfi

Post by AndreyB »

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

Во многих файлах с расширением .c есть метод initBlahBlah, где BlahBlah обычно похоже на имя этого файла. Это метоты инициализации, они обычно все запускаются при старте програмы. Вот тут и начнём, для примера найдём в injector_central.с метод с названием initInjectorCentral.

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

addConsoleAction добавляет команду без параметров - типа "hello".
addConsoleActionI добавляет команду с одним параметром - типа "gfc" - изменить глобальную коррекцию топлива. (I - это от слова Integer)
addConsoleActionII добавляет команду с двумя параметрами - типа "включить или выключить управление такой-то форсункой", подробности не важны. (Две II - это два раза от слова Integer)

Вот тут мы и добавим.

Code: Select all

addConsoleAction("ti", testInjector);
Этой строчкой мы зарегистрировали новую команду "ti". По нажатию в консоли ti будет выполняться метод testInjector.

Всё, сохраняем файл и компилируем.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Микро-урок по программированию rusEfi

Post by AndreyB »

Попробовали скомпилировать? Не cкомпилировалось? Конечно же не скомпилировалось - никому нельзя верить!

Метод-то мы новый упомянули, но не объявили. Надо объявить. В древнем языке С методы видны только при выполнении некоторых условиях, так что нам будет важно добавить метод в том же файле и обязательно выше метода initInjectorCentral

Метод будет вот такой для начала:

Code: Select all

void testInjector(void) {
	print("Hello world\r\n");
}
Вот теперь опять компилируем - теперь должно скомпилироваться, теперь заливаем новую прошивку в discovery и тестируем. Радуемся непродолжительно.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Микро-урок по программированию rusEfi

Post by AndreyB »

Теперь попробуем сделать что-то чуть-чуть более осмысленное - мигнём лампочкой.

Во-первых, добавим новый метод - на этот раз с одним параметром:

Code: Select all

void testInjector2(int duration) {
	print("Hello world2: %d\r\n", duration);
	turnOutputPinOn(LED_FATAL);
	chThdSleepMilliseconds(duration);
	turnOutputPinOff(LED_FATAL);
}
Во-вторых, добавим его инициализацию:

Code: Select all

addConsoleActionI("ti2", testInjector2);
Этот код должен мигнуть красной лампочкой заданное в миллисекундах время.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Locked