Сообщение об ошибке в ревизии 440

19 views
Skip to first unread message

Anton Gusev

unread,
Oct 6, 2011, 11:17:57 PM10/6/11
to scmrtos-ru
пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ:

--------8<---------
пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ!
пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ EventFlag пїЅпїЅпїЅ AVR, пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ IAR 5.51.
Harry Zhurov пїЅ пїЅпїЅпїЅпїЅпїЅпїЅ scmRTOS 440 пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ TIdleProc::exec пїЅпїЅ
OS_Kernel.h пїЅ OS_Kernel.cpp, пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ
пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ template<> void TIdleProc::exec()

Error[Pe793]: explicit specialization of function "OS::process<pr,
stack_size, rstack_size>::exec [with pr=OS::prIDLE, stack_size=70U,
rstack_size=10U]" must precede its first use.

пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ IdleProc пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
TIdleProc::exec, пїЅ.пїЅ.

namespace OS
{
#ifndef __GNUC__ // avoid GCC bug (
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15867 )
template<> void TIdleProc::exec();
#endif

template<> void TIdleProc::exec()
{
for(;;)
{
#if scmRTOS_IDLE_HOOK_ENABLE == 1
idle_process_user_hook();
#endif

#if scmRTOS_TARGET_IDLE_HOOK_ENABLE == 1
idle_process_target_hook();
#endif
}
}
}

namespace OS
{
TIdleProc IdleProc;
}

-------8<-----------8<-------------------

пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ gcc пїЅпїЅпїЅпїЅпїЅпїЅ пїЅ IAR? :)

Oleksandr Redchuk

unread,
Oct 7, 2011, 4:23:19 AM10/7/11
to scmrt...@googlegroups.com
2011/10/7 Anton Gusev <anto...@mail.ru>:

> Error[Pe793]: explicit specialization of function "OS::process<pr,
> stack_size, rstack_size>::exec [with pr=OS::prIDLE, stack_size=70U,
> rstack_size=10U]" must precede its first use.

Да, я тоже это уже заметил неделю назад, просто замотался и не успел подправить.

> Ошибка исчезает если объявление IdleProc разместить после декларации
> TIdleProc::exec, т.е.


>
> namespace OS
> {
> #ifndef __GNUC__ // avoid GCC bug (
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15867 )
> template<> void TIdleProc::exec();
> #endif

...
> namespace OS
> {
> TIdleProc IdleProc;
> }

Определение функции можно и тут, после объявления/определения экземпляра.
Главное, чтобы объявление наличия специализированной для TidleProc
функции exec() было сделано до первого использования типа TidleProc
для определения переменной, когда компилятор норовит сгенерить
функции, которых не хватает.

> Неужели баг gcc проник в IAR? :)

Так это другое. Это, похоже, как раз нужно. А ошибка GCC в том, что он
это ситает избыточным объявлением, потому оно по #ifdef __GNUC__
исключается.

--
wbr,
ReAl

Oleksandr Redchuk

unread,
Oct 7, 2011, 4:33:01 AM10/7/11
to scmrt...@googlegroups.com
2011/10/7 Oleksandr Redchuk <oleksand...@gmail.com>:

>> Error[Pe793]: explicit specialization of function "OS::process<pr,
>> stack_size, rstack_size>::exec [with pr=OS::prIDLE, stack_size=70U,
>> rstack_size=10U]" must precede its first use.
>
> Да, я тоже это уже заметил неделю назад, просто замотался и не успел подправить.

Вдогонку -- этой беды нет с функциями exec() пользователсьских
процессов в примерах.

typedef OS::process<OS::pr0, 100> TProc1;

typedef OS::process<PROC2_PRIO, 100> TProc2;

typedef OS::process<PROC3_PRIO, 100> TProc3;

namespace OS {

template<> void TProc1::exec();

template<> void TProc2::exec();

template<> void TProc3::exec();

} // namespace OS

//---------------------------------------------------------------------------

// Process objects

TProc1 Proc1;

TProc2 Proc2;

TProc3 Proc3;


