本帖最后由 libai500 于 2022-1-12 14:29 编辑
上文链接 (出处: 好好搭搭论坛) 在上一篇帖子中,笔者写了一个关于串口与定时器配合的小程序,图形程序片段如下:
对于初学者来说,上图测试成功后,内心无疑毫无悬念。但对于专业人员来说,会提出很多疑问。 比如:定时器0被用作定时器中断,串口1波特率用什么产生?程序中并未说明用了什么定时器来产生波特率,会不会与定时器0冲突?再者,如果选用定时器1为定时器中断,会不会与串口1的波特率定时器冲突?图形程序中完全没有诠释这些细节。 实际上,当程序员有意关注这些细节时,可以采用源代码查看,来知晓这些细节,这一操作,具有专业性,只要程序员关注,天问Block就会提供答案。下面讲述如何得知串口1设置细节(当然,天问Blick手册无疑会解释这些细节,我们只是从另一个专业角度上去解释在不看编程手册的情况下,如何获得串口设置细节)。
第1步:如何从代码上获得串口1初始化细节 我们先添加一个注释,在寄存器操作菜单中,选择一个代码框指令 如下图 如下图,将代码框嵌入串口中断初始化前面,填写这句注释代码的目的,是便于在代码库里查找这句初始化代码。 我们填写为:我的串口初始化如下
第2步:切换到字符编程模式(即:代码模式 如下图,点击字符模式) 如下图,我们切换到了字符编程模式,很快在代码中找到了那句:我的串口初始化 那么,下面一句uart_init函数就是那个串口初始化函数。 我们需要得知这个uart_init函数都做了什么,启用的什么定时器作为波特率发生器,可以鼠标指向该函数名,右键弹出辅助菜单。如下图(注:并不是所有关键字、函数、变量都能右键跳转,只有出现在lib或mylib文件夹中的代码文件,才能实现跳转,但这不重要,以为我们可以查找不在上述文件夹中的文件,进一步获得其信息) 选择跳转,自动弹出了代码编辑器。 如下图,我们在编辑器中锁定到了uart_init函数的定义与细节,天问Block写了解释,记录如下: 串口1可以使用定时1,也可以使用定时器2,作为波特率发生器。 第3步:翻阅uart_init函数代码细节 如下图,我们看到,定时器选择,实际上由tim_n参数决定,当tim_n=TIM_2时,启用定时器2作为波特率发生器。 我们返回字符编辑模式,查看我们的uart_init函数是如何调用的,定时器选择参数怎么设置的,发现这个参数为TIM_1。 如下图,TIM_1前面是9600波特率常数,也就是说,图形指令没有提供tim_n参数的选项,被固化为TIM_1。 用老方法,我们果断的查阅TIM_1的定义 如下图 如下图,发现TIM_1在枚举中,实际上代表1,那么TIM_2就代表2 再返回去代码编辑器中看看uart_init中源代码,也就是tim_n=2,就可以启用定时器2 如下图: 我们返回字符模式,决定改写TIM_1为TIM_2,但方法很多。我们采用一种柔和的方法,在图形模式里修改,保持图形的完整性。因此我们拷贝下面的uart_init函数语句
第3步:用图文混编形式改写图形代码 如下图,我们先禁用不在需要的uart_init图形代码,当然,删除也行。 将拷贝好的uart_init文本代码,粘贴入代码框内,并改写TIM_1为TIM_2 见下图 第4步:欢天喜地的尾声 怎么报错?main.c文件第25行,TR0有错 我们切换到字符模式,查看main.c25行,原来是前面第24行少了分号,导致25行报错。 如下图 回到图形模式,添加分号。在编译,0错误0警告 由此,我们描述了天问Block是如何编辑代码,并配合图形模式编程的。 要注意的一点是:天问图形程序源文件,只有main.c一个文件,天问字符模式是针对main.c的,因此其他的工程文件,一律是由另外的代码编辑器来查看和编写,不能使用图形编辑。这也就意味着,图形模式仅有一个mian.c文件。所以,对于专业人员,我们使用天问Block应该珍惜这个main.c文件,善用它,构建好工程结构框架。对于初学者,尽可以糟践main.c,尽情玩耍。 至于代码编辑操作,初学者估计已经晕了,但这不重要,重要的是表明了天问Block可以为专业人员提供他们需要的形式,来完成复杂工程。 在前面所述的代码编辑器中,程序员可以随意添加编辑代码,也可以通过#include语句,添加任何新的文件,把偶偶C文件,H文件。编辑后保存,可以立即从主画面进行编译,并导出新的HEX文件。在此种形势下,图形页面实际上变成了一个快速构建工程结构的工具,并且提供给程序员几乎所有引脚的下拉索引还有片上资源的基本基本操作与初始化,当然,因为图形模式连接接着庞大并不断更新的云扩展库,这一切都大大减轻了专业程序员工作量; 因此,天问Block并非玩具。只是操作门槛很低,便于初学者入门,有助于初学者对编程产生兴趣,由浅入深。 (下一篇)
|