【1024平头哥开发套件体验】- sc5654 中级使用
基本功能 任务 队列 建立与调用
一、 基本功能控制
事件中会调用根据不同事件调用led状态函数
void app_set_led_state(int state) // 文件app_led.c中实现
led状态函数中最终会调用
led_control(led_dev, COLOR_BLACK, a, b);
//其中led一直循环执行,a表示亮灯时间,b表示熄灭时间,单位为毫秒。
aa:可以直接调用led_control设置LED状态。
bb:修改事件对应内容,实现不同事件下LED状态切换。
按键获取为两种,短按和长按,在按键初始化中设置各个按键,连接回调函数。
按键初始化函数:sta
tic void button_task_init(void)
初始化分为2步:1 按键初始化 2 键值事件连接。
第一步,初始化按键引脚:
第二部,键值事件连接
Aa:使用结构体button_evt_t 来控制按键id,获取方式,长按时间
id: button_id
获取方式:event_id
(BUTTON_PRESS_LONG_DOWN长按 ,BUTTON_PRESS_UP短按)
长按时长:press_time
单位:毫秒
Bb:连接回调函数:
int button_add_event(int evt_id, button_evt_t *buttons, int button_count, button_evt_cb_t evt_cb, void *priv);
// evt_id 按键事件号 button_evt_t控制结构体 evt_cb回调函数
任务函数:
前面说到
button_add_event(inc_long, b_tbl, sizeof(b_tbl)/sizeof(button_evt_t), button_evt, "inc_long");
函数实现了获取键值并连接回调函数,其中button_evt为一个事件控制函数,用来给事件传递参数,控制事件发生类型。
事件函数实现函数:
Aa:包含头文件 #include ”silan_gpio_source.h”
Bb:设置io模式
void silan_io_input(int io);
void silan_io_output(int io);
void silan_io_direction(int io, int dir);
Cc:设置io电平
void silan_io_set_high(int io);
void silan_io_set_low(int io);
void silan_io_set_value(int io, int val);
Dd:获取io电平
int silan_io_get(int io);
二、 任务队列函数的创建和调用
1. 事件函数实际是在操作系统函数中实现参数的传递,由此原理可以轻松的创建事件任务和实现事件函数的控制回调。
2. 重要函数:
a): 创建新的队列
int aos_queue_new(aos_queue_t *queue, void *buf, unsigned int size, int max_msg);
b): 创建新的任务
int aos_task_new_ext(aos_task_t *task, const char *name, void (*fn)(void *), void *arg, int stack_size, int prio);
c): 向队列传递参数
int aos_queue_send(aos_queue_t *queue, void *msg, unsigned int size);
d): 从队列获取参数
int aos_queue_recv(aos_queue_t *queue, unsigned int ms, void *msg, unsigned int *size);
先创建队列和任务,外部使用队列传参,任务中获取队列数据实现事件处理。
二、 任务建立以及GPIO设置实现任务控制gpio
1. 先创建任务(可以附加队列的创建)
重要函数:aos_task_new_ext aos_queue_new
aos_task_new_ext 用于实现任务创建。
aos_queue_new 用于创建队列,实现参数传递。
注意事项: 创建任务时注意空间大小,过小会导致任务创建失败。
2. 实现任务函数
重要函数 silan_io_output silan_io_set_value aos_msleep aos_queue_recv
silan_io_output 设置io为输出模式
silan_io_set_value 设置io输出的值
aos_msleep 延时(由于io一般用于实现时序逻辑,故延时函数时必须的)
aos_queue_recv 获取消息队列值(用于函数间消息共享或实现跨任务控制)
注意:使用io控制函数需要包含头文件 silan_gpio_source.h
3. 初始化任务: 在主函数中调用GPIO_task_init();即可。
三、 测试
时序延时100ms电平翻转
串口传输正常,测试结束。
三、下次目标
下次实现高级使用:唤醒词条,以及功能实现。
文章转载自:平头哥芯片开放社区 作者:辰玖