7466|13

7815

帖子

56

TA的资源

裸片初长成(中级)

楼主
 

【自制DA14531手环(仿小米手环4/5)开发套件】配套教程 之 三:项目git说明和我的BSP [复制链接]

 
本帖最后由 辛昕 于 2024-1-22 20:56 编辑

最重要的东西当然要放在最开始,项目 git repo地址

https://gitee.com/DarberLinCC/DA14531.git 

 

最简单拉取方式:

git clone https://gitee.com/DarberLinCC/DA14531.git 

 

   为了方便项目工程代码的管理,我习惯了使用git,远程的仓库托管则选择国内的Gitee,

主要是不想每次操作都为网速蛋疼。

    首先,给几个图,意思意思。

    后面会详细说明一些相关的操作

 

    初始状态:

    就是原始的SDK——目前DA14531最新的SDK版本号为 6.0.20.1338

 

 

最新回复

不错  详情 回复 发表于 2024-2-1 02:03
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地

 

回复
举报

7815

帖子

56

TA的资源

裸片初长成(中级)

沙发
 
本帖最后由 辛昕 于 2024-1-22 19:46 编辑

DA14531 SDK6(non-ble)peripheral_project 的简单结构

 

        在讲述我自己基于SDK例程构建自己的项目工程的思路之前,我觉得,

有必要简单先讲一下SDK例程(目前是非蓝牙部分的基础外设例程)——

NON-BLE peripheral_project 的结构。

        其实,它也很简单。

 

 

 

    只有 main.c user_periph_setup.c 是有变化的。

    实际上,这两个源文件也放在不同例程文件的src文件夹下——

    也就是说,这是每个例程项目的不同部分。

 

 

 

 

而我们往下简单地追一下代码,就会知道——

 

 

    system_init() 这个函数,它位于sdk的arch的 arch_system.c里

    从它的位置和具体实现的意图来看,

    它实际上是一个统一的,和任何不同功能例程的这个函数实现都是一模一样的。

    只在这个函数最后调用的是每个项目自己不同的 periph_init() 实现

 

    而这个periph_init()的实现,每个例程项目,当然是不一样的,因此,它位于

  

个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

板凳
 
本帖最后由 辛昕 于 2024-1-22 19:56 编辑

BSP组织思路:一封到底

 

    而我使用我自己的 BSP,简单地说一下我的思路——四个字:一封到底

    管你MCU的初始化还是外设接口,我都一步封到我的BSP里

 

    把包括MCU初始化,外设的接口封装都做在这里,并最终只以一系列函数

接口的方式给上层提供。

 

这些函数接口的形式也必须是 ansi C的    

    也就是说,它不会暴露 DA14531 SDK自身的自定义数据类型、宏定义。

    尽管,在实际封装BSP的过程中,往往不可避免地要自定义一些数据类型、

宏定义——

    然而,BSP对外开放的这些接口,它和DA14531(MCU)的SDK提供的不

同的是,它会让这些定义是基于用户功能语境的,而做到与MCU无关;

    也可以简单说,这就是 BSP和HAL的区别,BSP是对板级的,而HAL是针对MCU中间层的。

 

咱们就着代码一点点说——

撑着一开始只是改写blinky这个非常简单的例程作为入手说明

     

 

自建的BSP组织方式对原始SDK例程唯一的修改——

    这个periph_init()在 DA14531 SDK里,它原本就是可以根据不同的项目外设使用而改变的。

唯一只是保证使用相同名字的函数接口声明而已。

 

    因此,在我自己的BSP接口里,我把periph_init() 里的具体实现全部注释掉

 

 

然后,我只在这个原始的例程框架上,添加自己的main.c 和 bsp

 

 

最后贴上我的main.c(忽略其中的 FreeRTOS代码部分)

 

 

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

4
 

在这个过程中,我同时会介绍一下我使用SDK,和构建自己项目工程的一些个人思路。
当然,这种事情属于个人习惯,你们要不喜欢,问题不大。
我后面会把我如何快速创建自己的项目工程也写在这里,你们可以愉快的自己改成你喜欢的样子;

 

后面我会简单介绍一下 Keil5 MDK 的项目工程文件 的 文本结构,对这些没技术含量

的知识了解以后,你可以非常迅速地——想怎么魔改你自己的项目工程都可以。

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

5
 

Git 的 .gitignore  和 Keil 的 *.uvoptx 和 *.uvprojx

 

在往gitee上传 model_project 的放在顶层的 工程项目 前,先简单讲一下

和 .gitignore 有关的一些操作

 

首先讲一下,.gitignore 是个什么东西。

在我们日常频繁地往git保存代码修改的时候——

这里要说,尤其是在git这种工具下,

请大胆、频繁地保存你的代码修改版本。

不必像以前,在公司,因为使用SVN P4V等集中式的版本管理工具时那样小心翼翼,

非得是很完整的功能点修改才上传——

如果你在公司的项目中使用,实在不行,你就新建一个自己用的分支来保存呗——

实际上,在git上,在公司这种多人共同开发环境下,实际上,我们也需要使用这种

方式,来保证自己的开发环境、代码和上传的公司支线的同步问题。

这个,我们后面有机会单独开贴说。

 

.gitignore的语法这里不多说,建议百度。

这里,只对本个项目里使用的(到目前为止)很简单的.gitignore 说明。

 

 

在一般情况下,我们实际需要上传的代码,往往只是 .c(.cpp) .h,其他的任何修改,都基本不用上传;

