Dear everyone,

I've worked on the power management for the atmega platform at the RIOT
Hackathon.
While creating PRs for the different parts, I stopped at a critial point
I would like to discuss here:

Several functions are used for the power management and stubs are
provided in drivers/periph_common/pm.c. However as mentioned in one
issue, the weak implementation did *not* work correctly.
Therefore we agreed on removing weak definitions for the module and use
some #ifdefs instead:

#if !defined( MODULE_PM_LAYERED )
void pm_set_lowest(void) { }
#endif

Unfortunately, this does not work because some platforms and especially
the stm32_common/kinetis_common/cortexm_common platforms define these
functions all over the place!

My first question is there for, is there a good system to
implementations for a module such as the PM module at different levels?

E.g. the CPU should always have the possibility to implement specific
pm_* functions. A fallback could be provided in the common CPU.
Additionally, the pm_layered module uses some of these CPU functions.
And finally, the fallback functions in pm.c should be used, if none exist.
Is it ok to use #define / #ifdef constructs for these? Any opinions?
I think we need a very fine-granular system here. I started to add
special features to handle this case:

makefiles/features.inc.mk

DEFAULT_FEATURES += periph_pm periph_pm_off periph_pm_set_lowest
periph_pm_reboot

cpu/cortexm_common/Makefile.features
FEATURES_PROVIDED += periph_pm_set_lowest

I thought that maybe features can be used to describe which functions
are provided. Later on based on include/compile order, missing functions
can be added if needed. Any opinions on this?

Best Regards,
Robert

-- 
Robert Hartung, M.Sc.

Technische Universität Braunschweig
Institut für Betriebssysteme und Rechnerverbund
Mühlenpfordtstr. 23, Raum 115
38106 Braunschweig

Fon: +49 (531) 391 - 3264
Fax: +49 (531) 391 - 5936
E-Mail: hart...@ibr.cs.tu-bs.de
_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to