748 views
in Platform Packages by
Hello,

we are using the generic platform package for our project and have to adapt it to our microcontroller. Adapting the new version of the platform package (version 12) leads to some difficulties:

- The first one is, the ew_bsp_os.c throws an error in bare metal, so I am not sure if it is still possible to use EMWiz (or the generic platform package) in a bare metal project or if I have just to adapt the GetTicks() and OSDelay() sources.

- The second, more difficult one is the use of atomic_fetch_add function which is not supported in my actual configuration. I think atomic functions will not be needed without an OS and different threads, so is it OK to just replace the atomic function?

Greetings

Markus Jaeggle

1 Answer

0 votes
by

Hello,

of course, it is still possible to use the Generic Platform Package on a target without operating system (bare-metal). The new file ew_bsp_os.c introduced with version 12 is just an abstraction of an underlying operating system - if any. Due to the fact that in case of bare-metal the implementation depends on your particular target, there is no default implementation included.

In your case, you need to implement the two functions: EwBspOsGetTicks() and EwBspOsDelay().

As for your second question, please keep in mind that even though there are no parallel threads in case of bare-metal, it could happen that EwInvoke() or EwInvokeCopy() are called from an interrupt service routine (ISR). Therefore, the atomic_fetch_add() is necessary also in case of bare-metal.

In case there are no atomic operations supported for your target, you can use the following implementation:

int EwAtomicFetchAndAdd( XAtomic* aAtomic, int aArg )
{
#ifdef EW_USE_ATOMIC_WORKAROUND

  long oldValue;
  __disable_irq();
  oldValue = *aAtomic;
  *aAtomic += aArg;
  __enable_irq();
  return oldValue;

#else

  return (int)atomic_fetch_add( aAtomic, aArg );

#endif
}

Does this work on your target?

Best regards,

Manfred Schweyer.

by
Hello,

thank you for the fast and helpful answer. For the moment, everything seems to work.

Greetings

Markus Jaeggle

Ask Embedded Wizard - Archive

Welcome to the Ask Embedded Wizard archive. This community forum served us well for many years, but we've evolved our support approach!

Your resources:

The Embedded Wizard Online Documentation provides comprehensive documentation, tutorials, examples and ready-to-use software packages.

For dedicated assistance, explore our Embedded Wizard Product Support.

You can still browse the valuable discussions from our community history here.

Embedded Wizard Website | Privacy Policy | Imprint

...