Jump to content

    

Как делить программу на объекты?

Arlleex, а контекст FPU вы, как я вижу, не сохраняете? Планируете?

Почему не какая-нибудь готовая ось? В главе "анализ велосипедной продукции" эта тема не очень раскрыта.

Share this post


Link to post
Share on other sites
13 hours ago, Arlleex said:

Спасибо, что делитесь опытом на конкретном примере и за описание. Думаю вам стоит выложить код на гитхаб, чтобы он затерялся. У меня бывают простые проекты по хитрому управлению реле, для однообразия тащу туда фриртос. Иногда, создаётся чувство избыточности, с другой стороны это просто ощущение) в любом случаи ещё раз спасибо вам за код.

Share this post


Link to post
Share on other sites
6 часов назад, AHTOXA сказал:

Arlleex, а контекст FPU вы, как я вижу, не сохраняете? Планируете?

Дело в том, что к реализации собственного механизма кооперативной многозадачности я пришел в некоторой степени факультативно. По работе требовалось написать ПО для МК STM32F0, который построен на базе Cortex-M3, в котором FPU нет. Поскольку это факультативное занятие я оставил себе на дом (посидеть вечерком, покумекать:paint2:), нужно было на чем-то проверить свои мысли. А под рукой оказалась только плата с STM32F4. Отсюда, собственно, и получилось, что сейчас контекст FPU я не сохраняю. Но на самом деле, не составляет проблемы сохранять и его, таким образом, адаптируя мою недоОсь под Cortex-M4F.

Планирую или нет - хм... Пока что, скорее всего, нет. Однако, если будет желание запустить свою систему на Cortex-M4F, допилю файл EDS.s, реализующий переключение контекста в части сохранения регистров FPU.

 

6 часов назад, AHTOXA сказал:

Почему не какая-нибудь готовая ось? В главе "анализ велосипедной продукции" эта тема не очень раскрыта.

Вопрос, по крайней мере для меня, скорее, из разряда риторических:smile:

Дело в том, что поставить готовую ОС не составляет проблем. Однако, когда требуется написать достаточно простое ПО, ставя туда ОСРВ типа FreeRTOS, меня не покидает чувство стрельбы из пушки по воробьям - то есть чувство неоправданного использования ресурсов. С другой стороны, иногда просто полезно повторить/написать свое, даже если это уже сделано до тебя - так существенно улучшается понимание деталей и всех процессов. Это даже скорее как спортивный хобби-интерес:to_become_senile: Для жирных проектов я сразу нацеливаюсь использовать ОСРВ, поскольку обратно слезть с ее плюшек очень тяжело. Однако, глядя на объем кода своих исходников выше, пришел к мнению, что для простых проектов тащить ОСРВ ради двух-трех потоков с полудесятком семафоров не имеет смысла (тот же FreeRTOS на минималках будет выглядеть достаточно монструозно, к тому же не совсем оптимально, ИМХО).

 

2 часа назад, Wese сказал:

Спасибо, что делитесь опытом на конкретном примере и за описание. Думаю вам стоит выложить код на гитхаб, чтобы он затерялся. У меня бывают простые проекты по хитрому управлению реле, для однообразия тащу туда фриртос. Иногда, создаётся чувство избыточности, с другой стороны это просто ощущение) в любом случаи ещё раз спасибо вам за код.

Вот да, про чувство избыточности я и хотел сказать выше:smile:

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

Share this post


Link to post
Share on other sites
1 hour ago, Arlleex said:

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

Спасибо что не запостили на гитхаб, там точно такого добра хватает. 


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

Share this post


Link to post
Share on other sites
В 15.02.2019 в 23:05, AHTOXA сказал:

static constexpr size_t bufferSize { 32 };

size_t rxCount { 0 };

uint8_t rxBuffer[bufferSize];

А почему не написали

constexpr uint bufferSize = 32;

Share this post


Link to post
Share on other sites
В 17.02.2019 в 19:40, AlexandrY сказал:

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

Я прекрасно это понимаю. Поэтому сразу оговорился, что эта система имеет недостатки, что она не является заменой полноценной вытесняющей ОСРВ. Но в ядре моей EDS всего 150 строк кода, а глаза она не замыливает в отличие от switch-case-кода. Или Вам так не кажется? Также я указал, что применять EDS (а по сути, предложенный вариант является минималистичной кооперативной ОС) можно в достаточно простых проектах, где реального времени, как такового, и не требуется. И уж тем более, я не навязываю использовать подход упрощенной кооперативной ОС: не хочется - не используйте.

P.S. Уж расход (примерный) стека даже в моем варианте можно проанализировать.

P.S. Под ресурсами я имел в виду объем ОЗУ на статические флаги в каждой функции, а также время задержки обработки событий в случае однопоточного выполнения "в лоб".

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

P.S. Только не упоминайте SSP Synergy, а то у меня укоренится стойкое впечатление, что Renesas Вам доплачивают:biggrin:

