<?xml version="1.0"?>
<rss version="2.0"><channel><title>scmRTOS Latest Topics</title><link>https://electronix.ru/forum/forum/188-scmrtos/</link><description>scmRTOS Latest Topics</description><language>en</language><item><title>&#x421;&#x430;&#x439;&#x442; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x430; &#x441; &#x43E;&#x43D;&#x43B;&#x430;&#x439;&#x43D; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x435;&#x439;</title><link>https://electronix.ru/forum/topic/213314-sayt-proekta-s-onlayn-dokumentatsiey/</link><description><![CDATA[<p>
	Всем привет!
</p>

<p>
	Проект, наконец, обзавёлся похожим на настоящий сайтом: <a href="https://scmrtos.github.io" rel="external nofollow">https://scmrtos.github.io</a>.
</p>

<p>
	Сайт поддерживает два языка (English/Русский). 
</p>

<p>
	Основной причиной появления сайта стал перевод документации в онлайн формат, как более удобный и оперативный, и которая более актуальна, чем pdf варианты (они давно не обновлялись и скорее всего постепенно отомрут -- останутся только для истории).
</p>

<p>
	Сайт создан генератором статических сайтов <a href="https://www.mkdocs.org" rel="external nofollow">MkDocs</a>, исходники этого проекта лежат по ссылке: <a href="https://github.com/scmrtos/project-site" rel="external nofollow">https://github.com/scmrtos/project-site</a>. Сами тексты там в формате markdown (файлы с расширением md), доступны для чтения без дополнительных инструментов.
</p>
]]></description><guid isPermaLink="false">213314</guid><pubDate>Sat, 10 Jan 2026 11:02:05 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x440;&#x442; scmRTOS &#x434;&#x43B;&#x44F; RISC-V</title><link>https://electronix.ru/forum/topic/206088-port-scmrtos-dlya-risc-v/</link><description><![CDATA[<p>
	Сделал для себя порт GCC-RISC-V. За основу брал порт для Cortex.<br />
	Юзаю на К1921ВГ015. В проекте всего 2 процесса, все работает как надо.<br />
	Специальных тестов для выявления всех возможных косяков не делал, нет на это времени.<br />
	Код тоже особо не причесывал.
</p>

<p>
	Если кому интересно, могу выложить
</p>
]]></description><guid isPermaLink="false">206088</guid><pubDate>Thu, 07 Aug 2025 12:40:09 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x447;&#x430;&#x43B;&#x43E; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441; scmRTOS</title><link>https://electronix.ru/forum/topic/43646-nachalo-raboty-s-scmrtos/</link><description><![CDATA[
<p>
	Хочется научиться работать с этой штукой - scmRTOS &amp; AVR(Atmega8) &amp; IAR 4.30A ! Почитал темы которые есть на форуме, почитал User's Manual v2. Возникло некторое количество вопросов:
</p>

<p>
	1. Какая последовательность создания проекта: мои предположения - создаем в IAR новый проект, тискаем добавить файлы в проект и добавляем OS_Kernel.cpp , OS_Services.cpp , OS_Target_asm.s90 , OS_Target_cpp.cpp , usrlib.cpp. В maim.cpp пишем
</p>

<pre class="ipsCode">
#include &lt;scmRTOS.h&gt;</pre>

<div>
	 
</div>

<p>
	. Затем каким то образом нужно создать самому как я понял scmRTOS_TARGET_CFG.h и scmRTOS_CONFIG.h, но как не ясно или их нужно тупо скопировать из примера автора и если что нада то менять.
</p>

<p>
	2. Почему в примерах автор добавляет
</p>

<pre class="ipsCode">
void OS::SystemTimerUserHook() { }
void OS::IdleProcessUserHook() { }</pre>

<div>
	 
</div>

<p>
	 
</p>

<p>
	Так нужно делать всегда ?
</p>

<p>
	3. Дальше &gt;&gt; понятно что для AVR передачу управления можно осуществить сгенерировав прерывание например от компоратора как описано в документации, но непонятно как нужно оформить функцию обработки этого прерывания, и чем она будет отличаться от функции обработки других прерываний.
</p>

<p>
	 
</p>

<p>
	О взаимодействии между потоками пока вроде понятно.
</p>

<p>
	 
</p>

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

<p>
	 
</p>

<p>
	Мог написать что - нибудь глупое, потому как в круг моих понятий scmRTOS пока входит очень туманно или вообще не входит.
</p>
]]></description><guid isPermaLink="false">43646</guid><pubDate>Wed, 20 Feb 2008 14:56:24 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x440;&#x442; Cortex-M0/M3/M4(F) IAR &#x437;&#x430;&#x43B;&#x438;&#x442; &#x432; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x430;&#x440;&#x438;&#x439;</title><link>https://electronix.ru/forum/topic/156061-port-cortex-m0m3m4f-iar-zalit-v-repozitariy/</link><description><![CDATA[
<p>
	Добрый день, коллеги! <a href="https://github.com/scmrtos/scmrtos/commits/develop" rel="external nofollow">Тут)</a> Пока смог протестировать только для Cortex-M0. Конкретно: stm32f051. Остальные архитектуры возможно на днях.
</p>

<p>
	Пробуйте) Пишите о результатах. Если что, буду править)
</p>
]]></description><guid isPermaLink="false">156061</guid><pubDate>Mon, 23 Mar 2020 01:01:39 +0000</pubDate></item><item><title>scmRTOS / STM8L151C8T6 / IAR: &#x43E;&#x448;&#x438;&#x431;&#x43A;&#x430;</title><link>https://electronix.ru/forum/topic/165890-scmrtos-stm8l151c8t6-iar-oshibka/</link><description><![CDATA[
<p>
	По известным причинам пытаюсь мигрировать c STM32 на STM8 (32 битные использовали "с жиру", и из любопытства - Linux/GCC/ChibiOS).  Взял пример 1-event-flag / STM8S / IAR. Чуть чуть допилил для STM8L - все работает как должно.<br />
	Изменил структуру проекта под себя, мелкие попутные проблемы решил, кроме одной:<br />
	Компилятор ругается на использование макросов Pin: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="typ">Error</span><span class="pun">[</span><span class="typ">Li005</span><span class="pun">]:</span><span class="pln"> no definition </span><span class="kwd">for</span><span class="pln"> </span><span class="str">"Pin&lt;(char)67, (int)7, (char)0&gt;::GPIOx"</span><span class="pln"> </span><span class="pun">[</span><span class="pln">referenced from C</span><span class="pun">:</span><span class="pln">\Users\.</span><span class="pun">..</span></pre>

<p>
	в моем случае он объявлен так
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="typ">Pin</span><span class="pun">&lt;</span><span class="str">'C'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">&gt;</span><span class="pln"> </span><span class="typ">LedG</span><span class="pun">;</span></pre>

<p>
	использование:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="typ">LedG</span><span class="pun">.</span><span class="typ">Cpl</span><span class="pun">();</span><span class="pln"> </span></pre>

<p>
	пробовал намеренно внести ошибку в определение:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="typ">Pin</span><span class="pun">&lt;</span><span class="str">'C'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">7</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">&gt;</span><span class="pln"> </span><span class="typ">LedG</span><span class="pun">;</span></pre>

<p>
	сообщение об ошибке меняется:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="typ">Error</span><span class="pun">[</span><span class="typ">Pe443</span><span class="pun">]:</span><span class="pln"> too many arguments </span><span class="kwd">for</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="kwd">template</span><span class="pln"> </span><span class="str">"Pin"</span><span class="pln"> C</span><span class="pun">:</span><span class="pln">\Users\.</span><span class="pun">..</span></pre>

<p>
	то есть определение то компилятор видит, и в чем проблема, неясно. Все исходные файлы примера сохранены и пути к ним объявлены...
</p>
]]></description><guid isPermaLink="false">165890</guid><pubDate>Thu, 24 Mar 2022 03:55:30 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x434;&#x441;&#x43A;&#x430;&#x436;&#x438;&#x442;&#x435; &#x433;&#x434;&#x435; &#x43F;&#x43E;&#x440;&#x442; ARM7 &#x434;&#x43B;&#x44F; IAR?</title><link>https://electronix.ru/forum/topic/165089-podskazhite-gde-port-arm7-dlya-iar/</link><description><![CDATA[
<p>
	Перекопал форум, что-то ссылок не нашел. Подскажите где лежит.
</p>

<p>
	Если есть у кого старенькая версия поделитесь плиз. <span>:)</span>
</p>

<p>
	Для LPC21x
</p>
]]></description><guid isPermaLink="false">165089</guid><pubDate>Thu, 13 Jan 2022 15:14:17 +0000</pubDate></item><item><title>&#x41A;&#x430;&#x43A; &#x43F;&#x435;&#x440;&#x435;&#x434;&#x430;&#x442;&#x44C; &#x434;&#x430;&#x43D;&#x43D;&#x44B;&#x435; &#x432; &#x43F;&#x440;&#x43E;&#x446;&#x435;&#x441;&#x441;?</title><link>https://electronix.ru/forum/topic/161075-kak-peredat-dannye-v-protsess/</link><description><![CDATA[
<p>
	Возникла следующая неувязка.
</p>

<p>
	Использую в проекте собранную сторонней компанией библиотеку. Он в прерывании читает данные и вызовом каллбэка отправляет мне. Пробую в этом каллбэке запихать данные в канал. После вызова push scmrtos падает.  Добавление макроса OS::scmRTOS_ISRW_TYPE TISRW решило бы проблему, но каким образом вставить в начало обработчика прерывания чужой либы?
</p>

<p>
	Подскажите, как обойти проблему?
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">161075</guid><pubDate>Mon, 12 Apr 2021 08:08:26 +0000</pubDate></item><item><title>&#x413;&#x434;&#x435; &#x432;&#x437;&#x44F;&#x442;&#x44C; &#x441;&#x432;&#x435;&#x436;&#x443;&#x44E; &#x432;&#x435;&#x440;&#x441;&#x438;&#x44E; scmRTOS</title><link>https://electronix.ru/forum/topic/144217-gde-vzyat-svezhuyu-versiyu-scmrtos/</link><description><![CDATA[
<p>Поскольку на данный момент существует несколько мест, в которых можно скачать scmRTOS, и большинство из этих мест содержат устаревшую версию, я решил написать эту памятку.</p>
<p> </p>
<p>
Итак...</p>
<p> </p>
<p>
</p>
<ol type="1"><li> Разработка scmRTOS ведётся на <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos" rel="">github</a>. Версия на sourceforge уже сильно отстала и больше не обновляется.<p></p>
</li>
<li> Главные ссылки:<p>
</p>
<ul><li> <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos" rel="">репозиторий scmRTOS</a>;</li>
<li> <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos-sample-projects" rel="">репозиторий тестовых проектов scmRTOS</a>
</li>
<li> <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos-doc" rel="">репозиторий документации</a>
</li>
</ul><p>
</p>
</li>
<li> Как скачать.<p>
</p>
<ul><li> Вариант с использованием git:<p>
  </p>
<ul><li> получаем ветку master:<p>
       <span style="font-family:'Courier New';">git clone <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos.git" rel="">https://github.com/scmrtos/scmrtos.git</a></span></p>
<p></p>
</li>
<li> при желании переключаемся на ветку develop. В ветке develop копятся исправления и нововведения до выпуска новой версии.<p>
       <span style="font-family:'Courier New';">git checkout develop</span></p>
</li>
</ul><p> </p>
<p>
  </p>
</li>
<li> Архивом:<p>
    <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos/releases/latest" rel="">https://github.com/scmrtos/scmrtos/releases/latest</a></p>
<p>
    Архив содержит проекты примеров использования оси, исходные коды оси и документацию.</p>
<p> </p>
<p>
  </p>
</li>
<li> Из репозитория примеров:<p>
       <span style="font-family:'Courier New';">git clone --recursive <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos-sample-projects.git" rel="">https://github.com/scmrtos/scmrtos-sample-projects.git</a></span></p>
<p>
      Этот способ удобен для получения примеров под разные платформы. Также он позволяет увидеть, как можно использовать</p>
<p>
репозиторий scmRTOS в качестве субмодуля в своём проекте.</p>
</li>
</ul><p>
</p>
</li>
<li> Дополнительные материалы<p>
  </p>
<ul><li> <a href="http://electronix.ru/redirect.php?http://real.kiev.ua/scmrtos/1-eventflag/" rel="">Подробное разъяснение работы оси на примере 1-EventFlag</a> от Александра Редчука;<p></p>
</li>
<li> <a href="http://electronix.ru/redirect.php?https://github.com/antongus/stm32tpl-samples" rel="">Тестовые проекты (мои) с использованием scmRTOS (STM32)</a>;<p>
    </p>
</li>
<li> <a href="http://electronix.ru/redirect.php?https://electronix.ru/forum/index.php?showtopic=139472" rel="">Неофициальный порт под Cortex-M0 для IAR</a> от <b>sevstels</b>;<p>
    </p>
</li>
<li> <a href="http://electronix.ru/redirect.php?http://we.easyelectronics.ru/os-rtos/portiruem-scmrtos-na-mcu-8051.html" rel="">Статья о портировании scmRTOS на SoC CC2510 (MCU 8051)</a> от <b>a9d</b>
</li>
</ul></li>
</ol>]]></description><guid isPermaLink="false">144217</guid><pubDate>Tue, 24 Oct 2017 12:45:44 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x440;&#x442; scmRTOS &#x434;&#x43B;&#x44F; Cortex-M7</title><link>https://electronix.ru/forum/topic/157652-port-scmrtos-dlya-cortex-m7/</link><description><![CDATA[<p>
	Хочу поинтересоваться, кто нибудь тестил на  STM32H7?
</p>]]></description><guid isPermaLink="false">157652</guid><pubDate>Mon, 27 Jul 2020 08:41:11 +0000</pubDate></item><item><title>TEventFlag.Signal_isr()</title><link>https://electronix.ru/forum/topic/126598-teventflagsignal_isr/</link><description><![CDATA[
<p>Доброго времени суток.</p>
<p>
Пробую использовать TEventFlag для оповещения основного цикла программы о завершении передачи даннных через SPI на STM32F103.  В основном цикле очищаю флаг события, записываю данные в регистр, начинаю ждать событие. В обработчике прерывания взвожу флаг события методом signal_isr. Все работает, но остается одна проблема, процесс ожидающий этого события пробуждается только после следующего планирования процессов по системному таймеру, т.е. только примерно через 1мс. Мне казалось что такой задержки быть не должно. Я что-то делаю не так, или непонимаю как это должно работать. Подскажите кто чем может.</p>
]]></description><guid isPermaLink="false">126598</guid><pubDate>Sun, 08 Mar 2015 21:06:48 +0000</pubDate></item><item><title>XMEGA &#x43F;&#x440;&#x435;&#x440;&#x44B;&#x432;&#x430;&#x43D;&#x438;&#x44F;</title><link>https://electronix.ru/forum/topic/155649-xmega-preryvaniya/</link><description><![CDATA[
<p>
	Здравствуйте. Помогите пожалуйста разобраться. Собрал для примера тестовый проект, МК ATxmega256A3U, scmRTOS 5.1.0. Во время выполнения процесса перестают работать прерывания, как только процесс уходит в sleep прерывания начинают работать. В чем может быть причина, что прерывания не работают во время выполнения кода процесса? Причем прерываний нет и от системного таймера OS TCDO, когда работает процесс.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span>int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span>BspClockInit</span><span class="pun">();</span><span class="pln">
    </span><span>BspPin2Init</span><span class="pun">();</span><span class="pln">
    </span><span>BspComUartConnect</span><span class="pun">();</span><span class="pln">
    </span><span>ComSetFrameFormat</span><span class="pun">();</span><span class="pln">
    </span><span>ComSetBaudRate</span><span class="pun">(</span><span>Baud_19200BPS</span><span class="pun">);</span><span class="pln">
    
    TCD0</span><span class="pun">.</span><span class="pln">CTRLA    </span><span class="pun">=</span><span class="pln"> TC_CLKSEL_DIV1_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLB    </span><span class="pun">=</span><span class="pln"> TC_WGMODE_NORMAL_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLC    </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x00</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLD    </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x00</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">PER      </span><span class="pun">=</span><span class="pln"> </span><span class="lit">24000</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">INTCTRLA </span><span class="pun">=</span><span class="pln"> TC_OVFINTLVL_LO_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLFSET </span><span class="pun">=</span><span class="pln"> TC_CMD_UPDATE_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLFCLR </span><span class="pun">=</span><span class="pln"> TC_CMD_UPDATE_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLFSET </span><span class="pun">=</span><span class="pln"> TC_CMD_RESTART_gc</span><span class="pun">;</span><span class="pln">
    TCD0</span><span class="pun">.</span><span class="pln">CTRLFCLR </span><span class="pun">=</span><span class="pln"> TC_CMD_RESTART_gc</span><span class="pun">;</span><span class="pln">
    
    TCF0</span><span class="pun">.</span><span class="pln">CTRLA    </span><span class="pun">=</span><span class="pln"> TC_CLKSEL_DIV1024_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLB    </span><span class="pun">=</span><span class="pln"> TC_WGMODE_NORMAL_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLC    </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x00</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLD    </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0x00</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">PER      </span><span class="pun">=</span><span class="pln"> </span><span class="lit">234</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">INTCTRLA </span><span class="pun">=</span><span class="pln"> TC_OVFINTLVL_LO_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLFSET </span><span class="pun">=</span><span class="pln"> TC_CMD_UPDATE_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLFCLR </span><span class="pun">=</span><span class="pln"> TC_CMD_UPDATE_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLFSET </span><span class="pun">=</span><span class="pln"> TC_CMD_RESTART_gc</span><span class="pun">;</span><span class="pln">
    TCF0</span><span class="pun">.</span><span class="pln">CTRLFCLR </span><span class="pun">=</span><span class="pln"> TC_CMD_RESTART_gc</span><span class="pun">;</span><span class="pln">
    
    PMIC</span><span class="pun">.</span><span class="pln">CTRL </span><span class="pun">=</span><span class="pln"> PMIC_LOLVLEN_bm </span><span class="pun">|</span><span class="pln"> PMIC_RREN_bm</span><span class="pun">;</span><span class="pln">

    OS</span><span class="pun">::</span><span class="pln">run</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">template</span><span class="pun">&lt;&gt;</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> </span><span>TProc1</span><span class="pun">::</span><span class="pln">exec</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> temp</span><span class="pun">;</span><span class="pln">
    
    </span><span class="kwd">for</span><span class="pun">(;;)</span><span class="pln">
    </span><span class="pun">{</span><span class="pln">
        sleep</span><span class="pun">(</span><span class="lit">1000</span><span class="pun">);</span><span class="pln">
        </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">unsigned</span><span class="pln"> </span><span class="kwd">char</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">50</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln">
        </span><span class="pun">{</span><span class="pln">
            </span><span class="kwd">unsigned</span><span class="pln"> </span><span>int</span><span class="pln"> cnt </span><span class="pun">=</span><span class="pln"> TCF0</span><span class="pun">.</span><span class="pln">CNT</span><span class="pun">;</span><span class="pln">
            </span><span>ComPutchar</span><span class="pun">(</span><span class="pln">cnt </span><span class="pun">&gt;&gt;</span><span class="pln"> </span><span class="lit">8</span><span class="pun">);</span><span class="pln">
            </span><span>ComPutchar</span><span class="pun">(</span><span class="pln">cnt </span><span class="pun">&amp;</span><span class="pln"> </span><span class="lit">0xFF</span><span class="pun">);</span><span class="pln">           
            temp </span><span class="pun">=</span><span class="pln"> TCF0</span><span class="pun">.</span><span class="pln">INTFLAGS</span><span class="pun">;</span><span class="pln">
            </span><span>ComPutchar</span><span class="pun">(</span><span class="pln">temp</span><span class="pun">);</span><span class="pln">
            temp </span><span class="pun">=</span><span class="pln"> SREG</span><span class="pun">;</span><span class="pln">
            </span><span>ComPutchar</span><span class="pun">(</span><span class="pln">temp</span><span class="pun">);</span><span class="pln">
        </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">#pragma</span><span class="pln"> </span><span>vector</span><span class="pun">=</span><span class="pln">TCF0_OVF_vect
OS_INTERRUPT </span><span class="kwd">void</span><span class="pln"> </span><span>TimerF0_period_ISR</span><span class="pun">()</span><span class="pln">
</span><span class="pun">{</span><span class="pln">    
    </span><span>BspPinTgl2</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	<br />
	Во время выполнения процесса в цикле в UART вывожу состояния регистров таймера TCF0 и SREG
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="pln">CNT FLAGS SREG
</span><span class="lit">0058</span><span class="pln">  f0   </span><span class="lit">82</span><span class="pln">  </span><span class="pun">В</span><span class="pln"> TCF0</span><span class="pun">.</span><span class="pln">INTFLAGS </span><span class="pun">флаг</span><span class="pln"> </span><span class="pun">переполнения</span><span class="pln"> </span><span class="pun">сброшен,</span><span class="pln"> </span><span class="pun">прерывания</span><span class="pln"> </span><span class="pun">работали.</span><span class="pln">
</span><span class="lit">0065</span><span class="pln">  f0   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">0095</span><span class="pln">  f0   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">00c6</span><span class="pln">  f0   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">000d</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln">  </span><span class="pun">Произошло</span><span class="pln"> </span><span class="pun">переполнение</span><span class="pln"> </span><span class="pun">таймера,</span><span class="pln"> </span><span class="pun">выставлен</span><span class="pln"> </span><span class="pun">флаг</span><span class="pln"> </span><span class="pun">переполнения</span><span class="pln"> </span><span class="pun">в</span><span class="pln"> TCF0</span><span class="pun">.</span><span class="pln">INTFLAGS</span><span class="pun">,</span><span class="pln"> 
</span><span class="lit">003e</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln">  </span><span class="pun">в</span><span class="pln"> SREG I</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> </span><span class="pun">прерывания</span><span class="pln"> </span><span class="pun">разрешены</span><span class="pln">
</span><span class="lit">006e</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">009f</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">00d0</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln">  </span><span class="pun">Произошло</span><span class="pln"> </span><span class="pun">повторное</span><span class="pln"> </span><span class="pun">переполнение</span><span class="pln"> </span><span class="pun">таймера,</span><span class="pln"> </span><span class="pun">прерывания</span><span class="pln"> </span><span class="pun">нет,</span><span class="pln"> </span><span class="pun">флаг</span><span class="pln"> </span><span class="pun">не</span><span class="pln"> </span><span class="pun">сброшен.</span><span class="pln">
</span><span class="lit">0017</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">0047</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln"> 
</span><span class="lit">0078</span><span class="pln">  f1   </span><span class="lit">80</span><span class="pln"> 
 </span></pre>

<p>
	<br />
	Заранее спасибо за помощь.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">155649</guid><pubDate>Mon, 17 Feb 2020 13:21:10 +0000</pubDate></item><item><title>timer task</title><link>https://electronix.ru/forum/topic/155666-timer-task/</link><description><![CDATA[
<p>
	Здравствуйте.
</p>

<p>
	Скажите, ни у кого не возникало задачи сделать софт-таймеры?
</p>

<p>
	Уже не первый раз делаю что-то подобное в очередном проекте, хочется сделать унифицировано.
</p>

<p>
	 
</p>

<p>
	Я это вижу по аналогии с FreeRTOS: отдельная задача, которая хранит в себе массив из n-цати структур. Структура состоит из таймера и коллбэка - по истечению таймера (один раз или периодически) вызывается коллбэк.
</p>

<p>
	Заполнение этого списка, перенастройка таймеров и т.д. - динамически, из остальных задач.
</p>

<p>
	По сравнению с FreeRTOS надо подумать и применить шаблонную магию, чтобы коллбэком мог быть метод произвольного класса.
</p>

<p>
	 
</p>

<p>
	PS в mbed используют другой вариант API. Выглядит симпатичнее, но не совсем понятно, как оно внутри устроено: <a href="https://github.com/ARMmbed/mbed-os/blob/c12b433026beae5b3b769c27941bc6d7fe5d4b27/rtos/RtosTimer.h#L58" rel="external nofollow">https://github.com/ARMmbed/mbed-os/blob/c12b433026beae5b3b769c27941bc6d7fe5d4b27/rtos/RtosTimer.h#L58</a>
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">155666</guid><pubDate>Tue, 18 Feb 2020 09:04:33 +0000</pubDate></item><item><title>scmRTOS  / AVR / GCC / Linux mint / Eclipse &#x41E;&#x448;&#x438;&#x431;&#x43A;&#x438;</title><link>https://electronix.ru/forum/topic/152813-scmrtos-avr-gcc-linux-mint-eclipse-oshibki/</link><description><![CDATA[<p>
	Потребовалось портировать давний проект IAR/AVR/scmRTOS   в GCC/AVR/scmRTOS. Взял за основу сэмпл "2-message"  который успешно компилируется. стал добавлять файлы из своего проекта. Имею кучу ошибок: ругается на bool - unknown type name ‘bool, ругается на namespace - unknown type name ‘namespace’. Второй день не могу сдвинуться с нулевой точки.
</p>]]></description><guid isPermaLink="false">152813</guid><pubDate>Sat, 13 Jul 2019 05:23:33 +0000</pubDate></item><item><title>C++ &#x438; &#x43C;&#x430;&#x43A;&#x440;&#x43E;&#x441;&#x44B; &#x438;&#x43C;&#x435;&#x43D;&#x438; &#x410;&#x441;&#x43A;&#x43E;&#x43B;&#x44C;&#x434;&#x430; &#x412;&#x43E;&#x43B;&#x43A;&#x43E;&#x432;&#x430;.</title><link>https://electronix.ru/forum/topic/65654-c-i-makrosy-imeni-askolda-volkova/</link><description><![CDATA[
<p>Тема не совсем про scmRTOS, но тут много спецов по плюсам:)</p>
<p> </p>
<p>
Сделал такую штуку:</p>
<p>
</p>
<pre class="ipsCode">class BasePin
{
    public:
        virtual void On() = 0;
        virtual void Off() = 0;
        virtual void Cpl() = 0;
...
};</pre>
<div></div>
<p></p>
<p>
Это базовый абстрактный класс. Нужен, чтоб можно было передавать ссылку на любую ножку куда угодно. Например, класс TDAC(spi&amp; spiRef, BasePin&amp; CS), конструктору передаётся ссылка на spi и ссылка на ножку чипселекта.</p>
<p> </p>
<p>
Дальше начинаю городить шаблоны:</p>
<p>
</p>
<pre class="ipsCode">template&lt;int port, int pin, char activestate = 'H'&gt; class Pin;

