打印
[STM8]

ucos 2.52 移植 stm8

[复制链接]
6584|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
voidx|  楼主 | 2010-6-10 22:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 voidx 于 2011-5-17 12:21 编辑

多谢 “上树的猪”指正。

源文件在12楼。
沙发
voidx|  楼主 | 2010-6-11 12:26 | 只看该作者
3按任务,控制3LED闪烁。

#include "includes.h"

#define  OS_TASK_0_STK_SIZE                200
#define  OS_TASK_1_STK_SIZE                200
#define  OS_TASK_2_STK_SIZE                200

#define  OS_TASK_0_PRIO                    0
#define  OS_TASK_1_PRIO                    1
#define  OS_TASK_2_PRIO                    2

OS_STK  Task0Stack[OS_TASK_0_STK_SIZE];
OS_STK  Task1Stack[OS_TASK_1_STK_SIZE];
OS_STK  Task2Stack[OS_TASK_2_STK_SIZE];

#define LED0_On()    GPIOD->ODR |=    1<<3;
#define LED0_Off()   GPIOD->ODR &=  ~(1<<3);

#define LED1_On()    GPIOD->ODR |=    1<<2;
#define LED1_Off()   GPIOD->ODR &=  ~(1<<2);

#define LED2_On()    GPIOD->ODR |=    1<<0;
#define LED2_Off()   GPIOD->ODR &=  ~(1<<0);


void task0( void * pdata )
{
    while(1)
    {
        LED0_On();
        OSTimeDlyHMSM(0,0,0,500 );
        LED0_Off();
        OSTimeDlyHMSM(0,0,0,500 );
    }
   
}

void task1(void * pdata )
{
    while(1)
    {
        LED1_On();
        OSTimeDlyHMSM(0,0,0,300 );
        LED1_Off();
        OSTimeDlyHMSM(0,0,0,300 );
    }
   
}
void task2(void * pdata)
{
    while(1)
    {
        LED2_On();
        OSTimeDlyHMSM(0,0,0,100 );
        LED2_Off();
        OSTimeDlyHMSM(0,0,0,100);
    }   
}

void T4_Init(void)
{
       TIM4_ARRPreloadConfig(1);
       TIM4_PrescalerConfig(TIM4_PRESCALER_32,TIM4_PSCRELOADMODE_IMMEDIATE);  
       TIM4_SetAutoreload((F_CPU/32/OS_TICKS_PER_SEC));
       TIM4_Cmd(1);                  
       TIM4_ITConfig(TIM4_IT_UPDATE,1);   
}

int main()
{
        __disable_interrupt();
     
        CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);     
        GPIO_Init(GPIOD, GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_SLOW);         
        T4_Init();
            
        OSInit();
        
    OSTaskCreate( task0, (void *)OS_TASK_0_STK_SIZE, &Task0Stack[OS_TASK_0_STK_SIZE-1], OS_TASK_0_PRIO );
    OSTaskCreate( task1, (void *)OS_TASK_1_STK_SIZE, &Task1Stack[OS_TASK_1_STK_SIZE-1], OS_TASK_1_PRIO );
    OSTaskCreate( task2, (void *)OS_TASK_2_STK_SIZE, &Task2Stack[OS_TASK_2_STK_SIZE-1], OS_TASK_2_PRIO );
        
    OSStart();
        
    return  0;
}

使用特权

评论回复
板凳
乙天| | 2010-6-11 13:25 | 只看该作者
ucos2 占多大空间?

使用特权

评论回复
地板
tractor| | 2010-6-11 20:50 | 只看该作者
没什么实用意义,玩玩还可以

使用特权

评论回复
5
diylink| | 2010-6-17 17:00 | 只看该作者
mark

使用特权

评论回复
6
上树的猪| | 2011-5-16 17:05 | 只看该作者
__get_interrupt_state
__set_interrupt_state(cpu_sr)

怎么实现 呢?

使用特权

评论回复
7
上树的猪| | 2011-5-16 17:06 | 只看该作者
我现在 偷懒

就用  SIM   RIM  ,呵呵

使用特权

评论回复
8
CC2530| | 2011-5-16 17:10 | 只看该作者
本帖最后由 CC2530 于 2011-5-16 17:11 编辑
__get_interrupt_state
__set_interrupt_state(cpu_sr)

怎么实现 呢?
上树的猪 发表于 2011-5-16 17:05


IAR编译器自带。

使用特权

评论回复
9
上树的猪| | 2011-5-17 11:03 | 只看该作者
IAR编译器自带。
CC2530 发表于 2011-5-16 17:10



Warning[Pe223]: function "__get_interrupt_state" declared implicitly F:\software\ucos-ii\source\os_core.c 180
Warning[Pe223]: function "__set_interrupt_state" declared implicitly F:\software\ucos-ii\source\os_core.c 193


是要包含哪个头文件吗?

使用特权

评论回复
10
上树的猪| | 2011-5-17 11:05 | 只看该作者
看了你的源文件,  有点疑问
#define OS_ENTER_CRITICAL() cpu_sr=__get_interrupt_state()
#define OS_EXIT_CRITICAL()  __set_interrupt_state(cpu_sr)

1 .  __get_interrupt_state   关中断  吗?

使用特权

评论回复
11
上树的猪| | 2011-5-17 11:18 | 只看该作者
真不好意思, 原来 手册里有, 难得看.......惭愧啊


我觉  OS_ENTER_CRITICAL()  应 加一条 关中断的吧.

使用特权

评论回复
12
CC2530| | 2011-5-17 12:18 | 只看该作者
看了你的源文件,  有点疑问
#define OS_ENTER_CRITICAL() cpu_sr=__get_interrupt_state()
#define OS_EXIT_CRITICAL()  __set_interrupt_state(cpu_sr)

1 .  __get_interrupt_state   关中断  吗? ...
上树的猪 发表于 2011-5-17 11:05


确实少了关中断。
多谢指正。

改为:

#ifndef __always_inline__
#define __always_inline__  _Pragma("inline=forced") inline
#endif
   
typedef unsigned char critical_flag_t;     
   
__always_inline__  static  critical_flag_t CriticalEnter(void)
{
critical_flag_t flags=__get_interrupt_state();
        __disable_interrupt();
        return flags;
}
__always_inline__  static void CriticalExit(critical_flag_t flags)
{
       __set_interrupt_state(flags);
}   
   
#if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() cpu_sr=CriticalEnter()
#define OS_EXIT_CRITICAL()  CriticalExit(cpu_sr)
#endif

ucos.rar

3.92 MB

使用特权

评论回复
13
上树的猪| | 2011-5-17 14:44 | 只看该作者
呵呵,惭愧啊.  愚者千虑必有一得嘛.

果然是高手啊, 编译器, 芯片 都吃的 很透.  受教了!

使用特权

评论回复
14
fyh123| | 2011-5-25 11:48 | 只看该作者
ucos库太老了,啥时候能升级到Version : V2.89啊

使用特权

评论回复
15
chrisnepher| | 2011-9-23 17:09 | 只看该作者
前辈,我最近刚好在搞UCOS-II移植到STM8,有些不懂的问题想要请教您,
我的QQ是85146877,麻烦++,感激涕零++;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:上官一出惊天地,   金虹一现震江湖。

35

主题

118

帖子

2

粉丝