【平头哥RVB2601开发板试用体验】关于如何从上位机读入键盘数据的探索

简介: 关于如何从上位机读入键盘数据的探索

作者 | 陈振哲


背景

想必大家拿到RVB2601都会跑一下自带的helloworld例程,其中消息是通过LOGD函数打出的。

 LOGD(TAG, "test! YoC"); 


与此同时,由于带了stdlib库,printf函数也是可以使用的,可以正常地在putty上打印出消息来。但是如果我们如果与上位机交互,scanf是无法使用的。


值得注意的是,如果有与我一样用putty连接RVB2601的朋友们,会碰到在虚拟串口窗口上打不出字的情况,可以在putty的configuration中找到connection-serial-flow control,putty默认用的是XON/XOFF,将其改成None即可。

1.png


使用cli_getchar的尝试

接下来就可以处理读取数据的函数,常用的scanf()函数在这里是没有定义的,只能考虑从uart获取数据,uart_getchar()函数于此也是不可用的,如果从头写一个从uart获取消息的功能需要设计到很多方面。由于并没有现成现成的资料,群中的清欢老师建议参考cli中cli_adapt.c中cli_getchar函数,定义如下所示。

int32_t cli_getchar(char *inbuf)
{
    uart_dev_t uart_stdio;
    int32_t  ret       = CLI_OK;
    uint32_t recv_size = 0;
    memset(&uart_stdio, 0, sizeof(uart_dev_t));
    uart_stdio.port = CLI_UART;
    ret = hal_uart_recv_II(&uart_stdio, inbuf, 1, &recv_size, HAL_WAIT_FOREVER);
    if ((ret == 0) && (recv_size == 1)) {
        return recv_size;
    } else {
        return 0;
    }
}


这个函数本来是用于输入aos的指令用的,在main.c中直接调用该函数,将数据传入我们自己的字符串能够起到作用,调用如下所示。

    int ret = cli_getchar(&str);
    printf("输入的字符是:%c \n",str);


虽然能读入键盘中的数据,但是考虑到可能是aos的cli部件的一部分的原因,每次总是由aos先吞一个字符,然后输入的第二个字符才会传到我们定义的char中去。

2.png


禁用cli的尝试

这里忙碌的死龙老师建议禁用cli组件,我的理解是在sdk_chip_ch2601包中把cli组件拖出去,如下图所示,但是编译上会产生问题。

4.png


这里一篇博文给了我启发,是不是我们可以从port1获取数据。https://blog.csdn.net/weixin_34120274/article/details/89656272


标准输入输出串口的逻辑端口号必须为0,并不意味着标准输入输出只能通过固定的端。因为这个0指的是逻辑端口,逻辑端口与物理端口存在一个映射关系。在一个由多个串口的芯片上,可以将port0映射到任意的串口。逻辑端口到物理端口的映射是在hal的对接代码中实现的。 以stm32平台为例,其hal_uart_send函数实现如下:


cli中默认的uart端口使用是0,如果我们可以把cli_adapt.c中的头文件与cli_getchar搬到main.c中并指定uart1端口为1是否就能解决问题?


由图下可见,会产生互斥锁的问题,该方案也行不通。

5.png


总结

就目前的进展看,能实现的还是只有cli_getchar函数然后让aos吞掉一个字符的方法能够相对接近实现效果。这个问题的解决本身不很复杂,需要继续探索。


本文源自:平头哥芯片开放社区

欢迎关注公众号:芯片开放社区(ID:OCC_THEAD),查看更多应用实战文章。

相关文章
|
网络协议 数据安全/隐私保护 芯片
|
存储 API 开发工具
【平头哥RVB2601创意应用开发】使用体验02 -- KV存储
使用KV组件在RVB2601进行项目参数的本地持久化。
582 0
【平头哥RVB2601创意应用开发】使用体验02 -- KV存储
|
网络协议 物联网 数据处理
【平头哥RVB2601开发板试用体验】AT 解析器和通过w800 AT命令接入阿里云生活物联网平台
RISC-V RVB2601 Yoc 实现和测试验证阿里云平台接入的等相关功能,同时去了解YoC中网络设备和AT解析器框架。
698 0
【平头哥RVB2601开发板试用体验】AT 解析器和通过w800 AT命令接入阿里云生活物联网平台
|
存储 JSON 数据格式
【平头哥RVB2601创意应用开发】疫情播报系统应用
实现通过网络读取json数据,进行分解,针对数据字符,播放相应的mp3音频文件,并在OLED屏幕上显示实际对应数据的疫情播报系统。
224 0
【平头哥RVB2601创意应用开发】疫情播报系统应用
|
机器学习/深度学习 人工智能 算法
|
存储 边缘计算 固态存储
玄铁RISC-V处理器入门与实战-平头哥玄铁CPU IP-面向高性能领域CPU
玄铁RISC-V处理器入门与实战-平头哥玄铁CPU IP-
1485 0
|
供应链 芯片
平头哥芯片采用的RISC-V架构
平头哥芯片采用的RISC-V架构
355 1
|
物联网 开发工具 开发者
玄铁RISC-V处理器入门与实战-平头哥RISC-V 工具链-剑池CDK开发工具
玄铁RISC-V处理器入门与实战-平头哥RISC-V 工具链
392 1
|
人工智能 负载均衡 安全
玄铁RISC-V处理器入门与实战-平头哥玄铁CPU 系统-YoC
玄铁RISC-V处理器入门与实战-平头哥玄铁CPU 系统
526 1

热门文章

最新文章