Flipper Zero Firmware
Loading...
Searching...
No Matches
kernel.h File Reference

Furi Kernel primitives. More...

#include <core/base.h>

Go to the source code of this file.

Functions

bool furi_kernel_is_irq_or_masked (void)
 Check if CPU is in IRQ or kernel running and IRQ is masked.
 
bool furi_kernel_is_running (void)
 Check if kernel is running.
 
int32_t furi_kernel_lock (void)
 Lock kernel, pause process scheduling.
 
int32_t furi_kernel_unlock (void)
 Unlock kernel, resume process scheduling.
 
int32_t furi_kernel_restore_lock (int32_t lock)
 Restore kernel lock state.
 
uint32_t furi_kernel_get_tick_frequency (void)
 Get kernel systick frequency.
 
void furi_delay_tick (uint32_t ticks)
 Delay execution.
 
FuriStatus furi_delay_until_tick (uint32_t tick)
 Delay until tick.
 
uint32_t furi_get_tick (void)
 Get current tick counter.
 
uint32_t furi_ms_to_ticks (uint32_t milliseconds)
 Convert milliseconds to ticks.
 
void furi_delay_ms (uint32_t milliseconds)
 Delay in milliseconds.
 
void furi_delay_us (uint32_t microseconds)
 Delay in microseconds.
 

Detailed Description

Furi Kernel primitives.

Function Documentation

◆ furi_delay_ms()

void furi_delay_ms ( uint32_t milliseconds)

Delay in milliseconds.

This method uses kernel ticks on the inside, which causes delay to be aliased to scheduler timer intervals. Real wait time will be between X+ milliseconds. Special value: 0, will cause task yield. Also if used when kernel is not running will fall back to furi_delay_us.

Warning
Cannot be used from ISR
Parameters
[in]millisecondsmilliseconds to wait

◆ furi_delay_tick()

void furi_delay_tick ( uint32_t ticks)

Delay execution.

Warning
This should never be called in interrupt request context.

Also keep in mind delay is aliased to scheduler timer intervals.

Parameters
[in]ticksThe ticks count to pause

◆ furi_delay_until_tick()

FuriStatus furi_delay_until_tick ( uint32_t tick)

Delay until tick.

Warning
This should never be called in interrupt request context.
Parameters
[in]tickThe tick until which kerel should delay task execution
Returns
The furi status.

◆ furi_delay_us()

void furi_delay_us ( uint32_t microseconds)

Delay in microseconds.

Implemented using Cortex DWT counter. Blocking and non aliased.

Parameters
[in]microsecondsmicroseconds to wait

◆ furi_get_tick()

uint32_t furi_get_tick ( void )

Get current tick counter.

System uptime, may overflow.

Returns
Current ticks in milliseconds

◆ furi_kernel_get_tick_frequency()

uint32_t furi_kernel_get_tick_frequency ( void )

Get kernel systick frequency.

Returns
systick counts per second

◆ furi_kernel_is_irq_or_masked()

bool furi_kernel_is_irq_or_masked ( void )

Check if CPU is in IRQ or kernel running and IRQ is masked.

Originally this primitive was born as a workaround for FreeRTOS kernel primitives shenanigans with PRIMASK.

Meaningful use cases are:

  • When kernel is started and you want to ensure that you are not in IRQ or IRQ is not masked(like in critical section)
  • When kernel is not started and you want to make sure that you are not in IRQ mode, ignoring PRIMASK.

As you can see there will be edge case when kernel is not started and PRIMASK is not 0 that may cause some funky behavior. Most likely it will happen after kernel primitives being used, but control not yet passed to kernel. It's up to you to figure out if it is safe for your code or not.

Returns
true if CPU is in IRQ or kernel running and IRQ is masked

◆ furi_kernel_is_running()

bool furi_kernel_is_running ( void )

Check if kernel is running.

Returns
true if running, false otherwise

◆ furi_kernel_lock()

int32_t furi_kernel_lock ( void )

Lock kernel, pause process scheduling.

Warning
This should never be called in interrupt request context.
Returns
previous lock state(0 - unlocked, 1 - locked)

◆ furi_kernel_restore_lock()

int32_t furi_kernel_restore_lock ( int32_t lock)

Restore kernel lock state.

Warning
This should never be called in interrupt request context.
Parameters
[in]lockThe lock state
Returns
new lock state or error

◆ furi_kernel_unlock()

int32_t furi_kernel_unlock ( void )

Unlock kernel, resume process scheduling.

Warning
This should never be called in interrupt request context.
Returns
previous lock state(0 - unlocked, 1 - locked)

◆ furi_ms_to_ticks()

uint32_t furi_ms_to_ticks ( uint32_t milliseconds)

Convert milliseconds to ticks.

Parameters
[in]millisecondstime in milliseconds
Returns
time in ticks