template&lt;int pin&gt;
class Pin&lt;1, pin&gt;: public BasePin
{
    public:
        virtual void On() { P1OUT |= 1&lt;&lt;pin; }\
...
};

template&lt;int pin&gt;
class Pin&lt;1, pin, 'L'&gt;: public BasePin
{
    public:
        virtual void On(){ P1OUT &amp;= ~(1&lt;&lt;pin); }
...
};</pre>
<div></div>
<p></p>
<p> </p>
<p>
И так 5 раз (для портов 1-5). Как-то коряво...</p>
<p> </p>
<p>
Пробовал так:</p>
<p>
</p>
<pre class="ipsCode">template&lt;int port, int pin, char activestate = 'H'&gt;
class Pin: public BasePin
{
    public:
        virtual void On() {
            if (port == 1) P1OUT |= 1&lt;&lt;pin;
            if (port == 2) P2OUT |= 1&lt;&lt;pin;
            if (port == 3) P3OUT |= 1&lt;&lt;pin;
            if (port == 4) P4OUT |= 1&lt;&lt;pin;
            if (port == 5) P5OUT |= 1&lt;&lt;pin;
        }
...
};</pre>
<div></div>
<p></p>
<p> </p>
<p>
Так вроде поменьше писанины, но тоже корявенько. </p>
<p> </p>
<p>
Теперь внимание, вопрос:) </p>
<p>
Есть ли какая-нибудь возможность получить вот такое:</p>
<p>
</p>
<pre class="ipsCode">template&lt;int port, int pin, char activestate = 'H'&gt;
class Pin: public BasePin
{
    public:
        virtual void On() {P##portOUT |= 1&lt;&lt;pin; }
...
};</pre>
<div></div>
<p></p>
<p> </p>
<p>
То есть, хочу нечто вроде макроподстановки. Вроде где-то что-то встречал подобное, но никак не вспомню, куда копать.</p>
<p> </p>
<p> </p>
<p>
ЗЫ. А работает вроде хорошо. То есть, </p>
<p> </p>
<p>
</p>
<pre class="ipsCode">Pin&lt;1, 2, 'L'&gt; PIN12;
#define PIN_12 1, 2, L
Pin&lt;2, 3&gt; PIN23;
#define PIN_23 2, 3, H
...
    PIN12.On();
    on(PIN_12);
    PIN23.On();
    on(PIN_23);</pre>
<div></div>
<p></p>
<p> </p>
<p>
компилится в </p>
<p>
</p>
<pre class="ipsCode">    1808:    e2 c2 21 00     bic.b    #4,    &amp;0x0021  ;r2 As==10
    180c:    e2 c2 21 00     bic.b    #4,    &amp;0x0021  ;r2 As==10
    1810:    f2 d2 29 00     bis.b    #8,    &amp;0x0029  ;r2 As==11
    1814:    f2 d2 29 00     bis.b    #8,    &amp;0x0029  ;r2 As==11</pre>
<div></div>
<p></p>
<p> </p>
<p>
Накладные расходы - vtable+процедуры на каждую созданную ножку. За это я получаю возможность передавать ссылку на ножку. Я давно этого хотел.</p>
<p> </p>
<p>
При обращении по ссылке (в TDAC) вызовы уже из vtable, но это для меня приемлемо.</p>
]]></description><guid isPermaLink="false">65654</guid><pubDate>Wed, 29 Jul 2009 08:41:52 +0000</pubDate></item><item><title>nRF52 BLE SDK (Cortex M3) SVC</title><link>https://electronix.ru/forum/topic/140053-nrf52-ble-sdk-cortex-m3-svc/</link><description><![CDATA[
<p>Здравствуйте!</p>
<p> </p>
<p>
кто нибудь пытался вести разработку на scmRTOS для nRF52 BLE SDK ?</p>
<p> </p>
<p>
Как сочетать API взаимодействия BLE стэка (прошивки) работающее по SVC вызовам ?</p>
<p> </p>
<p>
спасибо!</p>
<p> </p>
<p> </p>
]]></description><guid isPermaLink="false">140053</guid><pubDate>Mon, 23 Jan 2017 09:52:22 +0000</pubDate></item><item><title>scmRtos &#x434;&#x43B;&#x44F; &#x43C;&#x435;&#x434;&#x43D;&#x44B;&#x445; &#x447;&#x430;&#x439;&#x43D;&#x438;&#x43A;&#x43E;&#x432;</title><link>https://electronix.ru/forum/topic/99542-scmrtos-dlya-mednyh-chaynikov/</link><description><![CDATA[
<p>Добрый день всем!</p>
<p>
Возникло желание - точнее, необходимось использовать многозадачность в своем проекте - вернее, или надо писать свой диспетчер (в котором я уже успел запутаться), или пользоваться чем-то готовым.</p>
<p>
Увидел scmRtos - попытался запустить демку. Пример под IAR на MSP430F2617 - у меня на плате MSP430F2410, IAR версия  5.30</p>
<p> </p>
<p>
Немножко подправил демку под свою плату, чтобы нужный светодиодик моргал, указал иару на MSP430F2410 - и ничего. WDT прерывание случается раза 4 (вроде как это системный таймер?), после чего программа улетает неведомо куда.</p>
<p> </p>
<p>
Кто-нибудь может на путь истинный наставить - что можно трогать, что нельзя. Может ли на работоспособности версия компилятора сказаться? Или, лучше всего, может у кого готовая рыба завалялась для моргания именно на этом кристалле или похожем?</p>
]]></description><guid isPermaLink="false">99542</guid><pubDate>Sun, 12 Feb 2012 09:04:17 +0000</pubDate></item><item><title>OS::get_tick_count()</title><link>https://electronix.ru/forum/topic/149335-osget_tick_count/</link><description><![CDATA[
<p>
	Господа, а скажите мне, насколько необходима критическая секция
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted">
<span class="pln">    INLINE </span><span>tick_count_t</span><span class="pln"> get_tick_count</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span>TCritSect</span><span class="pln"> cs</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span>Kernel</span><span class="pun">.</span><span>SysTickCount</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></pre>