Объявления тут и для gcc, и для IAR стоят ДО сохдания объектов,
поэтому обиды "must precede its first use" нет.
Но и для gcc есть объявление exec() для процессов (как то исключённое
по #ifdef для TIdleProc) и никакой обиды на избыточное объявление нет!

Единственная разница с TIdleProc, которую я нашёл, так это то, что
создание переменных тут в глобальном пространстве, а не в namespace
OS. А IdleProc создаётся в namespace OS.

Дальше пока не смотрел.

--
wbr,
ReAl

Anton Gusev

unread,
Oct 7, 2011, 7:49:34 AM10/7/11
to scmrt...@googlegroups.com
Hi, Oleksandr Redchuk!
You wrote on 07.10.2011 14:33

> О©╫О©╫ О©╫ О©╫О©╫О©╫ gcc О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ exec() О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫чёО©╫О©╫О©╫О©╫
> О©╫О©╫ #ifdef О©╫О©╫О©╫ TIdleProc) О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫!

О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ GCC О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ -Wredundant-decls О©╫ makefile!

Oleksandr Redchuk

unread,
Oct 7, 2011, 9:41:27 AM10/7/11
to scmrt...@googlegroups.com
2011/10/7 Anton Gusev <anto...@mail.ru>:

>> Но и для gcc есть объявление exec() для процессов (как то исключённое
>> по #ifdef для TIdleProc) и никакой обиды на избыточное объявление нет!
>

> Хм. Полез проверять - мой GCC на такое ругается. Потом посмотрел - у тебя
> просто нет флага -Wredundant-decls в makefile!

Я гляну ещё, но я вроде бы добавлял этот флаг и комментировал #ifdef
возле IdleProc и сообщение вроде бы было одно -- возле Idle.

Делал в спешке, мог что-то забыть. Собственно, потому и не писал до
сих пор, что хотел ещё раз проверить.

--
wbr,
ReAl

Harry Zhurov

unread,
Oct 11, 2011, 12:34:12 AM10/11/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Fri, 07 Oct 2011 09:17:57 +0600

AG> --------8<---------
AG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫!
AG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ EventFlag О©╫О©╫О©╫ AVR, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ IAR 5.51.
AG> Harry Zhurov О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ scmRTOS 440 О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ TIdleProc::exec О©╫О©╫
AG> OS_Kernel.h О©╫ OS_Kernel.cpp, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
AG> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ template<> void TIdleProc::exec() Error[Pe793]: explicit
specialization of function
AG> "OS::process<pr, stack_size, rstack_size>::exec [with pr=OS::prIDLE,
AG> stack_size=70U, rstack_size=10U]" must precede its first use.

О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ OS_Kernel.h О©╫ OS_Kenrel.cpp О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫ VDSP++ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫: О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫), О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫,
О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ TIdleProcess::exec. О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ её О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫шёО©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫. :)

--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫! О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫ 1-2 О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫ 3-4 О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫...

Anton Gusev

unread,
Oct 11, 2011, 7:18:30 AM10/11/11
to scmrt...@googlegroups.com
Hi, Harry Zhurov!
You wrote on 11.10.2011 10:34

> Я перетащил объявление из OS_Kernel.h в OS_Kenrel.cpp потому, что оно так
> уместнее

Дык, мы ж не против! Просто надо теперь сделать, чтоб IAR это переваривал:)
Ждём, когда у Александра появится время проверить.

Oleksandr Redchuk

unread,
Oct 12, 2011, 7:28:29 AM10/12/11
to scmrt...@googlegroups.com
2011/10/11 Anton Gusev <anto...@mail.ru>:

> Дык, мы ж не против! Просто надо теперь сделать, чтоб IAR это переваривал:)
> Ждём, когда у Александра появится время проверить.

Ну всё почти как в первом сообщении, нужно вытащить объявление exec()
до создания объекта.
Я бы не сказал, что это ошибка IAR.
Таки когда форимруется конструктор нужно знать, есть ли специализация.

namespace OS
{
#ifndef __GNUC__ // avoid GCC bug (
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15867 )
template<> void TIdleProc::exec();
#endif

TIdleProc IdleProc;
}

Работает в IAR/AVR 5.51, 6.10 и в IAR/STM8 1.30

--
wbr,
ReAl

Oleksandr Redchuk

