unleashed-firmware/documentation/FuriCheck.md
Astra ecab4d53d2
[FL-870] Auto-generated firmware documentation take two (#2944)
* Add doxygen and doxygen-awesome css, cleanup docs files
* Ignore more libraries and remove leftover local variables
* Create an actual intro page
* .md files linting
* Add doxygen action
* Fix Doxygen path
* Fix doxyfile path
* Try to upload
* Change docs branch
* Add submudules checkout
* Disable doxygen on PR
* Mention the firmware docs in the readme
* More dev docs mentions in the readme
* Fix runner group, add tags
* Test dev in PR
* Disable running on PR
* Fix a typo in the doxyfile
* Try upload to S3
* Fix local path
* Fix S3 ACL
* Add delete flag, unifying dev and tags
* Update ignored directories
* More ignored directories
* Even more ignored directories
* Fix submodule
* Change S3 uploader
* Change S3 uploader version
* Fix aws sync flags
* Fix ACL
* Disable ACL
* Improve ignores, add WiFi devboard docs
* TEMP: generate dev docs
* TEMP: generate 0.89.0 docs
* Disabling PR trigger
* Enable submodules and test build
* Enable test build
* Disable test build
* Change docs directory structure
* Fix accidentally committed submodule
* Fix submodules
* Update links to the developer documentation
* Markdown linting
* Update workflow, enable test build
* Fix doxygen dir path
* Update Doxyfile-awesome.cfg
* Change paths
* Fix upload docs path
* Disable pull_request debug trigger
* Disable tags building
* Remove autolinks and namespaces
* Establish basic documentation structure
* Add missing changes
* Improve stylesheet, move some files
* Improve examples
* Improve the main page
* Improve application dev docs
* Improve system programming docs
* Improve development tools docs
* Improve other docs
* Improve application examples
* Fix formatting
* Fix PVS-studio warnings
* Improve visuals
* Fix doxygen syntax warnings
* Fix broken links
* Update doxygen action

Co-authored-by: DrunkBatya <drunkbatya.js@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com>
2024-03-06 15:25:21 +09:00

1.8 KiB

Run time checks and forced system crash

The best way to protect system integrity is to reduce amount cases that we must handle and crash the system as early as possible. For that purpose we have bunch of helpers located in Furi Core check.h.

Couple notes before start

  • Definition of Crash - log event, save crash information in RTC and reboot the system.
  • Definition of Halt - log event, stall the system.
  • Debug and production builds behaves differently: debug build will never reset system in order to preserve state for debugging.
  • If you have debugger connected we will stop before reboot automatically.
  • All helpers accept optional MESSAGE_CSTR: it can be in RAM or Flash memory, but only messages from Flash will be shown after system reboot.
  • MESSAGE_CSTR can be NULL, but macros magic already doing it for you, so just don't.

furi_assert(CONDITION) or furi_assert(CONDITION, MESSAGE_CSTR)

Assert condition in development environment and crash the system if CONDITION is false.

  • Should be used at development stage in apps and services
  • Keep in mind that release never contains this check
  • Keep in mind that libraries never contains this check by default, use LIB_DEBUG=1 if you need it
  • Avoid putting function calls into CONDITION, since it may be omitted in some builds

furi_check(CONDITION) or furi_check(CONDITION, MESSAGE_CSTR)

Always assert condition and crash the system if CONDITION is false.

  • Use it if you always need to check conditions

furi_crash() or furi_crash(MESSAGE_CSTR)

Crash the system.

  • Use it to crash the system. For example: if abnormal condition detected.

furi_halt() or furi_halt(MESSAGE_CSTR)

Halt the system.

  • We use it internally to shutdown flipper if poweroff is not possible.