打印
[APM32F1]

APM32F103移植perf_counter库

[复制链接]
141|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hexbei|  楼主 | 2024-1-12 17:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hexbei 于 2024-1-13 13:27 编辑

perf_counter 是一个 Cortex-M 系统专用的性能计数器库,它与用户原有的 SysTick 功能共享 SysTick,且不干扰用户原有的 SysTick 功能。

用这个库可以实现一些如 delay_us(),get_system_ms(),用宏测量指定代码段的 CPU 周期,以及自动适配 EventRecorder 等功能,还是十分方便的。

下面介绍一下如何在 APM32F103 的 MDK 工程上移植 perf_counter。

1. 首先从官方库下载源码:https://github.com/GorgonMeducer/perf_counter

2. 在源码目录下的子目录cmsis-pack中,找到GorgonMeducer.perf_counter.2.2.4.pack,双击安装。完成后,可以在 Pack-Installer 中找到:



3. 打开极海例程,例如 APM32F10x_SDK_V1.8\Examples\GPIO\GPIO_Toggle\Project\MDK\GPIO_Toggle.uvprojx

4. 打开 RTE 管理窗口,找到 Utilities 并选择 perf_counter 里面的 Core,如下图:



5. 在相应的 C 源文件中包含 perf_counter.h :

#include "perf_counter.h"

6. 更新 CMSIS 版本为 5.7.0 或更高版本 。



更新之后,在 RTE 中选上 CMSIS 的 CORE



7. 确保 ​SystemCoreClock​ 更新为与 CPU 频率相同的值。这里使用的 GPIO_Toggle 例程已配置好,无需修改。

8. 确保 ​SysTick->CTRL​ 寄存器的 ​SysTick_CTRL_CLKSOURCE_Msk​ 位(位 2)为 ​1​ ,目的是使 SysTick 用与目标 Cortex-M 处理器相同的时钟源运行。本例程也无需修改。

9. 调用 void init_cycle_counter(bool bIsSysTickOccupied) 函数初始化 perf_counter,bIsSysTickOccupied 参数代表 SysTick 是否已被主程序或 RTOS 占用 。修改后的主函数如下:
int main(void)
{
    SystemCoreClockUpdate();   // <-- 新增
    init_cycle_counter(false); // <-- 新增
        
    APM_MINI_LEDInit(LED2);
    APM_MINI_LEDInit(LED3);

    while (1)
    {
        delay_ms(1000); // <-- 修改为 perf_counter 的延时函数
        APM_MINI_LEDToggle(LED2);
        APM_MINI_LEDToggle(LED3);
    }
}


10. 检查编译器是否启用 GNU 扩展。在 Option for target 对话框中选择 C99 模式和 GNU 扩展,如下所示:



11. 编译下载工程并复位运行开发板,可以看到 LED 正常闪烁,移植成功





使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

21

帖子

2

粉丝