<p>
	Я помню о существовании порта на AVR (кто-нибудь пользуется, интересно?..), но для широко распространённых 32-битников можно съэкономить кучку тактов, добавив дефайн наподобие scmRTOS_SYSTEM_TICKS_ATOMIC.
</p>
]]></description><guid isPermaLink="false">149335</guid><pubDate>Mon, 29 Oct 2018 15:48:55 +0000</pubDate></item><item><title>&#x423;&#x43D;&#x438;&#x432;&#x435;&#x440;&#x441;&#x430;&#x43B;&#x44C;&#x43D;&#x44B;&#x439; &#x43F;&#x43E;&#x440;&#x442; &#x434;&#x43B;&#x44F; Cortex-Mx (GCC) &#x437;&#x430;&#x43B;&#x438;&#x442; &#x432; &#x440;&#x435;&#x43F;&#x43E;&#x437;&#x438;&#x442;&#x43E;&#x440;&#x438;&#x439;.</title><link>https://electronix.ru/forum/topic/127079-universalnyy-port-dlya-cortex-mx-gcc-zalit-v-repozitoriy/</link><description><![CDATA[
<p>Всем привет.</p>
<p> </p>
<p>
Добрался до Cortex-M0+ (STM32L0xx). Подумал, что отличий от порта для Cortex-M4(F) немного, и поэтому взял порт Cortex-M0 от Сергея Борща и влил его в M4(F).</p>
<p>
А так как порт Cortex-M4(F) уже поддерживал Cortex-M3, то порт получился универсальный.</p>
<p>
Назвал порт <a href="http://electronix.ru/redirect.php?http://sourceforge.net/p/scmrtos/code/HEAD/tree/trunk/Ports/CortexMx/GCC/" rel="">CortexMx</a>, чтоб не трогать имеющиеся. Поддерживаются Cortex-M3, Cortex-M4(F), Cortex-M0, Cortex-M0+, Cortex-M1.</p>
<p>
Добавил также <a href="http://electronix.ru/redirect.php?http://sourceforge.net/p/scmrtos/code/HEAD/tree/trunk/Samples/CortexM0+/GCC/STM32L0XX/" rel="">пример для STM32L0xx</a> (плата STM32 NUCLEO-L053R8).</p>
<p> </p>
<p>
Планирую после тестирования перевести на этот порт все примеры для M3/M4.</p>
<p> </p>
<p>
Замечания и предложения приветствуются:)</p>
]]></description><guid isPermaLink="false">127079</guid><pubDate>Tue, 31 Mar 2015 19:03:52 +0000</pubDate></item><item><title>sleep &#x431;&#x43B;&#x43E;&#x438;&#x440;&#x443;&#x435;&#x442; &#x43F;&#x43E;&#x442;&#x43E;&#x43A;</title><link>https://electronix.ru/forum/topic/147022-sleep-bloiruet-potok/</link><description><![CDATA[
<p>Приветствую всех.</p>
<p> </p>
<p>
В проекте регулярно застывает задача при входе в sleep.  Т.е. она бежит некоторое время, а потом перестает выходить из слипа одного из потоков. </p>
<p>
При этом Timeout потока висит в нуле. Если его в отладчике снова выставить на какое-либо число, то поток отмерзает и снова работает некоторое время.</p>
<p>
Стека там достаточно. Время на выполнение потока точно есть (все сидит в IDLE).</p>
<p> </p>
<p>
CPU stm32h7. За основу взят порт для stm32F3 для IAR + порт для stm32f4 FPU для  GCC</p>
<p> </p>
<p>
Грешу на кэши, но оно работало вполне успешно на stm32F7, где  это тоже присутствует.</p>
<p> </p>
<p>
Есть подозрение, что встал на те же грабли, но не могу их разглядеть. Может кто сможет поделиться идеей, куда покопать.</p>
]]></description><guid isPermaLink="false">147022</guid><pubDate>Mon, 14 May 2018 15:50:46 +0000</pubDate></item><item><title>userlib</title><link>https://electronix.ru/forum/topic/115730-userlib/</link><description><![CDATA[
<p>С какой целью в usrlib.h  в описании шаблона класса ring_buffer </p>
<p>
</p>
<pre class="ipsCode">template&lt;typename T, uint16_t Size, typename S = uint8_t&gt;
    class ring_buffer</pre>