然而,无论是Keil还是IAR,或者其他IDE工具,基本上,都无可避免会产生很多中间文件。

这里面,有 IDE本身的项目文件、中间文件

还有编译过程产生的各种 .o .d 等

 

而这些,是我们不应该保存和上传的变化;

为了方便,我们可以把我们不想要跟踪和保存的文件变化,写在 .gitignore里。

这可以在每次 git status git add 时,大幅简化我们的操作。

——只有操作简单快速,我们才会乐于做频繁提交代码保存中间修改这种有益于开发的行为。

 

这里,另外要说一下的是 *.uvoptx 和 *.uvprojx 的问题。

理想情况下,只有我们在修改 keil 工程 的设置,增删编译文件 等行为时, 这两个文件会发生变化。

这种变化,当然是需要保存、提交的;

 

然而,实际上,几乎每一次,编译、调试,乃至啥设置都没动,啥文件都没增删变化。

你一关掉keil,它的这两个文件就发生了变化。

这是挺烦的。

 

所以,我把这两个文件类型也写在了 .gitignore 里予以忽略。

 

当然了——如我们前面所说,有的时候,你总不可能避免真的会做一些需要保存的 改变。

这个时候怎么办呢?

为了这种不得不,但又其实基本很少需要的行为,我专门写了两个简单的 bat脚本

从名字就可以看到各自会在什么时候用。

 

两个脚本也非常简单,只有几句cmd命令,你只要看了名字和我的解释,再简单百度一下

你就会明白每一句命令的意思。

 

 

 

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

6
 

以下是我目前的工程 放在顶层的 model_project

它包含了一个我需要的项目基础——

1、以 jlink-rtt 作为 调试信息输入输出,替代和节省两个串口io口

2、同时,移植FreeRTOS(Kernel)

其中,关于 RTT 我在本系列教程帖子的 配套教程 之一 里写过 

关于 FreeRTOS我将在写完本帖子以后,继续回头写 这个 配套教程 之二——我之所以先写这个三,

是因为我觉得有必要先写,顺序我搞错了。

 

对不熟悉git的朋友,给大家一个简单的命令

git clone https://gitee.com/DarberLinCC/DA14531.git

 

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 

资源非常详细,非常好,需要花时间来弄一弄,学一学。

点评

谢谢你的回复  详情 回复 发表于 2024-1-22 21:23
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

8
 
本帖最后由 辛昕 于 2024-1-22 21:24 编辑

以文本格式打开 uvoptx uvprojx...是可以对keil项目文件夹 为所欲为的快速行为

 

最后,我们讲一下,这个 model_project,简单介绍一下我对它做了什么——

 

首先,我嫌它烦——瑞萨要管好几个MCU型号,但,我只管DA14531

 

这个地方怎么改呢?

简单——

 

 

兄弟,你就说你想做什么吧?

真的,你可以为所欲为的。

 

当然,最左侧的 Project Targets 在这里搞,是很痛快的。

但如果是最右侧的要增加文件,或者说——比方说,我就把

 

blinky 复制到 根目录下,如果要一个一个源文件地改........

对不起,我们码农是真的不能干这种低水平的重复行为的。

 

所以,我们只要以文本形式 打开 uvprojx 再来看一眼吧。

 

 

你看看这个——

  再看看这个——

 

你就说熟不熟?

然后,怎么改最快?

 

怎么,够快了吧?

 

这是 头文件搜索路径,当然还有一个是源文件

 

改的方法,当然也是 replace all 大法......

 

怎样,这就很爽了,很快了吧。

所以,你想把它放哪都行,你喜欢就可以。

 

哦,对了,,blinky 改成 model_project

我都不用截图,我就教你一招,你 ctrl+F “blinky” 不就完事了?

 

毕竟,这个文本,说的都是人话,是一种 xml格式的文本。

 

用相同的方法,你可以同样处理 uvoptx

因为,以一种我们不能理解,其实也没有必要理解的原因——

有一些设置项,它,是出现在 uvoptx 这个文件里的

 

所以,我才说,为什么,当我们在对项目设置进行修改,增删文件啥的时候——

爽快点,两个一起保存好了。

 

实际上,这也是最初SDK下载下来时,每个工程文件夹里的样子。

 

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

9
 
very111 发表于 2024-1-22 21:22 资源非常详细,非常好,需要花时间来弄一弄,学一学。

谢谢你的回复

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

113

帖子

4

TA的资源

一粒金砂(高级)

10
 

很喜欢这么详细得技术帖子


点评

这些内容——前期的,基本不止对于 DA14531或者DA145XX系列的MCU有效。 基本上,是对于 ARM内核 用Keil 以及 JLink 统统有效的基础技能。 欢迎关注  详情 回复 发表于 2024-1-22 23:51
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

11
 
eew_cT3H5d 发表于 2024-1-22 23:19 很喜欢这么详细得技术帖子

这些内容——前期的,基本不止对于 DA14531或者DA145XX系列的MCU有效。

基本上,是对于 ARM内核 用Keil 以及 JLink 统统有效的基础技能。

欢迎关注

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

7219

帖子

195

TA的资源

五彩晶圆(高级)

12
 

有不少都是我的知识盲区啊  我太菜了

点评

那就赶紧收藏点赞关注吧  详情 回复 发表于 2024-1-23 12:53
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

13
 
常见泽1 发表于 2024-1-23 09:08 有不少都是我的知识盲区啊  我太菜了

那就赶紧收藏点赞关注吧

个人签名

强者为尊,弱者,死无葬身之地

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

14
 
不错
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表