В оригинале читаться будет скорее "ывэнт", но так практически никто не пишет, иначе "ы" будет в каждом втором слове
Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
[uquote="NStorm",url="/forum/viewtopic.php?p=3826141#p3826141"]Я в курсе как оно на английском произносится, но тогда уж скорее всего "ивэнт". А "эвент" это просто англицизм, а не попытка передать звучание английского слова на кириллице )[/uquote]
В оригинале читаться будет скорее "ывэнт", но так практически никто не пишет, иначе "ы" будет в каждом втором слове
Кроме того есть правила транслитерации, по ним начальная английская "E" передается русской "И", это, кстати, ответ из Института русского языка РАН, конкретно по этому слову, соответственно в Русский орфографический словарь PAH тоже попал "ивент".
В оригинале читаться будет скорее "ывэнт", но так практически никто не пишет, иначе "ы" будет в каждом втором слове
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="NStorm",url="/forum/viewtopic.php?p=3826141#p3826141"]"ивэнт".[/uquote]
"ивент" правильней. Потому что там не звук 'æ', а звук 'e'!
[uquote="ARV",url="/forum/viewtopic.php?p=3826103#p3826103"]я как-то исторически организую свою программу не в виде автомата состояний в чистом виде, а именно по событийной модели[/uquote]
А я стараюсь классических автоматов придерживаться. Если нужно что-то сделать в прерывании, то выставляю вспомогательные флаги, а уж в процедуре-автомате их обрабатываю с возможной сменой состояния.
"ивент" правильней. Потому что там не звук 'æ', а звук 'e'!
[uquote="ARV",url="/forum/viewtopic.php?p=3826103#p3826103"]я как-то исторически организую свою программу не в виде автомата состояний в чистом виде, а именно по событийной модели[/uquote]
А я стараюсь классических автоматов придерживаться. Если нужно что-то сделать в прерывании, то выставляю вспомогательные флаги, а уж в процедуре-автомате их обрабатываю с возможной сменой состояния.
Последний раз редактировалось Eddy_Em Пн апр 13, 2020 08:51:03, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ну вот... были же нормальные программисты, стали филологи...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ARV, одичал народ из-за незаконного ограничения своих конституционных прав. Вот и переквалифицируется теперь из политологов в вирусологов, филологов и т.п. ☺
Re: Вопросы по С/С++ (СИ)
[uquote="NStorm",url="/forum/viewtopic.php?p=3826118#p3826118"]Так не надо заранее. Можно в процессе добавлять. Состояния и эвенты в любое время добавлять можно. Это просто enum, для именования. Для примера:
[/uquote]
Хмм, а если еще добавить некий ST_ANY и переписать обработчик переходов как-то так:
То в таблицу можно добавлять общий обработчик перехода из любого состояния для определенных ивентов, чтобы не рисовать всю таблицу. Опять же это чуть лишней оперативки в угоду читаемости и удобства.
Код: Выделить всё
typedef enum {ST_NONE, ST_IDLE, ST_CALIBRATION, ST_NORMAL, ST_BYPASS, ST_OVERFLOW, ST_RESTORATION, ST_MAINTAINCE, ST_LAST} eState;
typedef enum {EV_NONE, EV_BTN_SHORT, EV_BTN_LONG, EV_BAT_LOW, EV_AC_SHORTAGE, EV_TIMEOUT, EV_LAST} eEvent;
Хмм, а если еще добавить некий ST_ANY и переписать обработчик переходов как-то так:
Код: Выделить всё
// Run the transition based on event
eRetCode fsTransition() {
if ((state.event < EV_ANY) && (trans[state.cur_state][state.event] != NULL || trans[ST_ANY][state.event] != NULL)) {
if (trans[state.cur_state][state.event] != NULL)
state.cur_state = trans[state.cur_state][state.event](); // run the transition
else if (trans[ST_ANY][state.event] != NULL) // Catch on any state handler
state.cur_state = trans[ST_ANY][state.event]();
return RET_OK;
}
return RET_ERROR;
}
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3826255#p3826255"]ну вот... были же нормальные программисты, стали филологи...[/uquote]
Это возраст...
Да и лучше филологи чем "философы" от теорий заговора...
Это возраст...
Да и лучше филологи чем "философы" от теорий заговора...
Re: Вопросы по С/С++ (СИ)
Чтобы не возникало лишних споров по произношению/транскрипции, пишите лучше англ.термины на English (это слово - тоже с "проблемой произношения"). Либо переведите на русский. Event = событие.
to be or not to be = -1
- Starichok51
- Модератор
- Сообщения: 19043
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Вопросы по С/С++ (СИ)
а может он не знает, как это слово называется по русски?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Вопросы по С/С++ (СИ)
Всем привед!
Как правильно использовать глобальные переменныйе. В проекте (Arduino, PlatformIO) использую библиотеку для работы с дисплеем U8glib. Объявляю так:
В принципе все работает. Сейчас хочу разнести функциональность при работе с дисплеем по разным модулям, например для работы с меню в menu.cpp, для рисования графиков - chart.cpp, для рисования таблиц - table.cpp и т.д. Делал примерно так:
Как достучаться до переменной u8g, объявленной в модуле main.cpp из модуля chart.cpp? Испробовал три варианта - работает только chartUint8_v1, но такой подход меня не очень устраивает. Я хочу или на старте задать ссылку на класс (chartInit) и потом его использовать, или использовать переменю глобально (chartUint8).
Как правильно использовать глобальные переменныйе. В проекте (Arduino, PlatformIO) использую библиотеку для работы с дисплеем U8glib. Объявляю так:
Код: Выделить всё
main.cpp
#include <Arduino.h>
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(10);
void setup()
{
}
void loop()
{
}
Код: Выделить всё
chart.cpp
#include <Arduino.h>
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X screen;
void chartInit(U8GLIB_ST7920_128X64_1X v_screen)
{
screen = v_screen;
}
void chartUint8(uint8_t v_x, uint8_t v_y, const uint8_t v_s)
{
u8g.setPrintPos(v_x, v_y);
u8g.print(v_s);
}
void chartUint8_v1(U8GLIB_ST7920_128X64_1X v_screen, uint8_t v_x, uint8_t v_y, const uint8_t v_s)
{
v_screen.setPrintPos(v_x, v_y);
v_screen.print(v_s);
}- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Ключевое слово extern в заголовочном файле спасёт отца программирования.
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Лучше через функции доступа к ним. Инкапсуляция всё же полезна.Как правильно использовать глобальные переменныйе.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Это и так уже объекты.
Re: Вопросы по С/С++ (СИ)
Если бы было все так просто, то отец программирования уже бы давно бы кушал в ресторанах во фраке и белых перчатках ))) Я может ересь ща скажу, но main не имеет заголовка. Указание в заголовке chart.h дает ошибку... Если extern объявить в main.cpp - тоже ошибка.
Кстати, я нигде примера не нашел подобного. Все тупо юзают майн и не парятся...
Кстати, я нигде примера не нашел подобного. Все тупо юзают майн и не парятся...
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
extern "обещает" компилятору, что переменная такого типа есть где-то в другой единице трансляции. Там где объект определяется extern не нужен. Ну это же основы, читаем K&R на ночь до просветления.
Кстати, вы так лихо объекты присваиваете и передаёте в функции. Там накладные расходы просто ужас. Не надо так делать. Создайте один глобальный объект и работайте с ним.
Кстати, вы так лихо объекты присваиваете и передаёте в функции. Там накладные расходы просто ужас. Не надо так делать. Создайте один глобальный объект и работайте с ним.
Последний раз редактировалось VladislavS Пт апр 24, 2020 17:29:23, всего редактировалось 1 раз.
Re: Вопросы по С/С++ (СИ)
[uquote="da-nie",url="/forum/viewtopic.php?p=3832660#p3832660"]
Это как? Создать модуль, в котором создать класс работы с дисплеем, в модуле сделать функцию на получение ссылки на класс и ее юзать в других модулях? Что то типа
Лучше через функции доступа к ним. Инкапсуляция всё же полезна.[/uquote]Как правильно использовать глобальные переменныйе.
Это как? Создать модуль, в котором создать класс работы с дисплеем, в модуле сделать функцию на получение ссылки на класс и ее юзать в других модулях? Что то типа
Код: Выделить всё
lcd.cpp
#include <Arduino.h>
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X screen;
U8GLIB_ST7920_128X64_1X getLCD()
{
return screen;
}- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Так всё равно. Сами-то они доступны вне модуля станут. А модуль лучше бы сделать закрытым, чтобы его состояние менять только функциями, специально для этого предназначенными.Это и так уже объекты.
И слава богу.Я может ересь ща скажу, но main не имеет заголовка.
А вместо объектов в функции ссылки (уж не знаю, что у вас за язык - Си или С++ там) или указатели на объекты передавайте.
Да. Только лучше в вашем случае либо ссылку, либо указатель возвращать. Правда, модуль отдельный для этого можно и не создавать, ограничившись созданием объекта в одном из существующих модулей.Это как? Создать модуль, в котором создать класс работы с дисплеем, в модуле сделать функцию на получение ссылки на класс и ее юзать в других модулях? Что то типа
Но если есть желание, можно и синглетон сделать (посмотрите этот паттерн, хорошая штука в данном случае). Я правда, не знаю, много ли у вас памяти на такие фокусы.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Нельзя так делать!!! U8GLIB_ST7920_128X64_1X это класс. При его копировании, передаче в и возврате из функции создаются его копии, вызываются конструкторы копирования и присваивания, деструкторы. Любой микроконтроллер можно "положить" на лопатки.
PS: Ага, синглтон человеку, который про extern не слышал. И С++ там, неужели не видно создание объектов и вызов их методов?
PS: Ага, синглтон человеку, который про extern не слышал. И С++ там, неужели не видно создание объектов и вызов их методов?
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Меня очень смущают указание на arduino и Си++ в проекте одновременно.И С++ там, неужели не видно создание объектов и вызов их методов?
Последний раз редактировалось da-nie Пт апр 24, 2020 17:42:23, всего редактировалось 1 раз.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Вопросы по С/С++ (СИ)
Ардуина на С++ написана. Это новость?
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Для меня - да. Я же говорю, я именно с ардуиной дел никогда не имел. И не слышал, чтобы ардуинщики, скажем, winavr запускали - строго некую arduino ide. esp-шники, например, тоже не спешат ставить SDK и Си - все практически пользуются lua, at-командами и микропитоном. Плюс некая привязка к ардуине.Ардуина на С++ написана. Это новость?
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos