完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
本帖最后由 烟花雾雨 于 2021-12-26 11:48 编辑 【1024平头哥开发套件体验】- sc5654 中级使用 基本功能 任务 队列 建立与调用 一、 基本功能控制 1. LED控制 a) 文件位置: app_led.c
事件中会调用根据不同事件调用led状态函数 void app_set_led_state(intstate) // 文件app_led.c中实现 led状态函数中最终会调用 led_control(led_dev,COLOR_BLACK, a, b); //其中led一直循环执行,a表示亮灯时间,b表示熄灭时间,单位为毫秒。 b) 控制方式: aa:可以直接调用led_control设置LED状态。 bb:修改事件对应内容,实现不同事件下LED状态切换。
2. KEY控制 a) 文件位置:app_key_user.c 按键获取为两种,短按和长按,在按键初始化中设置各个按键,连接回调函数。 按键初始化函数:static voidbutton_task_init(void) 初始化分为2步:1按键初始化 2 键值事件连接。 第一步,初始化按键引脚:
第二部,键值事件连接
b) 控制方式: Aa:使用结构体button_evt_t来控制按键id,获取方式,长按时间 id:button_id 获取方式:event_id (BUTTON_PRESS_LONG_DOWN长按 ,BUTTON_PRESS_UP短按) 长按时长:press_time 单位:毫秒 Bb:连接回调函数: intbutton_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为一个事件控制函数,用来给事件传递参数,控制事件发生类型。 事件函数实现函数:
c) 修改:可以修改对应回调函数实现每次按键按下功能,也可以修改回调函数,实现按键不同功能。 3. GPIO 控制 a) 文件位置 Package -> chip_sc5654 -> driver -> silan_gpio_source.c b) 控制方式 Aa:包含头文件 #include ”silan_gpio_source.h” Bb:设置io模式 voidsilan_io_input(int io); voidsilan_io_output(int io); voidsilan_io_direction(int io, int dir); Cc:设置io电平 voidsilan_io_set_high(int io); voidsilan_io_set_low(int io); voidsilan_io_set_value(int io, int val); Dd:获取io电平 intsilan_io_get(int io); 二、 任务队列函数的创建和调用 1. 事件函数实际是在操作系统函数中实现参数的传递,由此原理可以轻松的创建事件任务和实现事件函数的控制回调。 2. 重要函数: a):创建新的队列 intaos_queue_new(aos_queue_t *queue, void *buf, unsigned int size, int max_msg); b): 创建新的任务 intaos_task_new_ext(aos_task_t *task, const char *name, void (*fn)(void *), void*arg, int stack_size, int prio); c):向队列传递参数 intaos_queue_send(aos_queue_t *queue, void *msg, unsigned int size); d):从队列获取参数 intaos_queue_recv(aos_queue_t *queue, unsigned int ms, void *msg, unsigned int*size); 4. 步骤: 先创建队列和任务,外部使用队列传参,任务中获取队列数据实现事件处理。 二、 任务建立以及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 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
重芯云集· 锁定北京|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 18:50 , Processed in 0.728889 second(s), Total 69, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2504