Share this post


Link to post
Share on other sites
On 2/12/2019 at 10:26 PM, AlexandrY said:

Гляньте в сорсы ThreadX. (лежит в известном всем месте)
 Там каждая! строчка прокоментирована. Ну так эта ось потому в 6 миллиардах устройств и стоит.
 Эт к вопросу о том "кто так сказал" 

Глянул в заголовки ThreadX, которая лежит на официальном сайте (Воровать, как известно, нехорошо. Особенно если можно не воровать).

Бесплатно (после регистрации) дают только заголовки, документацию и объектник.

typedef struct TX_SEMAPHORE_STRUCT
{

    /* Define the semaphore ID used for error checking.  */
    ULONG               tx_semaphore_id;

    /* Define the semaphore's name.  */
    CHAR                *tx_semaphore_name;

    /* Define the actual semaphore count.  A zero means that no semaphore
       instance is available.  */
    ULONG               tx_semaphore_count;

Ну спасибо большое! Бесценные комментарии! Как без них догадаться, что в переменной semaphore_name будет находиться название семафора?!

 

Ну и бесконечные портянки дефайнов-передефайнов, чтоб удобнее было в IDE к определению обращаться (для тех счастливчиков, кто купил исходники).

/* Services without error checking.  */

#define tx_kernel_enter                             _tx_initialize_kernel_enter

#define tx_block_allocate                           _tx_block_allocate
#define tx_block_pool_create                        _tx_block_pool_create
#define tx_block_pool_delete                        _tx_block_pool_delete
#define tx_block_pool_info_get                      _tx_block_pool_info_get
#define tx_block_pool_performance_info_get          _tx_block_pool_performance_info_get
#define tx_block_pool_performance_system_info_get   _tx_block_pool_performance_system_info_get
#define tx_block_pool_prioritize                    _tx_block_pool_prioritize
#define tx_block_release                            _tx_block_release

 

Ну, в общем, к вопросу о том, "кто так сказал"... Доверия к восторженным крикам AlexanderY как не было, так и не появляется никак...

 

Share this post


Link to post
Share on other sites
2 hours ago, esaulenka said:

Глянул в заголовки ThreadX, которая лежит на официальном сайте (Воровать, как известно, нехорошо. Особенно если можно не воровать).

Ну и бесконечные портянки дефайнов-передефайнов, чтоб удобнее было в IDE к определению обращаться (для тех счастливчиков, кто купил исходники).

Ох уж эти наивные передергивания. Речь не о воровать, а о реверсе.
И как известно самые либеральные законы по поводу реверса приняты в оплоте демократии. 
Во вторых надо было показать коммент перед дефайнами, который говорит о том, что в RTOS-е есть API с контролем ошибок и есть более быстрое без контроля. 
А там ниже еще куча дефайнов с настройками с помощью которых разрешают или запрещают отдельные сервисы, включая кстати очень крутой сервис трассировки.  
Если не нравятся быстрые и развитые оси юзайте FreeRTOS. 

Share this post


Link to post
Share on other sites
23 hours ago, Arlleex said:

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

 

Лет двадцать назад запилил кооперативку начитавшись этого товарища

http://www.drdobbs.com/embedded-systems/a-task-dispatcher-for-embedded-systems/184411018

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

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

Share this post


Link to post
Share on other sites
1 hour ago, ig_z said:

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

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

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

Поизучайте матчасть, а уже потом хихикайте :)

Share this post


Link to post
Share on other sites
On 2/18/2019 at 8:51 PM, Arlleex said:

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

Берете проекты стеков ZigBee или Bluetooth под bareboard, такие есть у NXP , входят в их SDK и находите там эти самые недооси. 
Обычно лежат в файлике с незатейливым названием   *_os_abstraction_bm.c

Конечно всем известный - http://www.state-machine.com/qpc/ тож недоось. 

Недооси, а точнее событийные автоматы  теперь не пишут на С, а разрабатывают и отлаживают в средах типа Stateflow или Visual State
В отличие от текстового самопала стэйт диаграммы дают любой уровень вложенности и параллелизма, а также прямую передачу ивентов сквозь иерархию. 

Share this post


Link to post
Share on other sites
On 2/16/2019 at 4:23 AM, AHTOXA said:

Срочно учить матчасть! Растактовку, потерю на переходах, сброс конвейера и всё такое.

Запоздалый вопрос, но где именно про это читать? Cortex-Mx Technical Reference Manual?

Share this post


Link to post
Share on other sites
В 19.02.2019 в 20:45, ig_z сказал:

Единственное, что не попробовали - это маложрущие режимы.

Чуть позже попробовали, на MSP. Если я правильно понял, о чём речь. :)

Share this post


Link to post
Share on other sites
2 часа назад, haker_fox сказал:

Запоздалый вопрос, но где именно про это читать? Cortex-Mx Technical Reference Manual?

Да, TRM.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now