建议提供的范例再多些注释
本帖最后由 xxkj2010 于 2023-1-14 11:48 编辑STC提供的范例为我们使用STC单片机提供极大的方便,但在实际应用中,发现注释偏少。
对于初次到手的芯片,在寄存器超多的情况下,对每个寄存器的定义、配置要一个一个地看手册,一个一个地研究,的确很浪费时间,所以大家首选的方法是使用公司提供的范例,然后根据需要再修改范例,以实现自己所需要的功能。
但在使用范例中,发现一个问题,就是注释偏少。对于注释偏少的范例,大佬一般没什么,不觉得看代码很累,但对于我们这些菜鸟来说,的确很辛苦。例如本人前两天使用 STC8H8K64U-DEMO-CODE\61-CDC(Communication Device Class)协议范例,这个范例是将USB配置成虚拟串口,实现PC端向USB-CDC发送数据时,这些数据会转发到串口2,但在实际中P10 P11引脚没有串口输出,结果分析范例,才发现在uart_init()中,串口2的引脚被影射到P46 P47,于是将P_SW2 |= 1;注释掉,随即P11引脚输出了串口数据。幸好 P_SW2 |= 1; 后面有注释// UART2 switch to: 1: P4.6 P4.7,这真的为我们阅读代码提供极大的方便。
但又想将这个范例改成电脑向USB-CDC发送数据,然后单片机又通过USB-CDC虚拟串口向电脑端原数据返回,想看看是哪个函数或哪些语句实现这个功能,在没有注释的情况,仿佛发现有下面这些代码段可以实现数据原路返回:
IE2 &= ~0x80; // EUSB = 0;
UsbInBusy = 1;
usb_write_reg(INDEX, 1);
cnt = 0;
while (TxRptr != TxWptr)
{
usb_write_reg(FIFO1, TxBuffer);
cnt++;
if (cnt == EP1IN_SIZE)
break;
}
usb_write_reg(INCSR1, INIPRDY);
IE2 |= 0x80; // EUSB = 1;
各位大佬,以上看法,有不对的请多多指教,谢谢!
既然是初学,建议多看看手册,手册里的范例程序比ISP里面的的范例程序注释多一些。
手册看多了,问题就少了,这是我的一个体会,我也是一个初学者,愿与你共勉。 康辉55AA 发表于 2023-1-16 15:24
既然是初学,建议多看看手册,手册里的范例程序比ISP里面的的范例程序注释多一些。
手册看多了,问题就少了 ...
当然一定要看手册的,否则看代码也不知道是什么意思、什么道理。
我看USB中断程序,就是一边看代码,一边查找寄存器,再看该寄存器的功能与应用,最后再自行注释,这样花费很多的时间。
如果有注释,我们看手册方向性比较强。这样是辛苦一人,方便大家。 本帖最后由 晓奇 于 2023-4-11 19:51 编辑
抓住不熟悉的寄存器、特殊位搜索手册就是最快的学习过程,等到把一个陌生的程序注释一遍以后你会发现“原来是这样”;p
读CDC虚拟收发,最好的例程是那个虚拟示波器接口的那个STC32G12K128-DSO-USB-CDC-PC-480x320-V2-opencode-20220819
花一点时间把里面的示波器部分去掉找出他与电脑间的联系,这里的收发非常清晰,我做了一点注释,给你做个参考。
我喜欢独立的代码,不喜欢用lib,没用的东西背了一大堆,所以想办法找可以抽出来的cdc代码。
32G的简单转换修改一下寄存器的表示形式,做了8H的代码
正在学习USBCDC串口通信,对批量接收数据和批量发送数据还是没有搞明白。
发送和接受感觉超过64字节后就不对了。 stc相对其他单片机官方友好多了 也建议官方多增加注释,这样不但方便了初学者,其实最终还是有利于官方的。
持续补充
{:4_165:}{:4_165:} 建议不熟悉的人,选择STC库的代码后先自己边看边注释,将每条语句都注释完。完成后你会发现,这样才是读懂了。当然也可能注释错了,不管怎样这样学到的东西最多、最扎实!
页:
[1]