unread,
Oct 12, 2011, 7:39:41 AM10/12/11
to scmrt...@googlegroups.com
2011/10/7 Anton Gusev <anto...@mail.ru>:

>> Но и для gcc есть объявление exec() для процессов (как то исключённое
>> по #ifdef для TIdleProc) и никакой обиды на избыточное объявление нет!

> Хм. Полез проверять - мой GCC на такое ругается. Потом посмотрел - у тебя


> просто нет флага -Wredundant-decls в makefile!

Да, это я запутался в экспериментах. Флаг то ставил, то убирал,
объявления то комментировал, то открывал и где-то сбился со счета.

С этим флагом в avr-gcc-шных примерах вылазит ещё пара мест.

../scmRTOS/Common/OS_Kernel.h:52: warning: redundant redeclaration of
'void os_start(stack_item_t*)' in same scope

../scmRTOS/AVR/OS_Target.h:160: warning: previous declaration of 'void
os_start(stack_item_t*)'

В OS_Target.h даётся атрибут noretrun (мелочь, а 6 байт флеша)
Но это можно и убрать из OS_Target.h.

А вот тут:
../scmRTOS/Common/OS_Kernel.h:516: warning: redundant redeclaration of
'void OS::context_switch_user_hook()' in same scope

./src/scmRTOS_TARGET_CFG.h:150: warning: previous declaration of 'void
OS::context_switch_user_hook()'

деваться некуда, в scmRTOS_TARGET_CFG.h определяется INLINE-функция. А
позже в OS_Kernel.h для неё опять объявление.

Но о таких завязках я уже думал -- в плане хука системного таймера,
который тоже может захотеться сделать inline.

Такие inline-функции -- кандидаты на помещение в новый файл scmRTOS_extensions.h

Он обрабатывается уже после всех объявлений в пользовательских
конфигах и OS_Kernel.h, но до тех мест, куда встраиваются
inline-функции, определяемые в пользовательском проекте, но
вставляемые в код ОС.
С context_switch_user_hook() это помогает.

Что делать с noreturn для os_start() -- пока не решил.


--
wbr,
ReAl

Anton Gusev

unread,
Oct 12, 2011, 11:15:46 AM10/12/11
to scmrt...@googlegroups.com
Hi, Oleksandr Redchuk!
You wrote on 12.10.2011 17:39

> ../scmRTOS/Common/OS_Kernel.h:52: warning: redundant redeclaration of
> 'void os_start(stack_item_t*)' in same scope
>
> ../scmRTOS/AVR/OS_Target.h:160: warning: previous declaration of 'void
> os_start(stack_item_t*)'
>
> В OS_Target.h даётся атрибут noretrun (мелочь, а 6 байт флеша)
> Но это можно и убрать из OS_Target.h.

А можно наверное сразу в OS_Kernel.h объявить os_start как OS_PROCESS,
думаю, что это вполне соответствует истине.

> А вот тут:
> ../scmRTOS/Common/OS_Kernel.h:516: warning: redundant redeclaration of
> 'void OS::context_switch_user_hook()' in same scope
>
> ./src/scmRTOS_TARGET_CFG.h:150: warning: previous declaration of 'void
> OS::context_switch_user_hook()'
>
> деваться некуда, в scmRTOS_TARGET_CFG.h определяется INLINE-функция. А
> позже в OS_Kernel.h для неё опять объявление.

Если я пишу в scmRTOS_TARGET_CFG.h

namespace OS{
void context_switch_user_hook()
{
...

, то ругается, да. А если я добавляю INLINE:

INLINE void context_switch_user_hook()

, то глотает молча. (Это для Cortex-M3)


ЗЫ. Мне кажется, что это уже идёт шлифовка-полировка, что весьма радует:)

Oleksandr Redchuk

unread,
Oct 12, 2011, 11:37:21 AM10/12/11
to scmrt...@googlegroups.com
2011/10/12 Anton Gusev <anto...@mail.ru>:

>> В OS_Target.h даётся атрибут noretrun (мелочь, а 6 байт флеша)
>> Но это можно и убрать из OS_Target.h.
>
> А можно наверное сразу в OS_Kernel.h объявить os_start как OS_PROCESS,
> думаю, что это вполне соответствует истине.

С другими компиляторами сверить нужно. Но похоже, что так можно.

> , то ругается, да. А если я добавляю INLINE:
>
> INLINE void context_switch_user_hook()
>
> , то глотает молча. (Это для Cortex-M3)

Так в том-то и дело, что строка выглядит так:
INLINE void context_switch_user_hook() { block_context_switch(); }


Покопаюсь ещё.

--
wbr,
ReAl

Anton Gusev

unread,
Oct 12, 2011, 11:51:20 AM10/12/11
to scmrt...@googlegroups.com
Hi, Oleksandr Redchuk!
You wrote on 12.10.2011 21:37

> Так в том-то и дело, что строка выглядит так:
> INLINE void context_switch_user_hook() { block_context_switch(); }

А как выглядит определение INLINE_CONTEXT_SWITCH_HOOK? (У меня пустое)


Oleksandr Redchuk

unread,
Oct 12, 2011, 3:55:35 PM10/12/11
to scmrt...@googlegroups.com
2011/10/12 Anton Gusev <anto...@mail.ru>:

>> Так в том-то и дело, что строка выглядит так:
>>     INLINE void context_switch_user_hook() { block_context_switch(); }
>
> А как выглядит определение INLINE_CONTEXT_SWITCH_HOOK? (У меня пустое)

Аналогично. Т.е. у меня его просто нет, а в ОС оно при этом по #ifndef
делается пустым.

--
wbr,
ReAl

Harry Zhurov

unread,
Oct 13, 2011, 9:35:37 AM10/13/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Wed, 12 Oct 2011 21:15:46 +0600

>> О©╫ OS_Target.h О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ noretrun (О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ 6 О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫)
>> О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ OS_Target.h.

AG> О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ OS_Kernel.h О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ os_start О©╫О©╫О©╫ OS_PROCESS,
AG> О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
NO_RETURN, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, os_start - О©╫О©╫О©╫ О©╫сё О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫
OS_PROCESS'О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫ О©╫О©╫ NO_RETURN?

--
H.Z.

### О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.


О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫"


Anton Gusev

unread,
Oct 13, 2011, 10:04:55 AM10/13/11
to scmrt...@googlegroups.com
Hi, Harry Zhurov!
You wrote on 13.10.2011 19:35

> Кто за NO_RETURN?

Так есть же NORETURN уже :) Во всех GCC-шных вариантах OS_Target.h.

Oleksandr Redchuk

unread,
Oct 13, 2011, 10:37:15 AM10/13/11
to scmrt...@googlegroups.com
2011/10/13 Anton Gusev <anto...@mail.ru>:

>> Кто за NO_RETURN?
>
> Так есть же NORETURN уже :) Во всех GCC-шных вариантах OS_Target.h.

