ERIKA如何配置Systick

7 篇文章 8 订阅

一、Systick简介

Cortex-M处理器集成了一个24BIT的向下计数的Systick定时器。通过Systick中断,定时触发OS内核。用来产生系统节拍,进行任务管理和上下文切换。
SysTick主要包含四个寄存器

  1. SysTick->CTRL(控制和状态寄存器)
  2. SysTick->LOAD(重装计数器)
  3. SysTick->VAL(当前计数值)
  4. SysTick->CALIB(校准计数器)
    通过配置Syctick可以定时触发SysTick中断,从而在Systick_Handler中实现OS相关功能

二、 ERIKA OS如何配置Systick

在ERIKA OS中可以通过编辑Oil文件来配置SysTick的节拍
SysTick
需要将DEVICE类型选择为SYSTICK,同时为了保证Systick的节拍频率与设置的一致,需要检查CPU_CLK的时钟频率是否与配置的一致。
通过查看CPU_DATA可以得到当前系统的时钟频率
在这里插入图片描述
或者是查看生成的OS配置文件中的 OSEE_CPU_CLOCK
在这里插入图片描述
建议:不要直接修改动态代码中的配置参数,ERIKA提供可视化的配置工具。通过工具修改,以保证Oil文件与动态代码的一致性。

三、ERIKA如何初始化SysTick

1、初始化接口

在配置好OS的各项配置后,只需要调用OS 接口 StartOs,OS即可开始调度。那么ERIKA是如何将Systick初始化呢?

Systick
ERIKA 通过接口osEE_cortex_m_system_timer_init初始化Systick。

2、接口实现

接口函数实现如下:

/** \brief	System Timer Initialization. */
FUNC(void, OS_CODE) osEE_cortex_m_system_timer_init(void)
{
  osEE_cortex_m_systick_set_period(
    ((OSTICKDURATION / OSEE_KILO) / OSEE_KILO) * (OSEE_CPU_CLOCK / OSEE_KILO)
  );
  osEE_cortex_m_systick_enable_int();
  osEE_cortex_m_systick_start();
}

主要看这里设置系统周期的函数:

#define OSEE_S_J(s1,s2)       OSEE_STRING_JOIN(s1,s2)
#define OSEE_INTEGER_DEFINES_SUFFIX U
#define OSTICKDURATION    (1000000U)
#define OSEE_CPU_CLOCK (48000000U)
#define OSEE_KILO         OSEE_S_J(1000, OSEE_INTEGER_DEFINES_SUFFIX)

这里是基于48M时钟配置的,1ms系统节拍。

四、SysTick中断服务函数

1、OSEK 的中断管理

OSEK将中断分为两类: ISR category 1、ISAR category2。

  1. ISR category 1 1类中断不使用OS服务,OS也不管理此中断。当中断服务函数结束后,处理器继续执行之前被中断打断的任务。中断对任务管理没有影响。
  2. ISR category 2 2类中断需要在发生中断时,OS提供中断服务函数执行的环境。类似于一次任务切换。但是,定义2类中断需要定义一个Notification的中断服务函数。中断服务函数以如下的方式定义,并且在TDB(Task Descriptor Block)中初始化。
/*
 * System Timer ISR.
 */
ISR2(osEE_cortex_m_system_timer_handler)
{
  OsEE_CDB * p_cdb = osEE_get_curr_core();

  osEE_counter_increment(p_cdb->p_sys_counter_db);
}

2、Systick中断

ERIKA 定义两种中断Systick的中断服务函数

FUNC(void, OS_CODE) (v)( void )			\
{						\
   osEE_cortex_m_isr1_stub(f);		\
}
#endif  /* !OSEE_API_DYNAMIC */

#define OSEE_CORTEX_M_ISR2_DEFINITION(v,t)	\
/* Declare The ISR User handler */		\
FUNC(void, OS_CODE) (v)( void )			\
{						\
   osEE_cortex_m_isr2_stub(t);		\
}

