一、多任务点灯RGB
hello world!hello led!
对于开发板,点灯似乎再平常不过了;对于学习操作系统来说,点灯也是必不可少。那么就LED闪起来吧!
1、首先,看看RGB灯原理,及与CH2601的管脚连接关系。RGB一体灯采用共阳极性,低电平点亮,高电平或悬空熄灭。
2、下载原始RGB灯测试程序“ch2601_rgb_marquee_demo”,保证库齐全,编译无错,程序可运行。在此模板基础上改为多任务,一个任务负责点一个颜色的灯。
将“app_config.h”中配置RGB灯械的两个宏定义全部注释掉,不需要了。
修改“demo_task()”函数如下图。注释掉“led_pinmux_init()”、“led_refresh()”,修改“udelay(1000 * 1000)”,用“aos_msleep(1)”替换。之后如果要用lvgl驱动oled显示的话,“lv_tick_inc(1)”非常重要,需要保留。
定义csi_gpio_pin_t r。在led_r_task()任务中依次,“csi_pin_set_mux(PA7, PIN_FUNC_GPIO)”复用PA7为GPIO功能;“csi_gpio_pin_init(&r, PA7)”初始化关联r到PA7;“csi_gpio_pin_dir”设置r管脚为输出方向;“csi_gpio_pin_write”设置r管脚初始态为高(即led灭)。第一个aos_msleep(100),初始等待100ms;第二个aos_msleep(000),零延时,立即进入while循环;在while中实现,r灯亮0.5s,灭0.5s,等待其它任务2s。
同理,开启任务“led_g_task() ”、“led_b_task()”。与前面的“led_r_task()”不同之处在于第二个aos_msleep延时分别设置为1s、2s。相信大家应该知道要做什么了,——没错,就是在3秒之内,R、G、B三个灯依次闪亮一次,循环下去。
声明任务函数,在主函数中添加3个任务,任务简单,栈不需要太大,开1024足够用了。
至此,程序代码全部修改完毕,编译下载到板卡,运行看效果。
3、3任务控制分别R、G、B三个灯依次闪亮。程序运行效果见视频
4、源代码附上:
本帖最后由 gs001588 于 2022-6-20 23:42 编辑