<div></div>
<p></p>
<p>
тип S uint8_t? На мой взгляд заложена потенциальная опасность при использовании умолчания шаблона. </p>
<p>
Код:</p>
<p>
</p>
<pre class="ipsCode">
#include &lt;iostream&gt;
#include "usrlib.h"
using namespace std;

#define RFBUF_SIZE 	1024
#define DTBUF_SIZE	255

usr::ring_buffer&lt;uint8_t, RFBUF_SIZE, uint16_t&gt; full_description;
usr::ring_buffer&lt;uint8_t, RFBUF_SIZE&gt; short_description;

uint8_t databuf[DTBUF_SIZE];

int main()
{
for(uint8_t i=0; i &lt; DTBUF_SIZE; i++)
	databuf[i] = i;

full_description.write(&amp;databuf[0], DTBUF_SIZE - 8);
short_description.write(&amp;databuf[0], DTBUF_SIZE - 8);

cout &lt;&lt; dec;
cout &lt;&lt; "full_description: get_count = " &lt;&lt; full_description.get_count() &lt;&lt; " get_free_size = " &lt;&lt; full_description.get_free_size() &lt;&lt; endl;
cout &lt;&lt; "short_description: get_count = " &lt;&lt; short_description.get_count() &lt;&lt; " get_free_size = " &lt;&lt; short_description.get_free_size() &lt;&lt; endl;

full_description.write(&amp;databuf[0], DTBUF_SIZE - 8);
short_description.write(&amp;databuf[0], DTBUF_SIZE - 8);

cout &lt;&lt; "full_description: get_count = " &lt;&lt; full_description.get_count() &lt;&lt; " get_free_size = " &lt;&lt; full_description.get_free_size() &lt;&lt; endl;
cout &lt;&lt; "short_description: get_count = " &lt;&lt; short_description.get_count() &lt;&lt; " get_free_size = " &lt;&lt; short_description.get_free_size() &lt;&lt; endl;

return 0;
}</pre>
<div></div>
<p></p>
<p> </p>
<p>
Вывод:</p>
<p>
</p>
<pre class="ipsCode">full_description: get_count = 247 get_free_size = 777
short_description: get_count = ч get_free_size =     
full_description: get_count = 494 get_free_size = 530
short_description: get_count = о get_free_size = </pre>
<div></div>
<p></p>
<p> </p>
<p>
При включенных предупреждениях компилятора потенциальная опасность видна сразу. </p>
<p>
Вопрос: из каких соображений в шаблоне по умолчанию тип S не совпадает с типом Size?</p>
<p>
Спасибо.</p>
]]></description><guid isPermaLink="false">115730</guid><pubDate>Thu, 26 Sep 2013 15:41:36 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x448;&#x435;&#x43B; &#x43D;&#x435;&#x441;&#x43E;&#x43E;&#x442;&#x432;&#x435;&#x442;&#x441;&#x432;&#x438;&#x435; &#x43C;&#x435;&#x436;&#x434;&#x443; &#x434;&#x43E;&#x43A;&#x443;&#x43C;&#x435;&#x43D;&#x442;&#x430;&#x446;&#x438;&#x435;&#x439; &#x438; &#x43A;&#x43E;&#x434;&#x43E;&#x43C;</title><link>https://electronix.ru/forum/topic/139393-nashel-nesootvetsvie-mezhdu-dokumentatsiey-i-kodom/</link><description><![CDATA[
<p>Нашел что в документах (русская версия для для ScmRTOS v5 и v4) упоминается TMutex::lock_softly(), а вот в коде этого уже нет - его заменили на TMutex::try_lock(). В документах TMutex::try_lock() не упоминается.</p>
<p>
Стоит, наверное, эту часть документа (стр. 93) обновить...</p>
<p> </p>
<p>
</p>
<blockquote data-ipsquote="" class="ipsQuote" data-ipsquote-contentapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentid="139393" data-ipsquote-contentclass="forums_Topic"><div>Автор: Sergey A. Borshch &lt;sborshch@users.noreply.github.com&gt;  2014-03-11 16:43:54<p>
Сохранивший состояние: Sergey A. Borshch &lt;sborshch@users.noreply.github.com&gt;  2014-03-11 16:43:54</p>
<p>
Предок: a747e55973a8cfdbfeb61a1bfd1e31d93382a8ab (make TService inheritance protected to show that no public members provided in TService and it's parents)</p>
<p>
Потомок:  a718a881c7315bb80afceade53e2ccceafeefffc (Added universal CortexMx port)</p>
<p>
Ветвь: master, remotes/origin/develop, remotes/origin/master</p>
<p>
Следует за: 4.0.0</p>
<p>
Предшествует: sf-end</p>
<p> </p>
<p>
    -TMutex improvement: additional try_lock(timeout) member function with</p>
<p>
     timeout argument. Function returns false if mutex wasn't locked during</p>
<p>
     requested time.</p>
<p>
    -TMutex::lock_softly() renamed to to try_lock() (without arguments).</p>
<p>
    -TMutex::lock_softly() as wrapper to try_lock() added to scmRTOS_OBSOLETE_NAMES section</p>
</div></blockquote>
]]></description><guid isPermaLink="false">139393</guid><pubDate>Sun, 18 Dec 2016 19:02:24 +0000</pubDate></item><item><title>&#x412;&#x44B;&#x437;&#x43E;&#x432;&#x44B; &#x444;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x439; &#x441;&#x435;&#x440;&#x432;&#x438;&#x441;&#x43E;&#x432; &#x41E;&#x421; &#x434;&#x43E; &#x435;&#x451; &#x437;&#x430;&#x43F;&#x443;&#x441;&#x43A;&#x430;</title><link>https://electronix.ru/forum/topic/145813-vyzovy-funktsiy-servisov-os-do-eyo-zapuska/</link><description><![CDATA[
<p>Предполагаю использовать мьютекс для организации доступа к SPI. Т.е. при вызове функций записи или чтения через SPI доступ к интерфейсу выполняется через lock()/unlock().</p>
<p>
В тоже время до запуска ОС через SPI необходимо сконфигурировать внешнее устройство используя те же функции записи/чтения (вызывающие lock()/unlock()). </p>
<p>
Корректно ли выполнять вызовы lock()/unlock() до запуска OC? Требуется ли каким-либо образом привести объект-мьютекс в исходное состояние перед запуском ОС? </p>
<p>
Заодно, прошу прокомментировать данную ситуацию в связи с другими сервисам межпроцессорного взаимодействия: событиями, сообщениями.</p>
<p> </p>
]]></description><guid isPermaLink="false">145813</guid><pubDate>Fri, 16 Feb 2018 04:08:13 +0000</pubDate></item><item><title>&#x41D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; printf</title><link>https://electronix.ru/forum/topic/145613-ne-rabotaet-printf/</link><description><![CDATA[
<p>МК STM32f103... Совместно с scmRTOS не работает printf(). Вываливается </p>
<p>
&lt;signal handler called&gt; () at 0xfffffffd</p>
<p>
HarFault_Handler()</p>
<p>
Без ОС все работает без проблем. Увеличивал размер стека под процесс, который юзает printf(), не помогает. Работаю в SW4STM32.</p>
<p>
Может есть какие-нибудь идеи?</p>
]]></description><guid isPermaLink="false">145613</guid><pubDate>Fri, 02 Feb 2018 13:34:58 +0000</pubDate></item><item><title>Release v5.1.0 &#x438; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x430; &#x432; openOCD</title><link>https://electronix.ru/forum/topic/134957-release-v510-i-podderzhka-v-openocd/</link><description><![CDATA[
<p>Всем привет!</p>
<p> </p>
<p>
Собственно сабж.</p>
<p> </p>
<p>
Подробности по <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/scmrtos/releases/tag/v5.1.0" rel="">ссылке</a></p>
<p> </p>
<p>
Из заметного:</p>
<p>
</p>
<ul><li>добавлен Blackfin/GCC порт и примеры;</li>
<li>отладочные фичи - можно задавать в режиме отладки строковые имена процессам и появилась возможность совместно с openOCD вести отладку с поддержкой RTOS, т.е. в отладчике видны процессы, их статусы, контексты, стеки вызовов. Работает это пока только для Cortex-M0/M3, GCC порт. openOCD из главного репозитория пока (надеюсь, что только пока) это не поддерживает, т.к. мы ещё не отправляли туда соответствующие добавление (ждём разрешения ситуации с M4). Для работы нужно скачать openOCD из <a href="http://electronix.ru/redirect.php?https://github.com/scmrtos/openocd-scmrtos" rel="">этого репозитория</a> и собрать. Проверялось на GDB, Insight и Eclipse.</li>
</ul>]]></description><guid isPermaLink="false">134957</guid><pubDate>Wed, 20 Apr 2016 14:32:04 +0000</pubDate></item><item><title>&#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;  &#x431;&#x430;&#x43D;&#x430;&#x43B;&#x44C;&#x43D;&#x43E; &#x43F;&#x440;&#x43E;&#x441;&#x442;&#x43E;&#x439; &#x444;&#x440;&#x430;&#x433;&#x43C;&#x435;&#x43D;&#x442;</title><link>https://electronix.ru/forum/topic/142269-ne-rabotaet-banalno-prostoy-fragment/</link><description><![CDATA[
<p>На вход Input Capture поступат импульсы от детектора перехода через ноль сетевого напряжения. Цель - определть момен пропадания этого нпряжения. в процессе с наименьшим приоритетом выполняется</p>
<p>
следующий фрагмент. Print() выводит на LCD значение счетчика. Счет в плюс выполняется с правильной частотой. Если перемыкаю выход оптрона детектора, счет останавливается, но счетчик не сбрасывается в 0, </p>
<p>
как ожидалось.  Частота системного тика близка к 1000 Гц. То есть wait() c ненулевым таймаутом ждет event бесконечно... ev_psync  - поле класса, но полагаю, это не имеет значения...</p>
<p> </p>
<p>
</p>
<pre class="ipsCode">  
  bool ok;
  TIMSK= (1 &lt;&lt; TICIE1);            // разрешим прерывания PSYNC

  while(1){
      ok = ev_psync.wait(10);
      if(ok){
        psync_cnt++;
        ev_psync.clear();                               // добавил на всякий случай, не помогло
      }
      else  psync_cnt = 0;
      Print();
  }</pre>
<div></div>
<p></p>
<p> </p>
<p>
обработчик прерывания:</p>
<p> </p>
<p>
</p>
<pre class="ipsCode">OS_INTERRUPT void TIMER1_CAPT_vect()
{
  OS::TISRW_SS ISRW;
  ENABLE_NESTED_INTERRUPTS();
  cc.ev_psync.signal_isr();
}</pre>
<div></div>
<p></p>
<p> </p>
<p>
переделал так:</p>
<p>
  	</p>
<pre class="ipsCode">OS::sleep(10);
      ok = ev_psync.is_signaled();
      if(ok){
          ev_psync.clear();
          psync_cnt++;}
      else{
          psync_cnt = 0;}
      Print();</pre>
<div></div>
<p></p>
<p> </p>
<p>
счета нет совсем. то есть опять таки ненулевой таймаут не отоабатывает</p>
<p> </p>
]]></description><guid isPermaLink="false">142269</guid><pubDate>Wed, 07 Jun 2017 09:08:02 +0000</pubDate></item></channel></rss>