其中category 1需要用户自己显示SysTick中断服务函数 category2是在Systick_Handler中调用
osEE_cortex_m_isr2_stub,最终调用ERIKA 提供的Systick服务函数osEE_cortex_m_system_timer_handler。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: OSEK ERIKA 是开源实时操作系统 ERIKA 的基础,能够支持多种CPU体系结构和嵌入式系统。OSEK ERIKA 教程旨在帮助开发人员实现嵌入式软件的实时性和可靠性,提高系统的稳定性和性能。 OSEK ERIKA 教程包括了许多方面的内容,例如开始使用 OSEK ERIKA、安装和配置、任务和应用程序管理、定时器和中断管理、内存管理、通信机制、设备驱动程序的实现、调试和测试等等。这些内容都非常重要,需要认真掌握,以确保嵌入式软件的质量和可靠性。 开始使用 OSEK ERIKA 时,需要了解其基本概念和原理,并掌握其体系结构和支持的CPU类型。安装和配置部分包括了如何安装和配置开发环境、编译器、链接器和调试器。任务和应用程序管理部分详细介绍了如何创建和管理任务、应用程序和事件。定时器和中断管理部分则是介绍了如何利用定时器和中断来实现任务调度和系统循环。内存管理部分介绍了如何使用内存池和动态内存分配来优化资源使用。通信机制部分介绍了如何使用消息队列、信号量和互斥量等机制来实现任务间的通信和同步。设备驱动程序的实现部分详细介绍了如何使用裸机驱动程序和操作系统驱动程序来实现设备的控制。最后,调试和测试部分详细介绍了如何利用调试器和单元测试来确保软件的正确性和稳定性。 总之,OSEK ERIKA 教程是非常全面、详细和有用的资源,可以帮助开发人员从入门到精通 OSEK ERIKA 的应用开发和系统集成。 ### 回答2: OSEK ERIKA是一个开源实时操作系统(RTOS),专门为嵌入式应用程序设计而开发。它提供了一个统一的标准界面和应用程序接口,便于应用程序和软件开发人员进行系统集成和应用程序设计。OSEK ERIKA具有高度可靠性和可扩展性,可在不同的应用程序和硬件平台上运行。OSEK ERIKA教程是一种介绍如何使用OSEK ERIKA操作系统的教材。通过学习OSEK ERIKA教程,开发人员可以了解操作系统的内部工作原理和流程,并能够使用OSEK ERIKA平台开发实际的嵌入式系统应用程序。OSEK ERIKA教程涵盖了许多主题,从OS基础知识、任务管理、操作系统调度器、中断处理程序、资源管理和通信机制等方面进行详细介绍。教程中也提供了很多实例程序和案例研究,通过这些案例的实践操作可以更好地理解和掌握OSEK ERIKA的使用。总之,学习OSEK ERIKA教程是非常有必要的,对于开发嵌入式系统应用程序和面向实时应用程序的软件工程师来说,这是非常有益的。 ### 回答3: OSEK ERIKA 是一个面向嵌入式系统和实时操作系统的开源操作系统内核。其主要优点是具有高效性、可组合性和可可重复使用性。OSEK ERIKA最初是由汽车公司为了满足其汽车电子产品开发的需求而开发的,而现在已经成为了一项广泛使用的技术。 OSEK ERIKA教程是让使用者学习和理解如何使用OSEK ERIKA操作系统内核的课程。教程提供了许多关于OSEK ERIKA操作系统内核和相关工具的信息,如任务、资源、消息、时钟、中断、定时器等等。通过学习这些内容,用户可以了解如何在实时嵌入式环境下使用OSEK ERIKA系统内核,使得系统的设计和开发变得更加简单和高效。 OSEK ERIKA教程的受众包括嵌入式系统工程师、软件开发人员以及学生等等,特别是对实时操作系统和嵌入式系统感兴趣的学生和专业人士。教程可以帮助这些目标群体学习并理解这一开源操作系统内核的工作原理和使用方法,提高他们的开发效率和工作质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值