RTX166Tiny & EC++ have problem!

Good day!

I have a problem with using RTX166 Tiny OS with EC++.
If I try to define tasks in .cpp file, I dont see JUMP to _main() function.

In technical support:
"RTX166 TINY: CAN'T DEFINE TASKS IN EC++"
http://www.keil.com/support/docs/2812.htm
advises to "Simply define your _task_ and interrupt functions in a .C file".
In this case Can I use C++ features (ex. define objects) in tasks functions?

In file C:\Program Files\Keil\C166\Rtx_Tiny\readme5.txt I have read following note:

Function os_start for EC++ compatiblity
=======================================
The function os_start enables the usage of RTX166 Tiny together with EC++. EC++
requires special initalizations that are performed in the main routine. After
this initalizations, the os_start function can be called to start the RTX166
Tiny kernel.


EXTERN_C void _main ()  {
  init_mempool (mempool, sizeof (mempool));  // create memory pool for new & delete
  __sti__init__ ();                          // call initializer functions
  os_start ();                               // start RTX166 kernel
}

But senselessly try to call os_start(), if _main() is not called.

P.S.
Problem "expected {" I resolve using replace _task_ with __task. Is it correct?

Parents
  • Oleg,

    I don't quite understand your problem, however there is one thing that strikes me in the code you posted: __sti_init__() does not return. Therefore your OS won't be initialized when you start using it (and I don't want to imagine what's going to happen then...)

    __sti_init__() initializes all your objects, virtual tables or what-have-you, and then it calls main().

    Therefore you should put os_init() in your main() function, not in _main().

    After the OS is initialized, then you can start creating tasks.

    You need to use the keyword __task instead of _task_ for tasks definitions in C++ files.

    I've been using EC++ and RTX Tiny and ARTX for quite a while and it works pretty well.

    $0.02

    Steph-

Reply
  • Oleg,

    I don't quite understand your problem, however there is one thing that strikes me in the code you posted: __sti_init__() does not return. Therefore your OS won't be initialized when you start using it (and I don't want to imagine what's going to happen then...)

    __sti_init__() initializes all your objects, virtual tables or what-have-you, and then it calls main().

    Therefore you should put os_init() in your main() function, not in _main().

    After the OS is initialized, then you can start creating tasks.

    You need to use the keyword __task instead of _task_ for tasks definitions in C++ files.

    I've been using EC++ and RTX Tiny and ARTX for quite a while and it works pretty well.

    $0.02

    Steph-

Children
More questions in this forum