查看: 976|回复: 0
打印 上一主题 下一主题

STM8S EMBOS 基础demo

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-17 18:38:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Embos 是一个实时操作系统,该操作系统适用于STM8S这类低端单片机的嵌入式场合,因为其具有相对较小的基础ROM和RAM需求,因此适合在此类MCU上进行使用,并且具备电源管理功能,因此可以有效的降低系统的运行功耗。
本操作系统的具体功能函数是以lib的文件方式提供的,无法知道其具体的运行过程。这对于操作系统的理解有点难度,但是对于项目的移植却很好,只需要加载部分的.h文件即可完成操作系统的移植任务。
对于一个操作系统而言,其一定有一个系统滴答时钟,来进行系统任务的切换工作。因此对于embos 而言同样适用。在对系统进行移植时,我们仅需要修改的地方就是建议一个系统滴答时钟,并在中断函数中建立任务的切换机制。
Embos 这个操作系统,具备系统时钟的测量功能,如果需要调用这个功能建议使用16以上的定时器来完成,如果只是为了实现滴答时钟的切换工作则建议使用基础时钟TIM4来进行任务接口即可。
这个lib是从IAR STM8S的 example 里面找到了,自己做了一下简单的移植!
下面简要介绍系统移植的说明:
对STM8S的TIM4进行初始化配置,完成1ms的定时器中断功能
#define OS_FSYS (16000000uL)  /* Standard setting is 16 MHz           */
#define OS_PCLK_DIVIDER  (1)

#define OS_PCLK_TIMER (OS_FSYS / OS_PCLK_DIVIDER)

#define OS_TIMER_RELOAD ((OS_PCLK_TIMER / 1000) - 1)
void OS_InitHW(void) {

  OS_IncDI();                  // Disable interrupts

         CLK_CKDIVR =  0x00;/*设置时钟为内部16M高速时钟*/
         //使能外设时钟
         //  CLK_PCKENR |=0x7F;  
  
  //CLK_CKDIVR_CPUDIV = 0 ;
   CLK_CKDIVR&= (~0x18);/*使能内部时钟*/
          CLK_CKDIVR_HSIDIV = 0;///    //1分频
  TIM4_PSCR_PSC =7; //           采用128分频
  TIM4_ARR = 0x76;                  //每1ms中断一次
  TIM4_IER = 0x01;                   //允许更新中断
  TIM4_CR1 = 0x01;                   //计数器使能,开始计数
  OS_DecRI();                  // Restore interrupt state
}
//中断处理函数,建议系统滴答时钟的切换工作
#pragma vector=0x19
static __interrupt void OS_IsrTickHandler(void) {
  //
  // Clear interrupt pending condition...
  //
  TIM4_SR_UIF = 0;

  OS_EnterInterrupt();
  OS_HandleTick();
  OS_LeaveInterrupt();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表