Jump to content

    
Sign in to follow this  
ViKo

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

Recommended Posts

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this