原创 STM32上RTOS初探之一(Keil ARTX)

2008-8-14 10:24 8249 5 6 分类: MCU/ 嵌入式

Keil ARTX(Advanced Real-Time eXecutive)是Keil为ARM 系列所提供的一个小型实时操作系统,整合于其UV3开发环境之中.


在下载并安装了RealView MDK个人学习版后,ARTX同时安装到了C:\Keil\ARM\RL\RTX目录下,在C:\Keil\ARM\Boards\Keil\MCBSTM32\STLIB_RTX_Blinky目录下有STM32的例子程序。经过简单修改,运行在万利开发板上。


#include <RTL.h>
#include <stm32f10x_lib.h>        


OS_TID t_phaseA;               /* assigned task id of task: phase_a */
OS_TID t_phaseB;               /* assigned task id of task: phase_b */
OS_TID t_phaseC;               /* assigned task id of task: phase_c */
OS_TID t_phaseD;                /* assigned task id of task: phase_d */

#define LED_A   GPIO_Pin_4
#define LED_B   GPIO_Pin_5
#define LED_C   GPIO_Pin_6
#define LED_D   GPIO_Pin_7


#define LED_On(led)     GPIO_SetBits(GPIOC, led)
#define LED_Off(led)    GPIO_ResetBits(GPIOC, led)


/* Import functions from Setup.c                                             */
extern void SetupClock  (void);
extern void SetupLED    (void);



/*----------------------------------------------------------------------------
 *        Task 1 'phaseA': Phase A output
 *---------------------------------------------------------------------------*/
void phaseA (void) __task {
  for (;;) {
    LED_On (LED_A);
   os_dly_wait (100);
   LED_Off(LED_A);
   os_dly_wait (100);
  }
}


/*----------------------------------------------------------------------------
 *        Task 2 'phaseB': Phase B output
 *---------------------------------------------------------------------------*/
void phaseB (void) __task {
  for (;;) {
     LED_On (LED_B);
    os_dly_wait (100);
    LED_Off(LED_B);
    os_dly_wait (100);
  }
}


/*----------------------------------------------------------------------------
 *        Task 3 'phaseC': Phase C output
 *---------------------------------------------------------------------------*/
void phaseC (void) __task {
  for (;;) {
    LED_On (LED_C);
    os_dly_wait (100);
    LED_Off(LED_C);
    os_dly_wait (100);
  }
}


/*----------------------------------------------------------------------------
 *        Task 4 'phaseD': Phase D output
 *---------------------------------------------------------------------------*/
void phaseD (void) __task {
  for (;;) {
    LED_On (LED_D);
    os_dly_wait (100);
    LED_Off(LED_D);
   os_dly_wait (100);
  }
}


/*----------------------------------------------------------------------------
 *        Task 8 'init': Initialize
 *---------------------------------------------------------------------------*/
void init (void) __task {


  t_phaseA = os_tsk_create (phaseA, 0);  /* start task phaseA     */
  os_dly_wait (50);
  t_phaseB = os_tsk_create (phaseB, 0);  /* start task phaseB      */
  os_dly_wait (50);
  t_phaseC = os_tsk_create (phaseC, 0);  /* start task phaseC       */
  os_dly_wait (50);
  t_phaseD = os_tsk_create (phaseD, 0);  /* start task phaseD       */
  os_tsk_delete_self ();
}


/*----------------------------------------------------------------------------
 *        Main: Initialize and start RTX Kernel
 *---------------------------------------------------------------------------*/
int main (void) {


  SetupClock();
  SetupLED  ();
  os_sys_init (init);                    /* Initialize RTX and start init    */
}


/*----------------------------------------------------------------------------
 * end of file
 *---------------------------------------------------------------------------*/


经过初试化后,os_sys_init (init)启动了初试化任务。在初试化任务中,又先后启动了4个任务,启动后,删除初试化任务。这4个任务各自控制一个LED的开关。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户230766 2009-11-2 20:24

感觉RTX怎么样?比较ucOS呢?官方出了ucLinux哦!感兴趣可以下载玩玩!
相关推荐阅读
用户1173172 2009-05-19 00:27
STM32中利用通用定时器产生精确延时
通用定时器是一个通过可编程预分频器驱动的16 位自动装载计数器构成。先初始化  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  TIM_Ti...
用户1173172 2008-08-13 13:56
团购STM32开发板中的CAN收发问题
上周收到团购活动的开发板,经过简单点亮LED的程序后,开始调试板上的CAN通讯接口。首先运行配套光盘中的CAN例子程序,在自发自收工作模式下,一切正常。后来根据以往的经验,把程序中的自发自收模式改成普...
用户1173172 2008-08-01 16:23
CAN简介
在项目中计划采用CAN总线作为通信,因此特地又复习了一遍相关的资料,整理出了一些CAN的简单介绍,准备给项目组的有关人员做个培训。...
用户1173172 2008-07-31 23:25
基于STM32和RFID的节水控制系统
STM32项目/学习计划表项目名称 基于STM32和RFID的节水控制系统请点击以下链接更新您的个人资料(包括“职位,部门,单位名称,地址,邮编,电子邮箱,电话”),以便我们能及时联系您并快速发送开发...
我要评论
1
5
关闭 站长推荐上一条 /3 下一条