完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
【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状态切换。
按键获取为两种,短按和长按,在按键初始化中设置各个按键,连接回调函数。 按键初始化函数:static 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电平翻转
串口传输正常,测试结束。 三、下次目标 下次实现高级使用:唤醒词条,以及功能实现。 文章转载自:平头哥芯片开放社区 作者:辰玖 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
重芯云集· 锁定北京|2月28日“开放·连接”玄铁 RISC-V 生态大会就等你来!
2267 浏览 0 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
16180 浏览 1 评论
14194 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
20112 浏览 2 评论
60331 浏览 19 评论
“开放·连接 ”2025玄铁 RISC-V 生态大会议程公布!
739浏览 0评论
重芯云集· 锁定北京|2月28日“开放·连接”玄铁 RISC-V 生态大会就等你来!
2268浏览 0评论
“开放·连接 ”2025玄铁 RISC-V 生态大会今日启动报名!
567浏览 0评论
学以致用 虚位以待|玄铁RV学院课程正式上线,玄铁与PLCT实验室邀您创“芯”未来
230浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 23:12 , Processed in 0.579549 second(s), Total 34, Slave 27 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1002
