Keil RTX最小系统在STM32F10x上的实现

来源:互联网 发布:mpp文件用什么打开mac 编辑:程序博客网 时间:2024/06/03 20:23

MDK版本:MDK-ARM Professional Version: 4.23
处理器:STM32F10x
目标:最小系统
首先,在Targer Option的Operating system里面选上RTX Kernel。

1. 复制配置文件RTX_Conf_CM.c
从Keil的安装目录中的\Keil\ARM\Startup\里面找到RTX_Conf_CM.c,将其复制出来并添加到项目里。对于STM32F10x最小系统,可以不改这个文件。当然,可修改#define OS_CLOCK这句,以获得正确的系统时钟。
2. 复制启动文件STM32F10x.s
裸奔的时候我使用的是文件版本号为V2.0.3的stm32f10x_vector.s,跑不起来。采用Keil安装目录自带的STM32F10x.s文件,位置在\Keil\ARM\Startup\ST\,将其复制出来添加到项目,并去掉stm32f10x_vector.s。
3. 修改stm32f10x_it.c文件
RTX内核重新实现了SVC调用,如果编译时出现SVC_Handler重复定义的错误,要将stm32f10x_it.c中的SVC_Handler注掉:

#if 0void SVC_Handler(void){}#endif


4. 复制并修改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);}


如果不作这些修改的话,系统可能会挂掉。
5. 编写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)  {  }}


6. 参考资料
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 -- 中文入门文档
http://home.eeworld.com.cn/my/space.php?uid=116357&do=blog&id=31714 -- 416561760 (姓名:迷失)写的关于STM32的systick定时器的帖子
http://apps.hi.baidu.com/share/detail/51652848 -- come_on_crysta的STM32 Systick编程及应用
STM32手册
Cortex-M3技术参考手册

原创粉丝点击