KEIL RTX_Kernel使用小结
来源:互联网 发布:中国行政区域数据 编辑:程序博客网 时间:2024/04/29 23:35
前言:本人使用的是STM32F103VC开发板,标准的8MHz晶振,72MHz主频运行。
用M3处理器的话,不用实时操作系统显得太没效率了。正好也看到Micrium官方把uC/OS-III的源代码放出来了。于是从官网下了一个针对STM32F版本的uC/OS-III,修改了下里面的任务函数,改成点亮发光二极管,编译下载后不执行。一看Micrium官方这个版本是针对STM32F107的,互联网型,标准晶振是25MHz,我想可能是频率设置不对,我也不想去探索如何解决。
我从Keil官网上下载最新的MDK423,看到里面关于RTX_Kernel的介绍。以前写51单片机程序的时候知道RTX这个东西,但从来没用过。这次打算用下RTX_Kernel试试,毕竟RTX_Kernel是商用免费的,uC/OS是商用收费的。另外是ARM Keil自家的东西,想必也不错。
正式开始我的RTX_Kernel使用例程:
1、我的Keil MDK版本是此时从官网下载的最新版本MDK423,之前的Keil注册机在这里可用。
2、在ST官方网站下载STM32F10x_StdPeriph_Lib_V3.5.0,用这里面的工程作为工程模板。
3、依据ST官方库的例子,建立一个GPIO/IOToggle 工程。修改里面的IO端口与你的板子匹配。编译运行成功。
4、开始使用RTX_Kernel。在main.c中加入
- #inlude <rtl.h>
项目选项里,在Target下,Operating system选择 RTX Kernel复制
D:\Keil\ARM\Boards\ST\STM32F10X_EVAL\RTX_Blinky\RTX_Config.h到项目目录下,并将RTX_Config.h添加到项目中。
然后main.c的主要代码如下:
- /*----------------------------------------------------------------------------
- * Task 1
- *---------------------------------------------------------------------------*/
- __task void task1 (void) {
- for (;;) {
- led1on(); //点亮LED1,函数具体内容依照你的开发板
- os_dly_wait (10);
- led1off(); //熄灭LED1
- os_dly_wait (10);
- }
- }
- /*----------------------------------------------------------------------------
- * Task 2
- *---------------------------------------------------------------------------*/
- __task void task2 (void) {
- for (;;) {
- led2off(); //熄灭LED2,函数具体内容依照你的开发板
- os_dly_wait (10);
- led2on();
- os_dly_wait (10);
- }
- }
- /*----------------------------------------------------------------------------
- * Task 'init': 建立所有的任务
- *---------------------------------------------------------------------------*/
- __task void init_task (void) {
- id1 = os_tsk_create (task1, 0); /* start task phaseA */
- id2 = os_tsk_create (task2, 0); /* start task phaseB */
- os_tsk_delete_self ();
- }
- int main(void)
- {
- /*!< At this stage the microcontroller clock setting is already configured,
- this is done through SystemInit() function which is called from startup
- file (startup_stm32f10x_xx.s) before to branch to application main.
- To reconfigure the default setting of SystemInit() function, refer to
- system_stm32f10x.c file
- */
-
- /* To achieve GPIO toggling maximum frequency, the following sequence is mandatory.
- You can monitor PD0 or PD2 on the scope to measure the output signal.
- If you need to fine tune this frequency, you can add more GPIO set/reset
- cycles to minimize more the infinite loop timing.
- This code needs to be compiled with high speed optimization option.
- */
- GPIO_Config(); //IO口初始化函数,具体根据你的开发板
- os_sys_init (init_task);
- }
说明:编译时如果提示有3个函数定义冲突,在stm32f10x_it.c中屏蔽掉那三个函数即可。
5、RTX Kernel教程
实际上RTX Kernel API比较简单,相对于uC/OS-III而言。有一些uc/OS的基础的话,参照Keil帮助文档和rtl.h头文件,即可轻松使用RTX的API。简要总结如下:
首先说明一点,RTX是时间片轮转调度的,即相同任务优先级每个任务分得一定的时间片运行。uC/OS-II是不支持时间片轮转的,uC/OS-III开始支持时间片轮转调度。
- KEIL RTX_Kernel使用小结
- KEIL RTX_Kernel使用
- keil 使用笔记 (经典)
- KEIL c 的使用
- keil使用详解
- KEIL使用教程
- keil使用点滴
- Eclipse + keil 使用教程
- keil 5.16a使用
- Keil使用技巧
- Keil uVision4使用总结
- keil使用_笔记
- keil使用问题总结
- keil仿真器使用
- keil 帮助工具使用
- 使用keil & protues 进行仿真
- Keil使用中的若干问题(转)
- Keil:Source Browse的使用
- <Python基础教程>_第四章_总结
- Android开发中的MVC设计模式
- 对select表单控件进行美化
- Duang~ Android堆栈慘遭毁容?精神哥揭露毁容真相!
- centos安装Python2.7记录
- KEIL RTX_Kernel使用小结
- Thread Safety of shared_ptr
- Magento不启用URL重写,网址加上index.php的设置
- 会员卡管理系统技术解析(八)会员卡建卡记录添加
- sizeof和sizeof(string)的问题
- WCF : 如何将NetTcpBinding寄宿在IIS7上
- Android自定义ScrollView分段加载大文本数据到TextView
- hdu 1576 (A/B)
- Java 线程同步