SIC 实验室23 届第九次学习目标
现在,我们开始了解关于组队参加全国大学生智能汽车竞赛,你还需要具备的前置知识。
前言
本文档内容较长、图片较多,同学们可以访问karubon.moe(慢到可能无法访问)或其镜像站(速度相对快,但还是很慢)获得良好的阅读体验。
全国大学生智能汽车竞赛是本实验室的核心项目,我们过去一个多学期以来所学习的
学习内容
由于编辑匆忙,本文档必然存在不足之处。遇到表述不清的地方还请活用搜索引擎或者发钉钉询问我。感激不尽。
团队协作工具
我们已经知道,这个竞赛并不是可以一人完成的竞赛(或者说如果有这样的实力,我们就不会出现在这里),因此,一个类型的赛题,我们会组成一只小组——通常是两名软件手与一名硬件手协作完成。这就要求我们的软件手们必须掌握协作的能力和工具。
什么,你是两硬一软的独狼软件手?即使如此,学习使用下面的工具依然是极有益的。具体原因会在下面提及。
能力需要慢慢磨合,所以先来掌握工具吧。
Git——版本控制系统
版本控制系统跟踪我们在项目上进行协作时的更改历史记录。当我们对项目进行更改时,可以随时恢复项目的任何早期版本。
我们可以查看项目历史记录以找出:
- 进行了哪些更改?
- 由谁进行了更改?
- 何时进行了更改?
- 为什么需要更改?
在分布式版本控制系统中,每个开发人员都有项目和项目历史记录的完整副本。与曾经流行的集中式版本控制系统不同,分布式版本控制系统(DVCS)不需要与中央存储库的持续连接。
我们在每一个地方上传和下载代码。使用像
由于
使用命令行或其他易用性接口,
受限于篇幅,本文不介绍
现在我们安装它。
访问
安装
在桌面(或者其他文件夹)右键菜单中(可能需要“显示更多选项”)选择
1 | $ git config --global user.name "YourName" |
记得把YourName
和YourEmail@example.com
改成你实际使用的(
--global
参数将使更改是全局性的,之后你在这个系统上的操作都会默认使用此信息。
Gitee 或者GitHub ——代码托管平台
Gitee(码云)是开源中国于
GitHub是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。
通过将代码存储在
- “展示或共享”你的工作。
- 持续“跟踪和管理”对代码的更改。
- 让其他人“审查”你的代码,并提出改进建议。
- 在共享的项目中开展“协作”,无需担心这些更改会在准备好集成更改之前影响协作者的工作。
- 协作式工作是
GitHub 最基本的功能之一,该功能由开源软件Git 实现,而GitHub 是以该软件为基础进行构建的。
其实我会更喜欢
克服众所周知的原因事实上并不困难,使用
GitHub 是可行的,你看到的这个网站正是托管在GitHub Pages 上。
但真正的问题是什么呢?你和你的组员通常需要使用同一仓库完成协作。而且由于
Gitee 和GitHub 储存库的默认分支不同,在两边仓库同时上传的时候可能会有点小麻烦, 虽然这是可以解决的。
注册Gitee 账号
进入
在
创建第一个仓库
在注册完成并成功登录
- 通过网站右上角的「+」号,选择“新建仓库”,进入新建仓库页面。
- 在新建仓库页面填写仓库信息。仓库相关概念说明如下:
- 仓库名称:仓库的名称,用于仓库命名。
- 归属:仓库归属账户,创建成功后该账户默认为仓库的拥有者(管理员
) 。 - 路径:仓库的
git 访问路径,由用户个性地址+ 仓库路径名称组成。创建仓库后用户将通过该路径访问仓库。 - 仓库介绍:仓库的简单介绍。
- 是否开源:设置仓库是否为公开仓库,公开仓库对所有人可见,私有仓库仅限仓库成员可见。
- 选择语言:仓库主要开发用的编程语言。
- 添加
.gitignore :系统默认提供的git 忽略提交的文件模板,设置.gitignore 后将默认忽略指定目录/ 文件到仓库。 - 添加开源许可证:如果仓库为公开仓库,可以添加设置仓库的开源协议,作为对当前项目仓库和衍生项目仓库许可约束,开源许可证决定他人可以如何使用你的这个开源项目。
- Readme:项目仓库自述文档,通常包含有软件的描述或使用的注意事项。
- 使用模板文件初始化仓库:使用
Issue 或Pull Request 文件模板初始化仓库。
- 点击“创建”,即可在
Gitee 上创建你的第一个仓库。
现在,你应该可以看到下面的页面。
提交第一行代码
在创建完仓库之后,我们通过如下方式,向仓库提交第一行代码。
- 方法一、先将仓库
clone 到本地,修改后再push 到仓库
此处我们以用户账号下命名为
在硬盘中你想存放代码文件的位置的右键菜单中(可能需要“显示更多选项”)选择
1 | $ git clone https://gitee.com/用户个性地址/hello-gitee.git #将远程仓库克隆到本地 |
在克隆过程中,如果仓库是一个私有仓库,将会要求我们输入
如果你没有初始化仓库,warning: You appear to have cloned an empty repository.
,但这并不影响我们在当前目录下
打开文件夹,如果你在文件资源管理器中开启了显示隐藏文件和文件夹,这时候你会发现目录下出现了一个.git
文件夹,这个文件夹下储存了
现在我们以新建
在目录下新建一个名为README.md
的文件,通过任意的文本编辑器在文件内输入下面内容:
1 | ### 介绍 |
保存后,相对于原本的空仓库,我们的本地储存库就发生了变动。
现在在仓库根目录下逐行执行下面命令:
1 | $ git add . #将当前目录所有文件添加到git暂存区 |
像这样——
现在,在浏览器上刷新你的仓库页面,你应该能看到你刚刚做出的改动。
什么是
README ?自述文件(英文:Readme
) ,是随着软件发布的一种帮助文档,里面通常包含有软件的描述或使用的注意事项。这种文件通常是纯文本文件,也有RTF 、DOC 或Markdown 格式的自述文件。文件名通常是以大写英文字母组成,这是因为大写字母比小写字母有着较小的ASCII 码,因此在一些以ASCII 顺序来排序文件名称的操作系统里,它会被列在文件列表的第一个。即使这些人没有关于自述文件的知识,这种文件的特殊命名方式也能够使任何人迅速发现。
当你的仓库里存在一个README 文件的时候,Gitee 和GitHub 会在仓库的首页显示这一文件的内容,方便使用者快速阅读它。认真编写README 文件是一个优秀开发者应该养成的习惯。
- 方法二、本地初始化一个仓库,设置远程仓库地址后再做
push
和方法一的差别,在于先创建仓库。
1 | $ git init |
这样就完成了版本的一次初始化。
接下来,进入你已经初始化好的或者克隆仓库的目录
1 | $ git pull origin master |
这个命令会使
修改代码之后:
1 | $ git add . |
如果需要账号密码的话就输入账号密码,这样就完成了一次提交。此时,你可以在你的个人面板、仓库主页查看到你的提交记录。
在新建仓库时,如果在-f
(除非你知道自己在做什么,否则强烈不建议这么做
1 | $ git push origin master -f |
如果想保留线上的文件
1 | $ git pull origin master |
通过VS Code 的图形化页面使用Git
如果你不擅长命令行的操作方式,不妨安装
在开始使用前,确保已安装
Git 。VS Code 将使用计算机上已安装的Git (至少版本2.0.0 ) ,因此在使用这些功能之前,需要先安装Git 。
在左侧的活动栏中,源代码控制图标始终显示当前存储库中有多少更改。选择该图标将显示当前存储库更改的详细信息:变更、已暂存变更和合并变更。
点击每个项目将详细显示每个文件中的文本更改。请注意,对于未暂存的更改,右侧的编辑器仍然可以让您编辑文件:请随意使用它!
您还可以在
现在我们来演示如何通过
初始化仓库和拉取代码
打开一个文件夹,在侧边栏中选择源代码管理。如果文件夹没有初始化当前打开的文件夹中没有Git存储库
。
这时我们选择「初始化仓库
接下来点击“源代码管理”栏右侧的“更多操作键”https://gitee.com/用户个性地址/hello-gitee.git
输入到屏幕正上方的输入框中,按下回车,接着提供存储库名称(这里是hello-gitee
有趣的——在现代,大多数软件或平台的默认分支已经是main
,但master
。这导致[warning] No such branch: main.
现在,我们不得不多执行一步,将工作区的分支切换回master
。
你也可以选择把主分支改为
main
,但这会比较麻烦。
点击“源代码管理”栏右侧的“更多操作键”有云朵标志的hello-gitee/master ********处的远程分支【远程分支】
一栏。
这一操作等价于命令行中的
1 | $ git checkout --track hello-gitee/master |
现在可以点击“源代码管理”栏右侧的“更多操作键”
推送代码
在我们修改了代码之后,需要将其推送(push)到远程储存库,使他人可以查看和下载。
一旦你开始修改代码,
- 红色三角形表示已删除的行。
- 绿色条表示新增的行。
- 蓝色条表示修改过的行。
当我们完成了修改(记得进行保存
点击左侧边栏中任何提示已经更改的文件,将会在主视图中打开差异比较器。
一旦发生合并冲突,
合并冲突指的是在
Git 中,当尝试将两个或多个不同的分支合并时,Git 无法自动决定如何合并它们的改动时所发生的情况。
为了帮助解决合并冲突,
三路合并编辑器显示传入更改(左
三路合并编辑器允许通过接受其中一个或两个变更来解决冲突。也可以手动编辑合并的结果。
对于某些冲突,合并编辑器会显示一个“接受组合”按钮。接受组合会智能地合并两个变更,从而解决当前的冲突。这对于位于同一行但未涉及相同字符的更改特别有用。
使用“忽略”按钮来既不接受传入更改也不接受当前更改,但标记冲突已解决。这会将冲突区域重置为未进行任何更改之前的状态。
可以使用结果编辑器右侧的冲突计数器来跟踪未解决的冲突数量。单击计数器会跳转到下一个未解决的冲突。一旦所有冲突解决完毕,您可以通过在右下角选择“完成合并”来完成合并。这会将文件暂存,并关闭合并编辑器。
当我们解决了合并冲突,就可以正常进行提交。
点击“源代码管理”栏中的“提交”按键,将会在主视图中打开COMMIT_EDITMSG
(提交消息)的编辑页面。
提交消息对于记录代码更改的历史非常重要,因为它们帮助其他开发者理解提交所做的修改。一个优秀的提交消息应该简洁明了地描述你所做的更改,并提供足够的信息,使其他人能够理解为什么这些更改是必要的。
输入提交消息之后,点击右上角的“✓”按钮(接受提交消息
逐飞科技开源库
成都逐飞科技有限公司长期以来是全国大学生智能汽车竞赛的协办单位,为竞赛提供大量的软硬件服务。逐飞科技为竞赛开发的开源库以简洁易懂、容易上手著称。
在之后的日子里,我们会通过实验室内搭载英飞凌
下载开源库
访问逐飞
注意到页面上提供了克隆的方法吧?感兴趣可以试试。
安装开发环境
AURIX™ Development Studio(简称
结合众多的代码示例项目,该
它支持将
以上是官方介绍,但不得不说,AURIX™
使用前务必仔细阅读逐飞科技
安装和使用时的常见问题:
- 工作空间
/ 路径(workplace)不能含有中文。 - 工程文件夹需复制到工作空间。
- 导入的工程需要设为
ACTIVE 状态,若是ACTIVE-DEBUG 则可以正常编译,若是ACTIVE-DEFAULT 不能编译会报错找不到路径。 - 有时候导入空的开源库不行,尝试导入例程就正常,很玄学。
- 添加文件可以直接拖拽,也可以在工程文件夹添加,添加后需要
refresh 。 - 编译成功不代表能正常烧录,需安装
DAS 驱动,且正常显示为tricore …才可以。
开源库结构简介
感觉这一小节写得很烂?是的,我也这样认为。
1 | ./Seekfree_TC377_Opensource_Library |
逐飞其他芯片的开源库结构大同小异。
通常来说,想要了解一个程序,我们应该从程序的进入点cpu0_main.c
开始。
GPIO
GPIO(General-purpose input/output
学习任务
各组在
参考
尝试烧录到学习板中运行。将所有源代码上传到仓库中。并在
参考资料
GitHub 官方文档(https://docs.github.com/zh/get-started)Gitee 帮助中心(https://gitee.com/help)
Pro Git(https://git-scm.com/book/zh/v2)VS Code 官方文档(https://code.visualstudio.com/docs/sourcecontrol/overview)
Gitalking ...