注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
orlando_3的个人空间 https://home.eeworld.com.cn/space-uid-164436.html [收藏] [复制] [分享] [RSS]
日志

UCOS在STM32上的移植总结

已有 5417 次阅读2010-3-21 12:57 |

                 学习报告

哈尔滨工业大学深圳研究生院 方文钊

 

 

经过这两天的研究和实验,终于完成了uc/osstm32上的移植,并成功实现两个任务的切换。现在主要说明一下。

一、准备

下载Micrium-ST-uCOS-II-LCD-STM32Micrium公司关于STM32LCD例程)作为参考。我们需要的是其中的uCOS-II\PortsuCOS-II\Source文件夹里的内容。

二、改写

根据文档《uc/os-ii and ARM Cortex-M3 Processors》说明,改变其中一些关键函数,用于系统的移植。

2.1编写bsp文件

除了必要的硬件初始化以外,要编写OS_CPU_SysTickClkFreq()函数,这个在OS_CPU_SysTickInit()中会被调用,主要是是为了确定处理器时钟频率。参考例程程序,我的编写程序如下:

INT32U  OS_CPU_SysTickClkFreq (void)

{     RCC_ClocksTypeDef  rcc_clocks;

    RCC_GetClocksFreq(&rcc_clocks);

    return ((INT32U)rcc_clocks.HCLK_Frequency);

}

2.2 改变中断向量表

这里要用到两个启动文件:stm32f10x_vector.scortexm3_macro.s,这两个文件不要用例程中的,例程中的stm32f10x_vector.s定义的中断向量入口程序与固件库中stm32f10x_it.c中的中断入口程序不一样,网上许多IAR程序编译的例程文件中都有这两个文件,可以使用,但是仍然有2个入口程序不一样,这个就是PendSVSysTickHandler。所以需要自己改变一下,ucos系统文件中定义的PendSVSysTickHandler的入口函数分别是OS_CPU_PendSVHandlerOS_CPU_SysTickHandler,所以要把stm32f10x_vector.s中的PendSVSysTickHandler替换一下,注意要替换两个位置。IMPORT开头的和DCD开头的。这样中断向量就指向成功了。

2.3 编写适当的h文件

STM32的头文件编写挺有学问,这个要自己慢慢领悟,当编译出现问题,某个东西没被声明时就是某个头文件没有包含进去。

三、编写应用程序

我编写的是2led等交替闪烁的应用程序。如下:

void AppStartTask_1 (void *p_arg)

{

      (void)p_arg;

       OS_CPU_SysTickInit();

       while(1)

       {

              GPIO_SetBits(GPIOF, GPIO_Pin_6);

              Delay_1ms(1000);

              GPIO_ResetBits(GPIOF, GPIO_Pin_6);

              OSTimeDly(OS_TICKS_PER_SEC);

       }

}

void AppStartTask_2 (void *p_arg)

{

      while(1)

       {         

              GPIO_SetBits(GPIOF, GPIO_Pin_9);

              Delay_1ms(1000);

              GPIO_ResetBits(GPIOF, GPIO_Pin_9);            

              OSTimeDly(OS_TICKS_PER_SEC);

       }

}

四、完善程序

最后就是要完善程序,该驱动的驱动,该启动的启动,完全做好以后,就可以在开发板上运行了。

发表评论 评论 (1 个评论)
回复 soso 2010-3-21 13:30
谢谢分享 期待更多哦

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章