Да-да, именно там оно и стоит. Рядом с INLINE и NOINLINE.

Кстати OS::run() тоже по природе своей NORETURN, но я давно убрал
строку с NORETURN для неё.
Толи ввиду краткости main() нет эффекта, толи ещё раньше наткнулся на
какую-то ругань по поводу переопределения -- уже не помню.


--
wbr,
ReAl

Harry Zhurov

unread,
Oct 13, 2011, 11:57:05 PM10/13/11
to scmrt...@googlegroups.com
Greeting Oleksandr!
You wrote on Thu, 13 Oct 2011 17:37:15 +0300

OR> О©╫О©╫О©╫О©╫О©╫О©╫ OS::run() О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ NORETURN, О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
OR> О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ NORETURN О©╫О©╫О©╫ О©╫её.
OR> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ main() О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫щё О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
OR> О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ -- О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. OS::run О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
os_start(), О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫...

Harry Zhurov

unread,
Oct 13, 2011, 11:56:06 PM10/13/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Thu, 13 Oct 2011 20:04:55 +0600

AG> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ NORETURN О©╫О©╫О©╫ :) О©╫О©╫ О©╫О©╫О©╫О©╫ GCC-О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ OS_Target.h.

О©╫О©╫, О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - os_start(). О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

Anton Gusev

unread,
Oct 14, 2011, 12:12:37 AM10/14/11
to scmrt...@googlegroups.com
Hi, Harry Zhurov!
You wrote on 14.10.2011 9:56

