找回密码
 立即注册
楼主: wuzhengmin

跟着何宾老师学习STC32位8051单片机原理及应用-STC32G12K128

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 19:39:42 | 显示全部楼层
这里必须重视“硬件在线调试”


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

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

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

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



就是图二里:每一个Target,可以有不同的Options for Target 'Target 1'
截图202511161929536673.jpg
截图202511161931574609.jpg
截图202511161938262844.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 19:45:41 | 显示全部楼层
这样就是对同一项目来分组,不同的组有不同的运行参数,都可以在Keil μVision 里设置

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

这里组Targets:的添加或者删除见下图:
截图202511162002276213.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:06:10 | 显示全部楼层
在这个界面也可以根据文件的功能排列文件,或创建表示软件团队的组

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


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

截图202511162004203671.jpg
截图202511162009299634.jpg
截图202511162010032886.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:17:25 | 显示全部楼层
点击Target 1,点击鼠标右键,出现浮动菜单:

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



接着选:“Device”


首先确定我们MCU的型号

接着选:Target,见下图


截图202511162013127912.jpg
截图202511162015166307.jpg
截图202511162016488556.jpg
截图202511162019252732.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:27:24 | 显示全部楼层
先看CPU Mode: CPU的模式有2个,一个是二进制模式Binary (8051 compatible),

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







截图202511162024016605.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:36:27 | 显示全部楼层
Memory Model:


这里有5个选择:见下图

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

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

我们直接按照STC手册的选项:选择XSmall: near vars, fa const, ptr-4
截图202511162036186974.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:39:50 | 显示全部楼层
接着Code Rom Size:选项,我们按照手册

选择---Large: 64K program



截图202511162039431098.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 20:58:30 | 显示全部楼层
下面何宾老师举例说明:


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

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

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

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


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



回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 21:01:31 | 显示全部楼层
反汇编一下:
截图202511162101268013.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-04-08 10:46:34
已绑定手机

22

主题

2458

回帖

3488

积分

论坛元老

积分
3488
发表于 2025-11-16 21:03:37 | 显示全部楼层
我自己机器上反汇编的结果:



和何老师的区别很小:
截图202511162103351110.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-10 01:05 , Processed in 0.120711 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表