垂柳工作室 发表于 2025-9-19 13:11:16

学用STC公司AI8051U芯片讲义4

新学期伊始,不忘助力国产替代初心,手头没有试验箱,先用“擎天柱”带领大一同学,跟随冲哥视频,学用STC AI8051U芯片讲义。 第四节,自动生成多文件项目代码,温习C/C++语言本节课任务是学用AICube自动生成程序,温习c语言变量作用域一、更新STC烧录工具和USB库,自动生成项目文件1. 下载资料。STC烧录工具最新版是AiCube-ISP-V6.96C,USB最新库文件是20250716版;AiCube-ISP-V6.96C下载地址:https://www.stcaimcu.com/data/download/Tools/AiCube-ISP-v6.96C.zip2. 更新更新keil头文件。解压运行烧录工具(AiCube-ISP-V6.96C.exe),按下图顺序操作找到keil安装目录(keil_v5),更新头文件。
3. 打开AiCube自动生成项目代码。参考下图顺序,点击启动烧录工具AiCube.设置好单片机型号、项目名称、保存路径,这里项目类型设置为多代码文件项目。
点击确定后,勾选USB,通用串行总线和TIMER0,定时器0选相框,USB库函数设置“与printf函数关联”为是。
定时器0开启中断使能,如下图,点击自动生成代码按钮弹出提示项目创建成功提示,再点确定后会关联启动keil打开所生成的项目文件。
AiCube自动生成的项目包含三个c文件和usb库,查看各个文件内容,发现大量注释,分门别类提示放置用户的变量、函数,包含头文件等等,点击编译,编译器提示0错误0警告。足见AiCube功能强大方便。在看代码时,遇到不清楚函数、变量等,可鼠标右键点击追溯函数、变量定义,具体操作参考下图。
二、温习验证c语言变量生命周期1. 移植AI8051U实验箱多任务代码。个人觉得官方推荐的实验箱代码:27-通过定时器周期性调度任务综合例程相当好。先拷贝其中Sources\src\Task.c和Sources\inc\Task.h到demo项目相应目录下。对照我刚才AiCube自动生成的项目,Task.c拷贝到G:\STCproject\AI8051U_PROJECT\demo\Sources\目录下,Task.h拷贝到G:\STCproject\AI8051U_PROJECT\demo\Sources\inc目录,下,路径可参考下图。
2. 将Task.c添加到项目中。展开demo,鼠标右键点击AiCube添加现存文件task.c,参考下图操作。
3. 主函数添加代码。main.c文件要在13行#include "config.h"下面添加一句,#include "Task.h",即包含了Task.c的头文件,在第49行“在此添加主函数中用户主循环代码”下一行添加任务处理回调函数Task_Pro_Handler_Callback();备注:Task.c任务函数功能请参考上一节课解析。
4. 添加任务函数和变量。task.c文件添加一个数组变量,这里就拷贝27-通过定时器周期性调度任务综合例程app_Display.c文件的t_dispiay[]标准字库数组,定义一个用于验证变量display_index,再定义一个任务函数Test_Demo()驱动擎天柱p2端口led灯。task.h文件申明一下任务函数Test_Demo();timer.c文件第13行#include "config.h"下面添加一句,#include "Task.h";在第61行下面添加一句任务标记回调函数:Task_Marks_Handler_Callback();5. 烧录验证。编译烧录看到擎天柱LED在闪烁,说明task.c文件display_index变量是全局变量,生命周期是程序运行到结束。三、分析理解Keil多文件项目中变量生命周期在C/C++语言中,变量的作用域和链接性是两个独立但相互关联的概念。变量display_index在task.c文件中定义为全局变量,具有外部链接性,只要通过适当的声明,可以在程序的任何地方被访问 。1.作用域(Scope):决定变量在源代码中可见的范围。全局变量在文件顶层定义,作用域为整个文件,函数内部定义的变量作用域仅限于该函数内。2.链接性(Storage Class):决定变量在不同编译单元间的可见性,外部链接(external linkage):默认情况下,未使用static关键字修饰的全局变量具有外部链接性,可在程序各处访问。3.内部链接 internal linkage:使用static关键字修饰的全局变量仅在当前文件内可见。task.c文件中的全局变量display_index没有使用static关键字修饰,因此它具有外部链接性。这使得即使主函数main.c文件未在头文件中声明extern int display_index,也能通过调用task.c文件中的函数Test_Demo()间接访问和修改display_index的值。因为函数Test_Demo()在定义时已经能够访问task.c文件中的全局变量display_index,且函数Test_Demo()的实现代码与display_index的存储位置已建立直接关联。函数Test_Demo()作为task.c文件的接口,封装了对全局变量display_index的操作。其核心机制在于函数封装作用,当主函数main.c文件调用Test_Demo()时,实际执行的是task.c文件中已绑定display_index变量地址的函数代码。函数Test_Demo()的作用域包含task.c文件的所有全局变量,因此可以直接访问和修改display_index的值,无需额外声明。这种机制是C/C++语言设计的基本特性之一,它允许通过函数封装实现对全局状态的修改,同时保持代码的模块化和可维护性。附件内容:课件讲义、程序源代码、擎天柱验证视频

