We use STM32 HAL/LL. Description available here: [dm00105879.pdf](https://github.com/Flipper-Zero/flipperzero-firmware-community/raw/master/wiki_static/dm00105879-description-of-stm32f4-hal-and-ll-drivers-stmicroelectronics.pdf)
File system is used to volaile storage some files (config, application data, etc.). There are some folders mounted to different volumes:
*`/usr` for store static data like assets, menu items. Build system add files to usr while building. It can be useful for exchange some static data between application. For example, your app can add link to itself to Plugins menu items file, user will see your app and can call it from this menu.
* Specially `/usr/etc-default` folder contains default configs for apps. Bootloader has `factory default` options to reset applications config. Also when new app is bootstapping, system copy files from default config folder to `/etc`.
*`/etc` for store configs of application. This volume not overwrite during flashing.
*`/var` for store some application data (saved keys, application database, logs). This volume also not overwrite during flashing.
*`/media/*` mounted if SD card is inserted.
# Flipper applications
Each flipper functionality except OS/HAL/FURI doing by Flipper application. Some application are called at startup, the rest are called by the user (for example, from menu).
For exchange data between application each app expose own record in FURI. You can subscribe on/read record to get data from application and write to record to send data to application.