【GD32F427开发板试用】01适配RTX4+调试组件Event Recorder

news2024/9/22 7:32:47

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:汪阳

感谢极术社区和兆易创新组织的开发板试用活动。收到开发板有一周多了,因为工作关系好久没有折腾MDK了,上手浪费的时间多了些。

先上GD官网下载了PACK包和DEMO例程,打开01_GPIO_Running_LED例程修改了头文件路径,编译下载LED闪亮了,接下来就是以此例程移植RTX和调试组件了。

移植RTX:RTX4默认包含在MDK中移植非常简单

1.工程魔术棒里面Target开启RTX操作系统。

2.MDK安装目录查找RTX_Conf_CM.c复制到工程目录下并添加到工程中。

3.修改RTX_Conf_CM.c中Tick_Timer,时钟使用systick,主频200000000Hz,Tick 1000us。

4.屏蔽gd32f4xx_it.c中void SVC_Handler(void) void PendSV_Handler(void) void SysTick_Handler(void)三个中断函数
5.在main.c中增加头文件#include “RTL.h”
6.建立调度任务

移植调试组件:使用板载的GD_Link就能方便调试而不需要串口

1.打开Manage Run_Time Enviornment -> Compiler 选项中Event Recorder 和STDOUT

2.修改debug中trace中core clock为200MHz

3.使用调试组件需要包含头文件#include “EventRecorder.h”
4.初始化调试组件

/* 初始化 EventRecorder 并开启 */
    EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();

5.可以使用EventRecord发送数值并且可以使用printf了
6.同时也可以使用Event Statistics测试时间了
7.编译下载后打开调试功能,开始运行,调试组件自动输出

主要代码