国芯人工智能 发表于 2025-9-19 13:12:00

回复:学用STC公司AI8051U芯片讲义4

尊敬的各位同学、老师,以及关注国产芯片发展的朋友们:

感谢您分享的关于使用STC AI8051U芯片进行教学的系列讲义。作为一款国产嵌入式AI芯片,STC AI8051U在教学和项目实践中具有良好的可操作性和应用前景。本文将围绕您提到的第四讲内容——“使用AICube自动生成多文件项目代码并温习C语言变量作用域”进行简要分析与补充说明,供教学参考。

一、关于AICube工具与项目自动生成

AICube是STC为AI8系列芯片配套开发的集成开发环境(IDE)与代码生成工具。其核心优势在于能够通过图形化配置界面,自动生成结构清晰、模块化良好的C语言项目代码,极大地提升了开发效率,尤其适合教学场景中帮助学生快速上手并理解项目结构。

在第四讲中,建议教师引导学生重点关注以下几点:

1. 熟悉AICube的界面布局与功能配置;
2. 掌握通过配置寄存器或功能模块来自动生成代码的基本流程;
3. 理解生成代码的文件结构,包括主程序文件(main.c)、头文件(.h)、启动文件(startup.s)等;
4. 学会如何在生成代码基础上进行功能扩展与调试。

二、C语言变量作用域温习建议

在多文件项目开发中,变量作用域的理解至关重要。建议教师在教学过程中重点讲解以下内容:

1. 局部变量与全局变量的作用域与生命周期;
2. 静态变量(static)与外部变量(extern)的使用场景;
3. 多文件项目中如何通过头文件共享全局变量;
4. 变量命名规范与模块化设计原则。

三、教学实践建议

针对大一学生初学嵌入式系统的特点,建议采用“讲练结合、循序渐进”的教学方式:

1. 通过AICube演示如何生成一个LED闪烁或按键检测的完整项目;
2. 引导学生观察生成代码的结构,理解各模块之间的调用关系;
3. 布置小任务,如修改变量作用域、添加新功能模块等,以加深理解;
4. 鼓励学生尝试阅读生成代码中的底层驱动部分,为后续深入学习打下基础。

四、国产替代与教学融合的思考

在当前国产替代加速推进的背景下,STC AI8051U作为一款具有AI加速能力的8051内核芯片,其在教学中的应用不仅有助于学生掌握嵌入式开发的基本技能,更能在潜移默化中增强学生对国产技术的信心与认同感。

希望贵校在“擎天柱”教学平台的支持下,结合冲哥视频教程,能够持续推动国产芯片在高校教学中的普及与应用,为培养具有自主创新能力的新一代工程师贡献力量。

如有技术问题或教学资源需求,欢迎联系STC官方技术支持或访问其开发者社区。

祝教学顺利,成果丰硕!

国芯人工智能
2025年4月5日

[本文内容由国芯人工智能辅助生成,仅供参考]

小飞侠 发表于 2025-9-19 13:26:46

介绍的比较详细,适合初学者入门

西西研究员 发表于 2025-9-19 14:01:02

请不要重复开贴,逐级在下面回复即可,感谢配合谢谢支持!!!

垂柳工作室 发表于 2025-9-19 14:18:39

好的,帖子是大一新生帮忙挂网的,我回去提醒同学,谢谢。

西西研究员 发表于 2025-9-19 15:26:37

垂柳工作室 发表于 2025-9-19 14:18
好的,帖子是大一新生帮忙挂网的,我回去提醒同学,谢谢。

{:hanxiao:}
页: [1]
查看完整版本: 学用STC公司AI8051U芯片讲义4