S32G3任务抢占

news/2024/11/15 15:06:28/文章来源:https://www.cnblogs.com/JinShanCheShen/p/18334283

通过S32G3 的STM定时器 实现任务任务抢占

1、创建一个空工程

 

2、创建完成后先生成一版代码

 

 3、编译

 

4、添加user文件夹来存放自己的代码

my_os.h

/*********************************************************************************************************************/
/*-----------------------------------------------------Includes------------------------------------------------------*/
/*********************************************************************************************************************/
#include "my_os.h"
#include "Platform_Types.h"
#include "IntCtrl_Ip.h"
/*********************************************************************************************************************/
/*------------------------------------------------------Macros-------------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*-------------------------------------------------Global variables--------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*------------------------------------------------Function Prototypes------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*---------------------------------------------Function Implementations----------------------------------------------*/
/*********************************************************************************************************************/
#define    STM_0_CR                *(unsigned int *)0x4011C000
#define    STM_0_CNT               *(unsigned int *)0x4011C004
#define    STM_0_CCR0              *(unsigned int *)0x4011C010
#define    STM_0_CIR0              *(unsigned int *)0x4011C014
#define    STM_0_CMP0              *(unsigned int *)0x4011C018#define    STM_0_CR_TEN_ENABLED        (1<<0)
#define    STM_0_CR_TEN_DISABLED       (0<<0)#define    STM_0_CLEAN_CNT             (0<<0)#define    STM_0_CCR0_ENABLED          (1<<0)
#define    STM_0_CCR0_DISABLED         (0<<0)#define    STM_0_CIR0_CLEAN_IRQ_FLAG   (1<<0)#define    STM_1_CR                *(unsigned int *)0x40120000
#define    STM_1_CNT               *(unsigned int *)0x40120004
#define    STM_1_CCR0              *(unsigned int *)0x40120010
#define    STM_1_CIR0              *(unsigned int *)0x40120014
#define    STM_1_CMP0              *(unsigned int *)0x40120018#define    STM_1_CR_TEN_ENABLED        (1<<0)
#define    STM_1_CR_TEN_DISABLED       (0<<0)#define    STM_1_CLEAN_CNT             (0<<0)#define    STM_1_CCR0_ENABLED          (1<<0)
#define    STM_1_CCR0_DISABLED         (0<<0)#define    STM_1_CIR0_CLEAN_IRQ_FLAG   (1<<0)uint32 STM_0_ISR_Test_Cnt = 0;
uint32 STM_0_ISR_Test_Flg = 0;
ISR(STM_0_ISR)
{STM_0_ISR_Test_Flg = 1;/* Disabled STM0 */STM_0_CR    = (unsigned int)STM_0_CR_TEN_DISABLED;/* Disabled ccr0 */STM_0_CCR0    = (unsigned int)STM_0_CCR0_DISABLED;/* Clean count */STM_0_CNT   = (unsigned int)STM_0_CLEAN_CNT;/* Enabled STM0 */STM_0_CR    |= (unsigned int)STM_0_CR_TEN_ENABLED;/* Enabled ccr0 */STM_0_CCR0    |= (unsigned int)STM_0_CCR0_ENABLED;STM_0_ISR_Test_Cnt++;uint32 cnt_flag_1 = 100000;while(cnt_flag_1--){uint32 cnt_flag_2 = 10000;while(cnt_flag_2--){__asm("nop");}}STM_0_ISR_Test_Flg = 0;/* Clean flag */STM_0_CIR0  |= (unsigned int)STM_0_CIR0_CLEAN_IRQ_FLAG;
}uint32 STM_1_ISR_Test_Cnt = 0;
uint32 STM_1_ISR_Test_Flg = 0;
ISR(STM_1_ISR)
{/* Disabled STM1 */STM_1_CR    = (unsigned int)STM_1_CR_TEN_DISABLED;/* Disabled ccr0 */STM_1_CCR0    = (unsigned int)STM_1_CCR0_DISABLED;/* Clean count */STM_1_CNT   = (unsigned int)STM_1_CLEAN_CNT;/* Enabled STM1 */STM_1_CR    |= (unsigned int)STM_1_CR_TEN_ENABLED;/* Enabled ccr0 */STM_1_CCR0    |= (unsigned int)STM_1_CCR0_ENABLED;STM_1_ISR_Test_Cnt++;if(1 == STM_0_ISR_Test_Flg){STM_1_ISR_Test_Flg++;}/* Clean flag */STM_1_CIR0  |= (unsigned int)STM_1_CIR0_CLEAN_IRQ_FLAG;
}void my_os_init(void)
{/* Interrupt the binding callback function */IntCtrl_Ip_InstallHandler(STM0_IRQn, STM_0_ISR, NULL_PTR);/* Set the interrupt priority */IntCtrl_Ip_SetPriority(STM0_IRQn, 4);/* Enable STM0 interrupt */IntCtrl_Ip_EnableIrq(STM0_IRQn);/* Clean count */STM_0_CNT    = (unsigned int)STM_0_CLEAN_CNT;/* Clean flag */STM_0_CIR0  |= (unsigned int)STM_0_CIR0_CLEAN_IRQ_FLAG;/* set cmp data */STM_0_CMP0   = (unsigned int)(133333 * 1000);/* Enabled STM0 */STM_0_CR    |= (unsigned int)STM_0_CR_TEN_ENABLED;/* Enabled ccr0 */STM_0_CCR0    |= (unsigned int)STM_0_CCR0_ENABLED;/* Interrupt the binding callback function */IntCtrl_Ip_InstallHandler(STM1_IRQn, STM_1_ISR, NULL_PTR);/* Set the interrupt priority */IntCtrl_Ip_SetPriority(STM1_IRQn, 3);/* Enable STM1 interrupt */IntCtrl_Ip_EnableIrq(STM1_IRQn);/* Clean count */STM_1_CNT    = (unsigned int)STM_1_CLEAN_CNT;/* Clean flag */STM_1_CIR0  |= (unsigned int)STM_1_CIR0_CLEAN_IRQ_FLAG;/* set cmp data */STM_1_CMP0   = (unsigned int)(133333);/* Enabled STM1 */STM_1_CR    |= (unsigned int)STM_1_CR_TEN_ENABLED;/* Enabled ccr0 */STM_1_CCR0    |= (unsigned int)STM_1_CCR0_ENABLED;
}

