| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #include "FreeRTOS.h"
- #include "Task.h"
- #include "clock.h"
- extern fr_atomic_t fr_hw_atomic_load(volatile fr_atomic_t *ptr);
- extern void fr_hw_atomic_store(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_add(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_sub(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_and(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_or(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_xor(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern fr_atomic_t fr_hw_atomic_exchange(volatile fr_atomic_t *ptr, fr_atomic_t val);
- extern void fr_hw_atomic_flag_clear(volatile fr_atomic_t *ptr);
- extern fr_atomic_t fr_hw_atomic_flag_test_and_set(volatile fr_atomic_t *ptr);
- extern fr_atomic_t fr_hw_atomic_compare_exchange_strong(volatile fr_atomic_t *ptr, fr_atomic_t *old, fr_atomic_t _new);
- static volatile unsigned long c_tick = 0;
- static void (*fr_tick_hook)(void);
- void fr_tick_sethook(void (*hook)(void))
- {
- fr_tick_hook = hook;
- }
- fr_tick_t fr_tick_get(void)
- {
- /* return the global tick */
- return (fr_tick_t)fr_hw_atomic_load(&(c_tick));
- }
- void fr_tick_set(fr_tick_t tick)
- {
- fr_hw_atomic_store(&(c_tick), tick);
- }
- void fr_tick_increase(void)
- {
- fr_hw_atomic_add(&(c_tick), 1);
- }
- fr_tick_t fr_tick_from_millisecond(int ms)
- {
- fr_tick_t tick;
- if (ms < 0)
- {
- tick = (fr_tick_t)(-1);
- }
- else
- {
- tick = 1000 * (ms / 1000);
- tick += (1000 * (ms % 1000) + 999) / 1000;
- }
- return tick;
- }
- fr_tick_t fr_tick_get_millisecond(void)
- {
- return fr_tick_get() * (1000u / 1000);
- }
|