> AG> Так есть же NORETURN уже :) Во всех GCC-шных вариантах OS_Target.h.
>
> Ну, то в портах, а тут на общий уровень уже вылезло - os_start(). Поэтому надо
> выносить в общие макросы. И обзывать все эти функции, которые не возвращаются,
> этим словом.

Погоди. Ты же в предыдущем письме говорил, что надо определять как раз в
портах:

> Лучше изобрести специальный макрос типа
> NO_RETURN, который и определять в портах - не факт, что какой-то компилятор не
> заругается на это.

Я и предложил этот NORETURN, потому что он уже имеется в половине портов.

Harry Zhurov

unread,
Oct 14, 2011, 2:08:56 AM10/14/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Fri, 14 Oct 2011 10:12:37 +0600

>> О©╫О©╫, О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - os_start(). О©╫О©╫О©╫О©╫О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

AG> О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫


AG> О©╫О©╫О©╫О©╫О©╫О©╫:

О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫
О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫лёО©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ Common, О©╫.О©╫. О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ scmRTOS_defs.h
О©╫О©╫О©╫О©╫:

#ifndef NO_RETURN
#define NO_RETURN
#endif

О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫лёО©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ OS::run(), os_start() О©╫ NO_RETURN О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫CО©╫О©╫О©╫ - О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ -

Anton Gusev

unread,
Oct 14, 2011, 2:20:46 AM10/14/11
to scmrt...@googlegroups.com
Hi, Harry Zhurov!
You wrote on 14.10.2011 12:08

> Я имел в виду, что значение макроса (в том числе и пустое) определять в портах, а
> сам макрос должен быть определён на уровне Common, т.к. его использование
> производится на уровне общих функций.

Дык! Это всё я понял, и полностью согласен:) Только пусть он называется
не NO_RETURN, а NORETURN, потому что в половине портов он уже есть такой:)


Harry Zhurov

unread,
Oct 14, 2011, 5:56:27 AM10/14/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Fri, 14 Oct 2011 12:20:46 +0600

>> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫лёО©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ Common, О©╫.О©╫. О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

AG> О©╫О©╫О©╫! О©╫О©╫О©╫ О©╫сё О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:) О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
AG> О©╫О©╫ NO_RETURN, О©╫ NORETURN, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫:)

О©╫, О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. :) О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫, О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫

Harry Zhurov

unread,
Oct 14, 2011, 7:07:05 AM10/14/11
to scmrt...@googlegroups.com
Greeting All!

О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ NORETURN О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ OS::run() О©╫
os_start().

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫сё, О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ extern "C" О©╫
INLINE, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫). О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫
О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫... О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫...

Oleksandr Redchuk

unread,
Oct 14, 2011, 7:51:56 AM10/14/11
to scmrt...@googlegroups.com
2011/10/14 Harry Zhurov <h...@oesd.ru>:

> Короче, добавил макрос NORETURN и указал его в объявлениях функций OS::run()
> и os_start().
> Проверьте, плиз, и если что-то не так, то поправьте.

AVR/GCC -- всё нормально. Подправленные примеры с убранным в них
объявлением os_start() зафиксирую немного позже (заодно с
-Wredundnat-decls разберусь).
В примерах этот атрибут к OS::run() таки ничего не даёт, так как main
перед ним очень простая, ни по регистрам не разложилась, ни на стеке
ничего не завела. Но для порядку оно нужно.

AVR/IAR -- гляну, чем там NORETURN делается.

--
wbr,
ReAl

Anton Gusev

unread,
Oct 14, 2011, 8:34:09 AM10/14/11
to scmrt...@googlegroups.com
Hi, Harry Zhurov!
You wrote on 14.10.2011 17:07

> Проверьте, плиз, и если что-то не так, то поправьте.

Cortex-M3/GCC - порядок,
LPC2xxx/GCC - порядок,
ADuC/GCC - порядок.

MSPЗ40/GCC - проверю в понедельник.


Harry Zhurov

unread,
Oct 14, 2011, 11:26:24 AM10/14/11
to scmrt...@googlegroups.com
Greeting Anton!
You wrote on Fri, 14 Oct 2011 18:34:09 +0600