my_os.h

#ifndef _MY_OS_H_
#define _MY_OS_H_
/*********************************************************************************************************************/
/*-----------------------------------------------------Includes------------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*------------------------------------------------------Macros-------------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*-------------------------------------------------Global variables--------------------------------------------------*/
/*********************************************************************************************************************//*********************************************************************************************************************/
/*------------------------------------------------Function Prototypes------------------------------------------------*/
/*********************************************************************************************************************/
extern void my_os_init(void);#endif

 

5、添加头文件路径

6、加时钟初始化

 

int main(void)
{/* Write your code here *//* Initialize Clock */Clock_Ip_StatusType Status_Init_Clock = CLOCK_IP_ERROR;Status_Init_Clock = Clock_Ip_Init(Mcu_aClockConfigPB);if (Status_Init_Clock != CLOCK_IP_SUCCESS){while(1); /* Error during initialization. */}
my_os_init();for(;;){if(exit_code != 0){break;}}return exit_code;
}

 

7、跑起来

看到STM_1_ISR_Test_Flg累加 说明更高中断的任务来了,就会发生抢占。

S32G中中断优先级数值越小中断等级越高。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我们的网站被狗爬了!

大家好,我是程序员鱼皮。 世风日下,人心不古。我们的程序员面试刷题网站 《面试鸭》 才刚刚上线了一个多月,就由于过于火爆,被不少同行和小人发起网络攻击。 而且因为我们已经有 4500 多道人工整理的企业高频面试题、100 多个各方向的面试题库、大厂面试官原创的优质题解,…

Nmap 7.95 - Zenmap 汉化版,端口扫描、网络嗅探工具

Nmap 7.95 - Zenmap 汉化版 本来想找一个端口扫描工具,先找到了 Angry IP Scanner 用了一下,有时候扫不到,功能也比较单一。最后找到了 Nmap,这个功能要强大很多。网上没有最新的汉化版本,老版本的汉化还存在BUG,于是自己动手汉化了一下。功能介绍:Nmap是一款功能强大的…

TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设

本专题将以 TapData 正在支持的各国产信创数据源为原点,提供详细的数据库同步、迁移教程,为有需求的用户提供更灵活的工具选择。本文将介绍的 TapData 数据源为——TiDB。随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国…

基于 LLM 制作了一个 SQL 方言转换器,未来的某天我可能会用上

事件起因,公司有从sqlserver转mysql的打算,源码里有不少sqlserver的语句,没有啥批量修改的好方法,人力解决最稳妥,所以基于大模型制作了一个方言转换器项目基于.NET6 MVC + Bootstrap 简单页面就没有去build前端了,jquery字符串拼接一把梭 项目已开源:https://github.co…

oracle产品周期

JDBC 下载链接:https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

计算机入门和服务器入门知识总结

一、计算机入门知识 1.1 什么是计算机 是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备发明计算机的目标是代替人类去高效且高质量地完成工作。 1.2 计算机发展史第一代计算机(1946-1957) 电子管时代…

会议海报/论文海报编辑流程

模板网站 https://www.posterpresentations.com/free-poster-templates.html 选择感兴趣的模板,下载对应的尺寸比如下载第一个,想要改变颜色设计的话,在ppt中最上面点击“设计-变体更多-颜色”,可以整体更改模板颜色 如果想要修改模板背景色之类的,比如改成白色,点击“视…

汽车测试及质量监控博览会(中国)——北汇信息邀请函

尊敬的先生/女士: 北汇信息将于 8.28-30 号参加汽车测试及质量监控博览会,展位号:7028,诚邀您莅临展位进行参观交流!汽车测试及质量监控博览会(中国)2024汽车测试及质量监控博览会(中国)(Testing Expo China – Automotive)是引领世界的国际博览会,展示汽车测试、开发…

golang对遍历目录操作的优化

一转眼go1.23都快发布了,时间过得真快。 不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。 对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。 本文默认Linux…

老旧 Linux 系统搭建现代 C++ 开发环境 —— 基于 neovim

一台 CentOS7 老机器,能不能打造基于 vim 的现代化 IDE?本文以实操为主,带你一步步搭建自己的环境问题背景 公司配发的电脑是 macOS,日常开发需要访问 Linux 虚拟机,出于安全方面的考虑,只能通过跳板机登录。这阻止了大多数远程图形界面的使用,让写代码的工作变得复杂起…

UnitTest

UnitTest框架 是Python自带的单元测试框架,也可以用来做自动化测试(管理和执行用例) 核心要素(组成): 1、TestCase(测试用例) 2、TestSuite(测试套件):打包TestCase 3、TestRunner(测试执行):执行Testsuite 4、TestLoader(测…

帝国CMS网站什么是远程保存忽略地址?

什么是远程保存忽略地址?在此列表里的网站/地址将不会将文件远程保存本地扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开发、PSD转HT…