/** * @file kk.h * @author lokliang * @brief k_kit.h 衍生的易用接口,简化部分接口中的参数,去除不常用的接口 * @version 1.0 * @date 2022-12-09 * @date 2021-01-13 * * @copyright Copyright (c) 2021 * */ #ifndef __KK_H__ #define __KK_H__ #include "k_kit.h" #ifdef __cplusplus extern "C" { #endif typedef k_err_t kk_err_t; typedef k_tick_t kk_time_t; typedef k_work_q_t kk_work_q_t; typedef k_work_t kk_work_t; typedef k_timer_t kk_timer_t; typedef k_fifo_t kk_fifo_t; typedef k_queue_t kk_queue_t; typedef k_pipe_t kk_pipe_t; #define WORK_Q_HDL default_work_q_hdl #define TIMER_Q_HDL default_timer_q_hdl #define kk_handler() k_work_q_handler(WORK_Q_HDL) // 工作队列执行入口 #define kk_timer_handler() k_timer_q_handler(TIMER_Q_HDL) // 软定时器队列执行入口 #define kk_work_q_delayed_state() k_work_q_delayed_state(WORK_Q_HDL) // 获取是否有正在延时状态的任务 #define kk_work_q_ready_state() k_work_q_ready_state(WORK_Q_HDL) // 获取工作队列中是否有就绪的任务 #define kk_work_q_delete() k_work_q_delete(WORK_Q_HDL) // 删除一个工作队列的对象 #define kk_work_q_is_valid() k_work_q_is_valid(WORK_Q_HDL) // 获取工作队列是否有效 #define kk_work_create(work_handle, work_route, arg, priority) k_work_create(work_handle, #work_route, work_route, arg, priority) // 创建由工作队列管理的任务 #define kk_work_create_default(work_handle, work_route, arg, priority, delay) k_work_create_default(work_handle, #work_route, work_route, arg, priority, delay) // 创建由工作队列管理的任务,使用默认的工作队列 #define kk_work_delete(work_handle) k_work_delete(work_handle) // 删除由工作队列管理的任务 #define kk_work_submit(work_q_handle, work_handle, delay) k_work_submit(work_q_handle, work_handle, delay) // 多少时间后唤醒任务 #define kk_work_is_valid(work_handle) k_work_is_valid(work_handle) // 获取任务对象是否有效 #define kk_work_is_pending(work_handle) k_work_is_pending(work_handle) // 获取任务是否在就绪或延时的状态 #define kk_work_time_remain(work_handle) k_work_time_remain(work_handle) // 获取任务距离下个执行的剩余时间 #define kk_timer_create(timer_handle, timer_route, arg) k_timer_create(timer_handle, TIMER_Q_HDL, timer_route, arg, 0) // 创建由软定时器队列管理的定时器任务 #define kk_timer_delete(timer_handle) k_timer_delete(timer_handle) // 删除由软定时器队列管理的定时器任务 #define kk_timer_start(timer_handle, periodic, period) do { k_timer_set_period(timer_handle, periodic, period); k_timer_start(timer_handle, period); } while (0) // 启动定时器 #define kk_timer_stop(timer_handle) k_timer_stop(timer_handle) // 挂起定时器,定时器不会被删除 #define kk_timer_is_valid(timer_handle) k_timer_is_valid(timer_handle) // 获取定时器对象是否有效 #define kk_timer_is_pending(timer_handle) k_timer_is_pending(timer_handle) // 获取定时器是否在就绪或延时的状态 #define kk_timer_time_remain(timer_handle) k_timer_time_remain(timer_handle) // 获取定时器距离下个执行的剩余时间 #define kk_work_mbox_create(work_handle) k_work_mbox_create(work_handle) // 创建任务的邮箱 #define kk_work_mbox_delete(work_handle) k_work_mbox_delete(work_handle) // 删除任务的邮箱 #define kk_fifo_q_create(fifo_handle) k_fifo_q_create(fifo_handle) // 创建一个FIFO对象 #define kk_fifo_q_delete(fifo_handle) k_fifo_q_delete(fifo_handle) // 删除一个FIFO的对象 #define kk_fifo_q_clr(fifo_handle) k_fifo_q_clr(fifo_handle) // 清除FIFO内的所有数据 #define kk_fifo_q_is_valid(fifo_handle) k_fifo_q_is_valid(fifo_handle) // 获取 FIFO 对象是否有效 #define kk_fifo_q_regist(fifo_handle, work_handle, ticks) k_fifo_q_regist(fifo_handle, work_handle, ticks) // 注册当队列非空时被唤醒的任务 #define kk_queue_create(queue_handle, queue_length, item_size) k_queue_create(queue_handle, queue_length, item_size) // 创建一个QUEUE对象 #define kk_queue_delete(queue_handle) k_queue_delete(queue_handle) // 删除一个QUEUE的对象 #define kk_queue_clr(queue_handle) k_queue_clr(queue_handle) // 清除QUEUE内的所有数据 #define kk_queue_is_valid(queue_handle) k_queue_is_valid(queue_handle) // 获取 QUEUE 对象是否有效 #define kk_queue_regist(queue_handle, work_handle, ticks) k_queue_regist(queue_handle, work_handle, ticks) // 注册当队列非空时被唤醒的任务 #define kk_pipe_create(pipe_handle, pipe_size) k_pipe_create(pipe_handle, pipe_size) // 创一个管道对象 #define kk_pipe_delete(pipe_handle) k_pipe_delete(pipe_handle) // 删除一个管道对象 #define kk_pipe_clr(pipe_handle) k_pipe_clr(pipe_handle) // 清空管道的数据 #define kk_pipe_is_valid(pipe_handle) k_pipe_is_valid(pipe_handle) // 获取 PIPE 对象是否有效 #define kk_pipe_regist(pipe_handle, work_handle, ticks) k_pipe_regist(pipe_handle, work_handle, ticks) // 注册当队列非空时被唤醒的任务 #define kk_work_resume(work_handle, delay) k_work_resume(work_handle, delay) // 唤醒任务。注意需要先使用 k_work_submit 绑定一个 work_q_handle #define kk_work_suspend(work_handle) k_work_suspend(work_handle) // 挂起任务,任务不会被删除 #define kk_work_later(delay) k_work_later(delay) // 设置下个执行延时 #define kk_work_later_until(delay) k_work_later_until(delay) // 从最后一次唤醒的时间算起,延时多少个系统节拍后再执行本任务(固定周期的延时) #define kk_work_yield(delay) k_work_yield(delay) // 释放一次CPU的使用权,不调度低于当前任务优先级的任务 #define kk_work_sleep(delay) k_work_sleep(delay) // 释放一次CPU的使用权,可调度低于当前任务优先级的任务 #define kk_work_mbox_alloc(work_handle, size) k_work_mbox_alloc(work_handle, size) // 申请一个邮件 #define kk_work_mbox_cancel(mbox) k_work_mbox_cancel(mbox) // 取消已申请的邮件 #define kk_work_mbox_submit(mbox) k_work_mbox_submit(mbox) // 发送邮件 #define kk_work_mbox_take() k_work_mbox_take() // 提取邮件 #define kk_work_mbox_peek() k_work_mbox_peek() // 查询邮件 #define kk_work_mbox_clr() k_work_mbox_clr() // 清空任务的所有邮件 #define kk_fifo_alloc(size) k_fifo_alloc(size) // 申请可用于FIFO的数据结构 #define kk_fifo_free(data) k_fifo_free(data) // 释放由 kk_fifo_alloc() 申请的数据结构 #define kk_fifo_put(fifo_handle, data) k_fifo_put(fifo_handle, data) // 把数据结构压入到FIFO中 #define kk_fifo_take(fifo_handle) k_fifo_take(fifo_handle) // 从FIFO中弹出最先压入的数据 #define kk_fifo_peek_head(fifo_handle) k_fifo_peek_head(fifo_handle) // 查询FIFO中头部的数据地址 #define kk_fifo_peek_tail(fifo_handle) k_fifo_peek_tail(fifo_handle) // 查询FIFO中尾部的数据地址 #define kk_queue_recv(queue_handle, dst) k_queue_recv(queue_handle, dst) // 接收并复制数据 #define kk_queue_send(queue_handle, src) k_queue_send(queue_handle, src) // 复制数据并发送 #define kk_queue_alloc(queue_handle) k_queue_alloc(queue_handle) // 申请可用于QUEUE的数据结构 #define kk_queue_free(data) k_queue_free(data) // 释放由 kk_queue_alloc() 申请的数据结构 #define kk_queue_put(data) k_queue_put(data) // 把数据压入到QUEUE中 #define kk_queue_take(queue_handle) k_queue_take(queue_handle) // 从QUEUE中弹出最先压入的数据 #define kk_queue_peek_head(queue_handle) k_queue_peek_head(queue_handle) // 查询QUEUE中头部的数据地址 #define kk_queue_peek_tail(queue_handle) k_queue_peek_tail(queue_handle) // 查询QUEUE中尾部的数据地址 #define kk_queue_get_item_size(queue_handle) k_queue_get_item_size(queue_handle); // 读回 k_queue_create() 中设置的 item_size 的值 #define kk_pipe_fifo_fill(pipe_handle, data, size) k_pipe_fifo_fill(pipe_handle, data, size) // 把内存数据复制到缓存中(写入缓存),返回实际复制成功的字节数 #define kk_pipe_poll_write(pipe_handle, data) k_pipe_poll_write(pipe_handle, data) // 写一个字节到缓存中(写入缓存),返回实际复制成功的字节数 #define kk_pipe_fifo_read(pipe_handle, data, size) k_pipe_fifo_read(pipe_handle, data, size) // 从管道中复制数据到内存(从缓存读取),返回实际复制成功的字节数。注:参数 data 值可以为 NULL,此时不复制数据,只释放相应的数据量 #define kk_pipe_poll_read(pipe_handle, data) k_pipe_poll_read(pipe_handle, data) // 从缓存复制一个字节到指定地址中,返回 0 表示缓存空 #define kk_pipe_is_ne(pipe_handle) k_pipe_is_ne(pipe_handle) // 获取管道非空, true 有数据 #define kk_pipe_get_valid_size(pipe_handle) k_pipe_get_valid_size(pipe_handle) // 获取管道的数据大小(字节数) #define kk_pipe_get_empty_size(pipe_handle) k_pipe_get_empty_size(pipe_handle) // 获取管道的剩余空间(字节数) #define kk_pipe_peek_valid(pipe_handle, dst_data, dst_size) k_pipe_peek_valid(pipe_handle, dst_data, dst_size) // 获取当前已写入的连续的内存信息 #define kk_pipe_peek_empty(pipe_handle, dst_data, dst_size) k_pipe_peek_empty(pipe_handle, dst_data, dst_size) // 获取当前空闲的连续的内存信息 #define kk_get_sys_ticks() k_get_sys_ticks() // 获取当前系统时间 #define kk_get_heap_mem() k_get_heap_mem() // 获取初始化时指定的堆内存 #define kk_disable_interrupt() k_disable_interrupt() // 禁止中断 #define kk_enable_interrupt() k_enable_interrupt() // 恢复中断 #define kk_log_sched() k_log_sched() // 打印当前调度日志 #if defined(MIX_COMMON) #include "heap.h" #endif #define kk_malloc(size) heap_malloc(NULL, size) // 申请内存 #define kk_calloc(size) heap_calloc(NULL, size) // 申请内存并置0 #define kk_realloc(ptr, size) heap_realloc(NULL, ptr, size) // 重定义已申请的内存大小 #define kk_free(ptr) heap_free(NULL, ptr) // 释放内存 #define kk_heap_is_valid(ptr) heap_is_valid(NULL, ptr) // 获取内存指针是否有效 #define kk_heap_block_size(ptr) heap_block_size(ptr) // 已申请内存块的实际占用空间大小(不含所有控制信息)(字节) #define kk_heap_space_size(ptr) heap_space_size(ptr) // 已申请内存块的实际占用空间大小(含所有控制信息)(字节) #define kk_heap_used_size() heap_used_size(NULL) // 获取总已使用空间 #define kk_heap_free_size() heap_free_size(NULL) // 获取总空闲空间(包含所有碎片) #define kk_heap_block_max() heap_block_max(NULL) // 获取当前最大的连续空间 #ifdef __cplusplus } #endif #endif