完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
HelloWorld demo想必是众多开发者刷入RVB2601(下称RVB)的第一个简单程序,原理非常简单,即通过LOGD函数将消息输出,代码如下所示:
int main(void){ board_yoc_init(); LOGD(TAG, "%sn", aos_get_app_version()); oled_init(); while (1) { LOGD(TAG, "test! YoC"); aos_msleep(1000); } return 0;}实现结果如下所示,本样例通过PuTTY监听COM3串口。 看似只有一行代码,实际上背后由很多的工作需要实现。本篇贴子将从硬件和软件两个层面来解析HelloWorld demo的实现原理 从硬件层面的实现浅析 RVB采用了CP2102 USB-UART桥接器将PC的USB口转换成RS232接口,从而RVB可以通过该物理层使用UART协议传输数据。UART被广泛用于不带显示器的设备,可以将打印的消息传入上位机。 该LOGD产生的数据即通过该接口传入上位机。而作为通用协议,理论上RVB也可以通过扩展的Arduino针脚来传输UART数据,Arduino被映射到一定的内存地址,在RVB上配置UART驱动后,上位机只需要一个虚拟串口设备,通过杜邦线连接即可。 从软件层面的实现浅析 该demo基于YOC平台实现,而LOGD的实现在sdk_chip_ch2601的包中给出,所以直接用vscode打开helloworld文件夹是找不到引用的,需要打开hello_example文件夹,该包在__workspace_pack__sdk_chip_ch2601文件夹中。 我们定位到ulog.c文件,其中实现log打印的函数原型是 int ulog(const unsigned char s, const char *mod, const char *f, const unsigned long l, const char *fmt, ...)我们注意到里面的代码 va_list args;va_start(args, fmt);rc = vprintf(fmt, args);va_end(args);fflush(stdout);printf("rn");其中vprintf接受了需要打印的内容并传递给了yoc__v_printf函数,而yoc__v_printf函数原型如下所示 int yoc__v_printf(struct arg_printf* fn, const char *format, va_list arg_ptr)其中调用了A_WRITE传递参数,而A_WRITE调用了PUT函数,功能是将字符串输出到屏幕 #define A_WRITE(fn,buf,sz) ((fn)->put((void*)(buf),(sz),(fn)->data))至于后续的操作设计到UART驱动的阶段,由于了解甚少,不敢多言。 从编译出的asm可以看出,通过jal指令跳转到了ulog所在的地址 while (1) { LOGD(TAG, "test! YoC"); aos_msleep(1000);1801b712: 18023937 lui s2,0x180231801b716: 6e890713 addi a4,s2,1768 # 180236e8 <_ctype_+0x398>1801b71a: 46dd li a3,231801b71c: 6d448613 addi a2,s1,17481801b720: 6e440593 addi a1,s0,17641801b724: 451d li a0,71801b726: 7dc070ef jal ra,18022f02 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15706 浏览 1 评论
13761 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19682 浏览 2 评论
59126 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88185 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
788浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
685浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:34 , Processed in 0.557444 second(s), Total 65, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号