libai500 发表于 2022-1-12 14:25:40

查看天问的51单片机程序编译报表和内存报表

本帖最后由 libai500 于 2022-1-12 14:51 编辑

https://haohaodada.com/new/bbs/f ... d=475&fromuid=66537]为什么说天问Block并非玩具 https://haohaodada.com/new/bbs/f ... d=475&fromuid=66537
接自上一篇

本篇介绍一下天问Block中编写51单片机程序,如何查看编译器结果详细数据,包括内存使用情况和编译详情。
虽然教学视频中详述了各种知识,但我们依然从学习角度上,再次描述一些操作手法。
第一步,我们先写一个小程序。一如既往,先选择设备
如下图,我们选择STC8


第二步,选择一个普通简单案例作为示范
我们选择P4_1输出电平,最简单的GPIO操作

选择案例后,程序被自动加载到页面上,如下图,非常简单的一个程序

因为天问初始化指令是针对外部晶振的,我们用的是内部晶振,还是习惯的禁用初始化
如下图

并改用直接的自动以晶振指令

选择好一个频率,这个频率要和最终单片机频率一致。

选择字符程序查看,程序也很简单,


程序设置了一个时钟变量,端口模式设定,还有端口置位为1的操作,如下图:
(题外话:晶振频率作为变量sys_clk出现时,专业人员肯定认为会引发由程序来计算一些时间基准数据,而并非编译器负责计算,这会让程序负担加重,实际上天问Block有一些底层服务脚本,来负责计算一些数据,并不一定在用户代码中,真正启用这个变量来增加MCU运算负担。有兴趣的朋友,可以仔细测试观察。专业人员也自然会知道如何取舍)

第3步 编译这个程序,如下图
我们发现除了显示编译成功,并没有其他的信息,包括内存使用情况都没有
如下图

第四步,直接从天问文件夹内找到报表文件
报表实际上就在天问安装目录里,路径是
天问Block\twen\out\
这个路径下有如下文件,main.lst和main.mem,见下图

我们先用记事本打开main.men,如下图

上图中,R寄存器占用了8个字节,另有4个字节被程序占用(这四个字节应该就是那个32位的sys_clk变量占用了)具体情况下面汇编报表里也有明确报告,时间因素,我就不截图了)。因为程序很小,其余从0x0C开始,全部data归属于栈使用
ROM使用情况同样,因程序很小,仅使用了135字节,其中大部分是一些初始化代码
那么这程序代码详情在哪,我们看下一个文件main.lst。如下图

上面仅为主要任务部分的代码的截图,STC8端口模式设置,以及端口置位操作,一目了然。
机器码,汇编,C语言对照,都有据可查。即时行业顶级高手,也无非是需要最终获得这些资讯来判断编译器优劣并分析如何优化与改善C代码。
上面文章相关阐述,接近专业性,本人才疏学浅,也仅仅是向还不了解或初次使用天问Block的玩家说明这些信息如何直接获得,至于信息内容具体说明什么,各路高手自有分说,我就不班门弄斧了。

待续


cocotan2009 发表于 2023-4-3 10:11:58

以sys_clk变量为基数的时钟计算必须编译器干,不会到程序中再计算。出楼主挖掘的很深,根都刨出来了,

mhxsoft 发表于 2023-5-27 09:03:07

编译时如何把变量默认编译到xdata(EXTERNAL RAM)上去?
页: [1]
查看完整版本: 查看天问的51单片机程序编译报表和内存报表