完善资料让更多小伙伴认识你,还能领取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 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15709 浏览 1 评论
13762 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19683 浏览 2 评论
59133 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88238 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
788浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
685浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 05:07 , Processed in 0.538430 second(s), Total 69, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号