结束裸奔时代:Keil RTX最小系统在STR912x上的实现

MDK版本:MDK-ARM Professional Version: 4.23

处理器:STR912FAW4x

目标:最小系统

首先,在Targer Option的Operating system里面选上RTX Kernel。

复制配置文件RTX_Conf_XX.c
从Keil的安装目录中的\Keil\ARM\Startup\里面找到对应处理器的RTX_Conf_XX.c文件,将其复制出来添加到项目里。对于STR912FAW4x,这个文件是\Keil\ARM\Startup\ST\里面的RTX_Conf_STR91x.c。
对于STR912FAW4x跑个最小系统,可以不改这个文件。当然,可修改#define OS_CLOCK这句,以获得正确的系统时钟。

复制并修改启动文件STR91x.s
我一开始使用的是2006版的文件,跑不起来。采用Keil安装目录自带的STR91x.s文件,位置在\Keil\ARM\Startup\ST\,将其复制出来覆盖旧的文件。
接下来修改这个STR91x.s文件。
将这一行注掉:
;SWIHandler      B       SWIHandler

将这一行
SWI_Addr        DCD     SWIHandler
修改为:
SWI_Addr        DCD     SWI_Handler

然后在向上几行的空白处添加:
IMPORT SWI_Handler
上面几步操作的作用是改变了原有的SWI调用,因为RTX内核要用SWI来实现任务调度。

禁止Setup Library Exception Handlers:
LEH_SETUP       EQU     0

修改Supervisor Mode的栈大小。手册给的最小值是32字节,对于初学者,在不了解系统的情况下,不妨改大一点:
SVC_Stack_Size  EQU     0x00000800

修改91x_it.c文件

如上所述,原有的SWI调用已经被RTX内核取代,因此要将91x_it.c中的SWI_Handler注掉:
#if 0
void SWI_Handler(void)
{
}
#endif

复制并修改retarget.c文件
位置在\Keil\ARM\Startup\

将所有外部调用去掉,修改后的3个函数变为:
int fputc(int ch, FILE *f) {
  //return (sendchar(ch));
  return 0;
}
int fgetc(FILE *f) {
  //return (sendchar(getkey()));
  return 0;
}
void _ttywrch(int ch) {
  //sendchar (ch);
}
如果不作这些修改的话,系统可能会挂掉。

使能和初始化外围
外围时钟使能:
SCU_AHBPeriphClockConfig(__VIC,ENABLE);
SCU_APBPeriphClockConfig(__TIM01, ENABLE);
外围初始化:
TIM_DeInit(TIM0);
VIC_DeInit();
这4行代码使得用于内核调度的TIM0和SWI中断能够运行,建议在内核初始化os_sys_init调用之前执行。

编写main.c文件
以下是简单的示例:

#include <rtl.h>

__task void task1 (void)  {
  while (1) {
    //LED闪灯/灭灯等操作

    os_dly_wait(50);
  }
}

int main(void) {
  //基本的初始化,包括上面说到的“使能和初始化外围”

  os_sys_init (task1);

  while (1)
  {
  }
}

参考资料

http://download.csdn.net/detail/zoogar/3983085 -- Building Applications with RL-ARM - Getting Started

http://download.csdn.net/detail/zoogar/3983081 -- ARM Real-Time Library Training(中文)

http://download.csdn.net/detail/zoogar/3983092 -- RL-ARM User's Guide

http://download.csdn.net/detail/zoogar/3983072 -- 中文入门文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值