搭建第一个ucos-ii嵌入式程序---基于freescale K60硬件平台

一 修改两处异常宏定义

在我们上一篇文章《初识ucos操作系统-----基于freescale K60硬件平台的ucos-ii的移植》里说到,ucos-ii源码sdk中,异常ISR服务分别为“OS_CPU_PendSVHandler”和“OS_CPU_SysTickHandler”,但是我们的SoC的软件开发包中的名字是“PendSV_Handler”和“SysTick_Handler”,我们需要将这两个地方做统一,可以选择使用两者中的一个名字,但是要保证SoC软件开发包sdk和ucos-ii开发包中的名字一致,这里我们统一使用为“PendSV_Handler”和“SysTick_Handler”。

该ISR定义主要在如下几个文件中
在这里插入图PendSV_Handler相关片描述
在这里插入图片描述

二 创建第一个task

根据我们写单片机程序的步骤,创建task之前,需要做很多硬件资源的初始化,不过这些初始化工作,SoC的软件sdk开发包已经帮我们做好了,我们就不需要再花精力在这个上面了,但是有一个初始化,我们不得不重点关注,也是需要我们自己写初始化代码的。

根据上一篇文章《初始ucos操作系统-----基于freescale K60硬件平台的ucos-ii的移植初始ucos操作系统-----基于freescale K60硬件平台的ucos-ii的移植》里说到,ucos-ii的核心是一个时间片在轮转,该定时器每隔一段时间触发一次PendSV异常,从而实现任务调度的目的。这个定时器就是ARM内核自带的systick定时器,SoC的软件开发包sdk中并未使能,我们需要在启动ucos-ii之前,先使能这个定时器,让它开始工作。

我们调用cortex-m内核提供的函数SysTick_Config初始化systick,如下

SysTick_Config(CLOCK_GetFreq(kCLOCK_CoreSysClk)/OS_TICKS_PER_SEC);

#define OS_TICKS_PER_SEC        100u   /* Set the number of ticks in one second

OS_TICKS_PER_SEC表示1s中产生多少次systick中断,定义其=100,说明systick的中断周期为10ms,也就是说每10ms,定时器会轮转调度一次,触发一次PendSV,产生任务调度。

其他硬件资源的初始化,这个就需要根据我们具体实现的目的做相关初始化了,比如说我们想要点亮一个led灯,那么我们就需要初始化GPIO为输出配置,输出为高电平等等,相信这个对很多熟悉单片机开发的同学来说,都比较简单,就不做一一介绍了。

初始化完成之后,我们就可以创建第一个task了,该步骤为:OSInit、OSTaskCreate、OSStart,其中Init和Start就是调用ucos的接口API做初始化,和启动ucos来管理的作用,这两个函数没有任何参数,简单调用即可。

OSTaskCreate是创建一个我们自己的任务task的函数接口,这个函数的使用如下,可阅读源码,了解如何调用它

OSTaskCreate(Task_LED,(void *)0,
                 &startup_task_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO);

其函数参数分别为,任务task指针,任务参数,任务堆栈指针,任务优先级

static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE] = {0};
#define STARTUP_TASK_PRIO      5

void Task_LED(void *p_arg)
{
    (void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告


    while(1)
    {
      if((PTE->PDIR >>26)==0)  //如果按键被按下
      {
        PTE->PDOR &=~(1<<6);
      }
      else
        PTE->PDOR |=(1<<6);
    }
}

创建成功用户task,并调用OSStart之后,ucos操作系统就会帮我们管理各个任务,并运行它们了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值