forked from RIOT-OS/RIOT
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request RIOT-OS#4480 from authmillenon/doc/enh/creating-mo…
…dules doc: add page about creating modules
- Loading branch information
Showing
3 changed files
with
70 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
Creating modules {#creating-modules} | ||
================ | ||
Modules in RIOT are well-defined units of code that provide a set of features | ||
to your application. This includes also drivers and to a certain extent ports | ||
for CPUs and boards (with some exceptions, see <!-- @ref porting-guide --> the | ||
porting guide for further information). | ||
|
||
The general structure {#the-general-structure} | ||
===================== | ||
Like @ref creating-an-application "applications", modules are directories | ||
containing source files and a Makefile. Additionally their API can be defined | ||
in one or more header files, residing in the include path of their | ||
super-module. | ||
|
||
E.g. the @ref sys_shell module is implemented in `sys/shell` and defines its | ||
API in `sys/include/shell.h` and the @ref drivers_isl29020 driver is | ||
implemented in `drivers/isl29020` and defines its API in | ||
`drivers/include/isl29020.h`. | ||
|
||
A module's Makefile just needs to include `Makefile.base` in the RIOT | ||
repository: | ||
|
||
~~~~~~~~~~~~~~~~~~~ {.mk} | ||
include $(RIOTBASE)/Makefile | ||
~~~~~~~~~~~~~~~~~~~ | ||
|
||
If your module's name differs from the name of the directory it resides in you | ||
need to set the `MODULE` macro in addition. | ||
|
||
When compiled a module always provides a `MODULE_<MODULENAME>` macro to the | ||
system. This way, other modules can check if the module is available in the | ||
current configuration or not. | ||
|
||
Modules can be used by adding their name to the `USEMODULE` macro of your | ||
application's Makefile. | ||
|
||
Module dependencies | ||
=================== | ||
Your module may depend on other modules to minimize code duplication. These | ||
dependencies are defined in `Makefile.dep` with the following syntax: | ||
|
||
~~~~~~~~~~~~~~~~~~~ {.mk} | ||
ifneq (,$(filter your_module,$(USEMODULE))) # if module in USEMODULE | ||
USEMODULE += dep1 # add dependencies to USEMODULE | ||
USEMODULE += dep2 | ||
endif | ||
~~~~~~~~~~~~~~~~~~~ | ||
|
||
Note, that `Makefile.dep` is processed only once so you have to take care to | ||
add the dependency block for your module *before* your dependencies pull in | ||
their dependencies. | ||
|
||
Modules outside of RIOTBASE {#modules-outside-of-riotbase} | ||
=========================== | ||
Modules can be defined outside `RIOTBASE`. In addition to add it to `USEMODULE` | ||
the user needs to add the path to the module to `EXTERNAL_MODULES` and add the | ||
include path to the API definitions to `INCLUDES`. | ||
|
||
Pseudomodules {#pseudomodules} | ||
============= | ||
Pseudomodules are modules that do not have any code. Their main use cases are | ||
to provide base information for dependencies to other modules or information to | ||
the code base via the `MODULE_<MODULENAME>` macro. Pseudomodules can provide | ||
header files too, if need be. To create a pseudomodule just add its name to the | ||
`PSEUDOMODULES` macro in `Makefile.pseudomodules`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters