[STM8] ucos 2.52 移植 stm8

[复制链接]
7736|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 | 显示全部楼层
没什么实用意义,玩玩还可以
diylink 发表于 2010-6-17 17:00 | 显示全部楼层
上树的猪 发表于 2011-5-16 17:05 | 显示全部楼层
__get_interrupt_state
__set_interrupt_state(cpu_sr)

怎么实现 呢?
上树的猪 发表于 2011-5-16 17:06 | 显示全部楼层
我现在 偷懒

就用  SIM   RIM  ,呵呵
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编译器自带。
上树的猪 发表于 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


是要包含哪个头文件吗?
上树的猪 发表于 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   关中断  吗?
上树的猪 发表于 2011-5-17 11:18 | 显示全部楼层
真不好意思, 原来 手册里有, 难得看.......惭愧啊
IAR_STM8.jpg

我觉  OS_ENTER_CRITICAL()  应 加一条 关中断的吧.
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, 下载次数: 4461

上树的猪 发表于 2011-5-17 14:44 | 显示全部楼层
呵呵,惭愧啊.  愚者千虑必有一得嘛.

果然是高手啊, 编译器, 芯片 都吃的 很透.  受教了!
fyh123 发表于 2011-5-25 11:48 | 显示全部楼层
ucos库太老了,啥时候能升级到Version : V2.89啊
chrisnepher 发表于 2011-9-23 17:09 | 显示全部楼层
前辈,我最近刚好在搞UCOS-II移植到STM8,有些不懂的问题想要请教您,
我的QQ是85146877,麻烦++,感激涕零++;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

35

主题

118

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部