wuzhengmin 发表于 2025-11-16 19:39:42

这里必须重视“硬件在线调试”


这是软件在线调试无法替代的

在Keil μVision里新建立一个项目(过程略):

工程目标(Project Target)表示配置设置的集合

Project: demo 里的Target 1实际是工程里的分组,在工程里对不同的组Target有不同的配置。



就是图二里:每一个Target,可以有不同的Options for Target 'Target 1'

wuzhengmin 发表于 2025-11-16 19:45:41

这样就是对同一项目来分组,不同的组有不同的运行参数,都可以在Keil μVision 里设置

这样可以对比不同的运行参数,对工程项目运行的影响。

这里组Targets:的添加或者删除见下图:

wuzhengmin 发表于 2025-11-16 20:06:10

在这个界面也可以根据文件的功能排列文件,或创建表示软件团队的组

就是有文件组(File Group)的概念,将文件排列成逻辑块


就是同一个Target   中我们还可以将文件分组

wuzhengmin 发表于 2025-11-16 20:17:25

点击Target 1,点击鼠标右键,出现浮动菜单:

选“Options for Target ' Target 1'... Alt+F7”



接着选:“Device”


首先确定我们MCU的型号

接着选:Target,见下图


wuzhengmin 发表于 2025-11-16 20:27:24

先看CPU Mode: CPU的模式有2个,一个是二进制模式Binary (8051 compatible),

另一个是源模式Source (251 native):正常情况,我们用STC32G系列,肯定是用源模式Source (251 native)







wuzhengmin 发表于 2025-11-16 20:36:27

Memory Model:


这里有5个选择:见下图

其实我在Debug里看过,目前我的环境,好像和何老师不同

我这里5个选项基本没发现机器代码有区别:

我们直接按照STC手册的选项:选择XSmall: near vars, fa const, ptr-4

wuzhengmin 发表于 2025-11-16 20:39:50

接着Code Rom Size:选项,我们按照手册

选择---Large: 64K program



wuzhengmin 发表于 2025-11-16 20:58:30

下面何宾老师举例说明:


写一段C语言代码,把Memory Model设在不同选项,看看有什么差别?

void main()
{
volatile int a=1000,b=5000;
volatile int *d, *e;
volatile int *f;
d=&a;e=&b;//d取a的首地址,e取b的首地址
*f=a+b;//把a+b的结果送到f变量所指的存储单元里去
       
}建立项目,把上面的代码作为主程序,反汇编一下:

就能看出存储器里有没有这些变量!

编译器是设置不同,细节就不同:


--Memory Model Tiny在微型存储器模型中。默认,所有变量都驻留在MCS-
251 ISA兼容单片机的内部数据存储器中,就好像它们是使用数据存储器类型说明符显式声明的一样在该存储器模型中,变量和指针访问非常有效。默认,指针大小仅为2个字节,表示近(near)存储器的指针。常数保存在NCONST存储器类中。使用HOLD命令,可以将指定对象大小以上的变量定向到其他存储器区域。
通常,如果将链接器/定位器配置为覆盖内部数据存储器的变量,则Tiny模型是最好的模型



wuzhengmin 发表于 2025-11-16 21:01:31

反汇编一下:

wuzhengmin 发表于 2025-11-16 21:03:37

我自己机器上反汇编的结果:



和何老师的区别很小:
页: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18
查看完整版本: 跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128