【中科蓝讯AB32VG1 RISC-V板“碰上”RTT测评】二:按键控制led闪烁
[复制链接]
本帖最后由 数码小叶 于 2021-4-7 21:28 编辑
对于基础的led、按键这些外设,可以用rt_thread抽象的pin设备,在I/O设备模型中,rt-thread已经处理好了不同硬件的底层部分,用户直接专注于上层应用。在pin设备中,rt-thread给出了六个设备管理接口函数来访问和操作 GPIO资源
对于目前的AB32VG1 RISC-V开发板,rt-thread的支持情况如下(ADC\RTC最新包已经支持)
但是实际测试,对于GPIO的中断操作,目前还是不支持的,所以按键还是只能用扫描的方式进行。
开发板连接了三个按键,S1、S2、S3,S1作为复位按键,实际用户可操作的就S2和S3了,S4没有焊接,焊接后可以使用。
首先,新建一个按键工程,工程实现效果是用S3点亮led,S2熄灭led
然后在工程中新建两个文件,key_led.h\key_led.c,再建一个线程,负责按键扫描处理。在key_led.c中编写线程入口函数和启动线程
void key_led_entry(void *parameter)
{
while(1)
{
if(rt_pin_read(key_s3)==0)
{
rt_thread_mdelay(2);
if(rt_pin_read(key_s3)==0)
{
led_state =1;
}
}
if(rt_pin_read(key_s2)==0)
{
rt_thread_mdelay(2);
if(rt_pin_read(key_s2)==0)
{
led_state =0;
}
}
rt_thread_mdelay(20);
}
}
void key_led(void)
{
tid_key = rt_thread_create("key_led",
key_led_entry,
RT_NULL,
THREAD_STACK_SIZE,
THREAD_PRIORITY,
THREAD_TIMESLICE);
if (tid_key != RT_NULL)
rt_thread_startup(tid_key);
}
这里的THREAD_STACK_SIZE不知道设置多少,可以随便设置一个,最后根据实际占用的大小再来调整。
程序下载完成后,可以看到线程已经成功运行,并且可以看到线程栈的利用率
这里占用的73%是调整后的效果,算是比较合适的了
按键控制LED亮灭效果,按键没有抖动。虽然不是利用中断方式,但是是独立的线程,相比裸机程序,程序的执行效率要高很多,程序不存在死等的资源浪费。
实现了按键控制led开关,还可以很容易的实现按键控制闪烁频率,S3使闪烁变慢,S2使闪烁频变快
|