现代Keli教程-教不了一点

2024-08-20 15:29:34 浏览数 (2)

发现不少有趣的东西,记录一下。

首先是下载pack,可以很精确的选择

在网络畅通下选择

安装CMSIS包

一般来说,C和H是一起出现的,但是这里只有C,H呢?

可以看一些这个bat文件

是在这里使用的,编译以后移动固件

这个是我们后面说的,VSCode的新插件

Arm Compiler for Embedded 6 基于现代 LLVM 编译器框架。Arm Compiler 5 不基于 LLVM 编译器框架。

顺便换个好看的字体

这里也改了,要烫死了

可以看到其实C和H是同时出现的

只是在keli里面是两个位置进行配置

都是有结果的

在截图的左下角有个 Memory 内存区,在这个内存区里面有一个缓冲 Event Buffer,其实就是一个大数组。MDK 通过访问这个数组实现消息的图形化展示。为了正确的图形化展示,数组缓冲里面的数据就得有一定的数据格式。而这个数据格式就是通过左侧截图里面的 Event Recorder 和 Event Filter 来实现的。Event Recorder 的 API 实现数据记录和整理,Event Filter 的 API 实现数据的筛选,从而可以选择哪些数据可以在 MDK 的 Event Recorder 调试组件里面展示出来。这就是 Event Recorder 的基本工作流程。

Event Statistics 提供的时间测量功能简单易用,在测试代码前后加上测量函数即可

Event Statistics 提供的功耗测量功能,当前只有 KEIL 的 ULINKplus 支持此功能,由于 ULINKplus价格不便宜,一套 5000 多,大家作为了解即可,实际效果如上。

Event Recorder 的特色主要有以下几点:

1. 提升应用程序动态执行期间的检测能力。

2. 支持的事件类型滤除机制,比如运行错误、API 调用、内部操作和操作信息的区分。

3. 可以在任务中、RTOS 内核中和中断服务程序中任意调用。

4. 对于带 ITM 功能的 Cortex-M3/M4/M7/M33 内核芯片,执行记录期间,全程无需开关中断操作。

对于不带 ITM 功能的 Cortex-M0/M0 /M23,是需要开关中断的。

5. 支持 printf 重定向。

6. 各种 link 通吃,支持 SWD 接口或者 JTAG 接口方式的 JLINK、STLINK、ULINK 和 CMSIS-DAP。

7. 对于带 DWT 时钟周期计数器功能的 Cortex-M3/M4/M7/M33 内核芯片,创建时间戳时,可以有效

降低系统负担,无需专用定时器来实现。

8. Event Recorder 执行时间具有时间确定性,即执行的时间是确定的,而且执行速度超快,因此,实

际产品中的代码依然可以带有这部分,无需创建 debug 和 release 两种版本。

9. RTX5 及其所有中间件都支持 Event Recorder 调试。

每条 Event Recorder 消息是由 16 字节的数据组成,32 位的 ID,32 位的时间戳,两个 32 位的数据,

共计 16 个字节。其中 32 位 ID 最重要,格式如下:

那这么屌的调试工具怎么打开?

RTE听说过没有?点击这里

打开固件,以及重定向

为了实现 printf 重定向,我们需要将 STDOUT 的输出方式改为 Event Recorder,即选项里面的 EVR。

这里打开

调试的时候就全开

安装以后下面会有一个包的提示

在下面会有一个配置选型卡

自己看看

好用

这里是keli的底层定义的位置

数值定义

CMSIS的启动文件位置

上面的这段代码是建立中断向量表,中断向量表定位在代码段的最前面。具体的物理地址由链接器的

配置参数(IROM1 的地址)决定。如果程序在 Flash 运行,则中断向量表的起始地址是 0x08000000。

简单的汇编语言实现 IF…….ELSE…………语句。如果定义了 MICROLIB,那么程序是不会执行 ELSE分支的代码。__MICROLIB 可能大家并不陌生,就在 MDK 的 Target Option 里面设置。

icroLib 是 MDK 里面带的微库,针对嵌入式应用,MicroLIB 做了深度优化,比使用 C 标准库所需的 RAM 和 FLASH 空间都大大减小。只有库,没有源文件

缩小库的大小

晶振匹配

这里是HAL库最需要的地方

看初始化里面的函数

调用了这个Init

◆ 设置滴答定时器的每 1ms 中断一次。

◆ HAL 库不像之前的标准库,在系统启动函数 SystemInit 里面做了 RCC 初始化,HAL 库是没有做的,

所以进入到 main 函数后,系统还在用内部高速时钟 HSI,对于 H7 来说,HSI 主频是 64MHz。

◆ 函数 HAL_Init 里面调用的 HAL_MspInit 一般在文件 stm32h7xx_hal_msp.c 里面做具体实现,主要

用于底层初始化。当前此函数也在文件 stm32h7xx_hal.c 里面,只是做了弱定义。

若定义,可以自己实现

for循环16次,如果是程序运行期间的引脚状态切换,最好采用下面的方式或者直接寄存器操作

在大多数原厂厂商的型号后缀里面,后缀TR=tape and reel,即包装方式为卷带包装的意思。

是的,在意法半导体STMicroelectronics也是同样的意思。

代码语言:javascript复制
https://blog.csdn.net/BOB_CHAN_96/article/details/130818551?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-130818551-blog-78139482.235^v39^pc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-130818551-blog-78139482.235^v39^pc_relevant_anti_vip&utm_relevant_index=2

0 人点赞