AG> Cortex-M3/GCC - О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
AG> LPC2xxx/GCC - О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
AG> ADuC/GCC - О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫...

Harry Zhurov

unread,
Oct 14, 2011, 11:25:50 AM10/14/11
to scmrt...@googlegroups.com
Greeting Oleksandr!
You wrote on Fri, 14 Oct 2011 14:51:56 +0300

OR> AVR/GCC -- О©╫сё О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫.

OR> AVR/IAR -- О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ NORETURN О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.

О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ __task.


--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.


О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫"


Oleksandr Redchuk

unread,
Oct 15, 2011, 11:04:01 AM10/15/11
to scmrt...@googlegroups.com
2011/10/14 Harry Zhurov <h...@oesd.ru>:

OR>> AVR/IAR -- гляну, чем там NORETURN делается.

HZ> Там, как помню, ключевое слово __task.

Не, так только хуже
_task => в числе прочего не сохраняет регистры, которые должна
сохранять вызываемая функция => похоже, при попытке такую вызвать те
регистры начинает сохранять _вызывающая_.

Там есть честное и открытое слово __noreturn :-)

Это я по IAR/STM8 1.30 (Embedded Workbench 6.0 Kickstart)
Но там это вообще только два байта экономит :-)

До AVR/IAR доберусь завтра-послезавтра.

--
wbr,
ReAl

Oleksandr Redchuk

unread,
Oct 16, 2011, 7:38:39 AM10/16/11
to scmrt...@googlegroups.com
2011/10/15 Oleksandr Redchuk <oleksand...@gmail.com>:

OR> До AVR/IAR доберусь завтра-послезавтра.

Так же всё работает. Экономия те же 6 байт, что и для AVR/GCC :-)
Проверил компиляцию на 5.51 и 6.10, но в железо не зашивал.
Зафиксировал AVR/GCC и AVR/IAR

p.s. на примерах scmRTOS IAR 6.10 даёт 50-70 байт экономии кода по
сравнению с 5.51

--
wbr,
ReAl

Anton Gusev

unread,
Oct 17, 2011, 6:30:36 AM10/17/11
to scmrt...@googlegroups.com
Hi, Anton Gusev!
You wrote on 14.10.2011 18:34

> MSPЗ40/GCC - проверю в понедельник.

MSPЗ40/GCC - порядок.


Harry Zhurov

unread,
Oct 17, 2011, 9:19:44 AM10/17/11
to scmrt...@googlegroups.com
Greeting Oleksandr!
You wrote on Sat, 15 Oct 2011 18:04:01 +0300

OR> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ __noreturn :-)

О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

--
H.Z.

### О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫

О©╫О©╫О©╫О©╫О©╫...

Андрей Чуйкин

unread,
Oct 17, 2011, 10:26:14 PM10/17/11
to scmrt...@googlegroups.com
CortexM3/IAR порядок.

_________________________
С уважением, Андрей Чуйкин.
ООО "Термэкс", г. Томск.
(3822) 49-28-91
av...@ipc.tsc.ru
http://termexlab.ru

> -----Original Message-----
> From: scmrt...@googlegroups.com [mailto:scmrtos-
> r...@googlegroups.com] On Behalf Of Harry Zhurov
> Sent: Friday, October 14, 2011 6:07 PM
> To: scmrt...@googlegroups.com
> Subject: Сообщение об ошибке в ревизии 440
>
> Greeting All!
>
> Короче, добавил макрос NORETURN и указал его в объявлениях функций
> OS::run() и os_start().
>
> Поскольку он у меня пустой, то всё, ессно, собирается ровно также,
> поэтому нужно проверить на платформах, где этот макрос имеет
> соответствующее значение.
> Возможно, я что-то неправильно там написал (там рядом обилие всяких
> extern "C" и INLINE, поэтому могут возникнуть интерференции).
> Проверьте, плиз, и если что-то не так, то поправьте.
>
> --
> H.Z.
>
> ### Ничего страшного если над тобой смеются... Гораздо хуже, когда над
> тобой плачут...
>
>
> Филиал ИФП СО РАН "КТИПМ"
>
>
> --
> Страница группы -- http://groups.google.com/group/scmrtos-ru
Reply all
Reply to author
Forward
0 new messages