#include "gd32f4xx.h"
    #include "gd32f427r_start.h"
    #include "systick.h"
    #include <stdio.h>
    
    #include "RTL.h"
    #include "EventRecorder.h"
    
    /*
    函数声明
    */
    static void AppTaskCreate (void);
    __task void AppTaskLED(void);
    __task void AppTaskStart(void);
    /*
    变量
    */
    static uint64_t AppTaskLEDStk[256/8]; /* 任务栈 */
    static uint64_t AppTaskStartStk[512/8]; /* 任务栈 */
    /* 任务句柄 */
    OS_TID HandleTaskLED = NULL;
    
    
    /*!
        \brief      main function
        \param[in]  none
        \param[out] none
        \retval     none
    */
    int main(void)  
     {  

         /* enable the LEDs GPIO clock */
        rcu_periph_clock_enable(RCU_GPIOC);

        /* configure LED1 GPIO port */
        gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6);
        gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
        /* reset LED1 GPIO pin */
        gpio_bit_reset(GPIOC, GPIO_PIN_6);

            /* enable the User Key GPIO clock */
        rcu_periph_clock_enable(RCU_GPIOA);

        /* configure key pin as input */
        gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);

        /* 创建启动任务 */
        os_sys_init_user (AppTaskStart, /* 任务函数 */
        2, /* 任务优先级 */
        &AppTaskStartStk, /* 任务栈 */
        sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
        while(1)
        {

        }

    }  

    /\*  

    *   函 数 名: AppTaskLED
    *   功能说明: LED 闪烁
    *   形 参: 无
    *   返 回 值: 无
    *   优 先 级: 1 (数值越小优先级越低)  
        \*/  
        \\\_\\\_task void AppTaskLED(void)  
        {  
        static int numi = 0;  
        while(1)  
        {  

             EventStartA(0);         
             os_dly_wait(500);
             EventStopA(0);
             EventRecord2(1+EventLevelAPI,numi,numi);
             numi++;
             if((numi % 10) == 0)
                 printf("计数%d\r\n",numi);
             gpio_bit_write(GPIOC, GPIO_PIN_6, (bit_status)(1 - gpio_input_bit_get(GPIOC, GPIO_PIN_6)));

        }  
        }  
        /\*  

    *   函 数 名: AppTaskStart
    *   功能说明: 启动任务,也就是最高优先级任务。
    *   形 参: 无
    *   返 回 值: 无
    *   优 先 级: 2  
        \*/  
        \\\_\\\_task void AppTaskStart(void)  
        {  
        / _初始化 EventRecorder 并开启_ /  
        EventRecorderInitialize(EventRecordAll, 1U);  
        EventRecorderStart();  
        AppTaskCreate();  
        while(1)  
        {  

             os_dly_wait(500);

        }  
        }  
        /\*  

    *   函 数 名: AppTaskCreate
    *   功能说明: 创建应用任务
    *   形 参: 无
    *   返 回 值: 无  
        \*/  
        static void AppTaskCreate (void)  
        {  
        HandleTaskLED = os\\\_tsk\\\_create\\\_user(AppTaskLED, / _任务函数_ /  

             1, /* 任务优先级 */
             &AppTaskLEDStk, /* 任务栈 */
             sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */

        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你文本生成图片——stablediffusion

今天来点轻松的话题&#xff0c;带大家玩一个用文字生成图片的模型。相信大家如果关注AIGC领域&#xff0c;对文本生成图片&#xff0c;对Stablefiffusion、DEALL.E应该不陌生。今天给大家介绍的就是基于SD2 finetune出来的一个模型&#xff08;&#xff09;这篇文章不会教大家…

ArcGIS中基于网格实现可视化

1 数据来源介绍 土地利用数据、高程数据、植被指数数据均来源于中国科学院资源环境科学与数据中心&#xff08;https://www.resdc.cn/&#xff09;。 2 数据预处理 我们从中国科学院资源环境科学与数据中心官网上下载下来的土地利用栅格数据是整型的&#xff0c;我们可以利用…

高低温真空磁场探针台T8-EM4的技术指标

锦正茂高低温真空磁场探针台探针台配备4个&#xff08;可选6个或8个&#xff09;拥有高精度位移的探针臂&#xff0c;同时配有高精度电子显微镜&#xff0c;便于微小样品的观察操作。探针可通过直流或者低频交流信号&#xff0c;用来测试芯片、晶圆片、封装器件等&#xff0c;广…

火眼审阅 | 基于NLP和OCR识别技术赋能合同审阅

合同作为确定权利义务的法律文件&#xff0c;贯穿企业内外部活动的所有环节&#xff0c;可见合同数据之于企业是非常重要的数据资产。 合同管理是企业营业中的重要部分&#xff0c;其中合同审核是企业法务的基本工作之一。而对于所有的法务人员一直存在一个问题&#xff1a;合…

Java读取mysql导入的文件时中文字段出现�??的乱码如何解决

今天在写程序时遇到了一个乱码问题&#xff0c;困扰了好久&#xff0c;事情是这样的&#xff0c; 在Mapper层编写了查询语句&#xff0c;然后服务处调用&#xff0c;结果控制器返回一堆乱码 然后查看数据源头处&#xff1a; 由重新更改解码的字符集&#xff0c;在数据库中是正…

算法总结c++

文章目录基本概念时间复杂度空间复杂度基本结构1. 数组前缀和差分数组快慢指针(索引)左右指针&#xff08;索引&#xff09;盛水容器三数之和最长回文子串2. 链表双指针删除链表的倒数第 n 个结点翻转链表递归将两个升序链表合并为一个新的 升序 链表链表翻转3. 散列表twoSum无…

Camtasia2023最新版本新功能及快捷键教程

使用Camtasia&#xff0c;您可以毫不费力地在计算机的显示器上录制专业的活动视频。除了录制视频外&#xff0c;Camtasia还允许您从外部源将高清视频导入到录制中。Camtasia的独特之处在于它可以创建包含可单击链接的交互式视频&#xff0c;以生成适用于教室或工作场所的动态视…

UDS诊断之DTC码构成

DTC(Diagnostic Trouble Code)表示诊断故障码&#xff08;全局唯一&#xff09;&#xff0c;是故障类型的"身份ID"&#xff1b;用于汽车故障时对故障部位及原因的排查。 格式如下&#xff1a; 其中&#xff0c;DTCHighByte、DTCMiddleByte这两个字节表示故障内码&…

nvm控制node版本

安装 nvm 1、下载 nvm 官网安装包&#xff1a; github 选择 nvm-setup.exe 下载 2、安装 1、选择 nvm 安装目录&#xff08;可自定义&#xff09; 2、选择 node 安装目录&#xff08;如有安装过&#xff0c;可以选择以前安装目录&#xff0c;可 cdm 输入 where node 查看原nod…

嵌入式Qt 开发一个音乐播放器

上篇文章&#xff1a;RK3568源码编译与交叉编译环境搭建&#xff0c;进行了OK3568开发板软件开发环境搭建&#xff0c;通过编译RK3568的源码&#xff0c;可以得到Qt开发的交叉编译相关工具。 本篇&#xff0c;就来在搭建好的软件开发中&#xff0c;进行Qt软件的开发测试。由于…

package-lock.json,深度内容

前言 看完本文&#xff0c;你将从整体了解依赖版本锁定原理&#xff0c;package-lock.json 或 yarn.lock 的重要性。首先要从最近接连出现两起有关 npm 安装 package.json 中依赖包&#xff0c;由于依赖包版本更新 bug 造成项目出错问题说起。 事件一&#xff1a;新版本依赖包…

JavaScript 二叉树

文章目录前言一、何为 树1.根节点2.外&内部节点3.子树4.深度5.高度二、二叉树 & 二叉搜索树1.二叉搜索树插入值2.遍历二叉搜索树I.中序遍历II.先序遍历III.后序遍历3.查找节点4.移除节点总结前言 同前面说到的散列表结构, 树也是一种非顺序数据结构, 对于存储需要快速…

【浅学Nginx】Nginx安装和基础使用

Nginx安装和基础使用1. Nginx是什么2. Nginx的安装3. Nginx的目录结构4. Nginx的配置文件结构5. Nginx的具体应用5.1 部署静态资源5.2 反向代理5.3 负载均衡1. Nginx是什么 Nginx是一个轻量级的 web服务器 / 反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服…

kettle开发-Day37-SQ索引优化

前言&#xff1a;在上一个生产项目中&#xff0c;有个单表数据超249G了&#xff0c;里面存储的数据时间跨度就1年左右&#xff0c;那为啥会出现这种情况呢&#xff1f;数据来源为&#xff0c;一个生产基地所有电表的每分钟读数&#xff0c;一个基地大概500个电表左右&#xff0…

【C++】---Stack和Queue的用法及其模拟实现

文章目录Stack最小栈栈的弹出压入序列逆波兰表达式求值用栈实现队列模拟实现queue用队列实现栈模拟实现Stack stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。它的使用和之前学习的ve…

KDZD880 智能蓄电池放电测试仪

一、产品概述 智能蓄电池放电测试仪主要用于电信、移动、联通、电力直流行业的后备电源铅酸蓄电池的放电测试&#xff0c;具备蓄电池快速容量测试、在线监测及容量核对测试三大功能于一体的产品&#xff0c;集成化程度高、体积小巧、功能完善。 该设备是针对整组 12V-600V 蓄…

JavaScript高级程序设计读书分享之3章——3.4数据类型

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 ECMAScript 有 6 种简单数据类型&#xff08;也称为原始类型&#xff09;&#xff1a;Undefined、Null、Boolean、Number、String 和 Symbol&#xff08;es6新增&#xff09;。 还有一种复杂数据类型叫…

vim编辑器和gcc/g++编译器和gdb调试器和make/makefile自动化构建工具的使用

vim的三种模式(其实有好多模式 )&#xff08;1&#xff09;.命令模式&#xff08;2&#xff09;.插入模式&#xff08;3&#xff09;.底行模式vim的基本操作vim的命令模式的基本操作vim的插入模式的基本操作vim的底行模式的基本操作vim的配置gcc和g相关操作&#xff08;1&#…

XCP实战系列介绍11-几个常用的XCP命令解析

本文框架 1.概述2. 常用命令解析2.1 CONNECT连接(0xFF)2.2 SHORT_UPLOAD 命令(0xF4)2.2 SET_MTA (0xF6)2.3 MOVE命令(0x19)2.4 GET_CAL_PAGE(0xEA)2.5 SET_CAL_PAGE(0xEB)2.6 DOWNLOAD(0xF0)1.概述 在文章《看了就会的XCP协议介绍》中详细介绍了XCP的协议,在《XCP实战系列介绍…

Python面试——装饰器

知识链接&#xff1a; 装饰器 装饰器可调用的对象&#xff0c;其参数是被装饰的函数。装饰器可能会处理被装饰的函数然后把它返回&#xff0c;或者将其替换成另外一个函数或者可调用对象。 装饰器有两大特性&#xff1a; 能把被装饰的函数替换成其他函数&#xff08;在元编程…