OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1923|回复: 3

UCOSII相关的问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-2-17
在线时间
1 小时
发表于 2018-2-17 17:28:09 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 EastWind 于 2018-2-17 17:35 编辑

对着mini板的不完全手册学到了第四十节--usOSII任务调度,自己添加了一个另一个任务函数,实现现象:程序能跑,屏幕上正常显示,LED闪烁正常,但是复位或者上电重启之后,屏幕白屏,应该是卡在了初始化,没有其他的实验现象了,换成其他的任务函数,比如DS18B20,还是如此,且温度数据一直为0.代码如下,求大神解答问题!!!
   
[mw_shl_code=c,true]#include "led.h"  
#include "lcd.h"
#include "delay.h"
#include "sys.h"
#include "includes.h"

short temperature;

/////////////////////////UCOSII任务设置///////////////////////////////////
//START 任务
//设置任务优先级
#define START_TASK_PRIO                              10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE                                  64
//任务堆栈       
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);       
                          
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO                               7
//设置任务堆栈大小
#define LED0_STK_SIZE                                      64
//任务堆栈       
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);


//LED1任务
//设置任务优先级
#define LED1_TASK_PRIO                               6
//设置任务堆栈大小
#define LED1_STK_SIZE                                          64
//任务堆栈
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任务函数
void led1_task(void *pdata);

//LCD任务
//设置任务优先级
#define LCD_TASK_PRIO       3
//设置任务堆栈大小
#define LCD_STK_SIZE                          64
//任务堆栈
OS_STK LCD_TASK_STK[LCD_STK_SIZE];
//任务函数
void lcd_task(void *pdata);


int main(void)
{       
        delay_init();                     //延时函数初始化       
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
        LED_Init();                          //初始化与LED连接的硬件接口
          
        //uart_init(9600);                 //串口初始化为9600
        LCD_Init();
        POINT_COLOR=RED;//设置字体为红色   
         
        OSInit();   
        OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
        OSStart();       
}

          
//开始任务
void start_task(void *pdata)
{
  OS_CPU_SR cpu_sr=0;
        pdata = pdata;
  OS_ENTER_CRITICAL();                        //进入临界区(无法被中断打断)   
        OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);                                                  
        OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);         
        OSTaskCreate(lcd_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);       
        OSTaskSuspend(START_TASK_PRIO);        //挂起起始任务.
        OS_EXIT_CRITICAL();                                //退出临界区(可以被中断打断)
}

//LED0任务
void led0_task(void *pdata)
{                
        while(1)
        {
                LED0=0;
                delay_ms(100);
                LED0=1;
                delay_ms(900);
        }
}

//LED1任务
void led1_task(void *pdata)
{          
        while(1)
        {
                LED1=0;
                delay_ms(300);
                LED1=1;
                delay_ms(300);
        }
}

//LCD任务
void lcd_task(void *pdata)
{
        u16 num;
        while(1)
        {       
                for(num=0;num<100;num++)
                {
                        LCD_ShowNum(60+40+8,150,num,2,24);        //显示正数部分                                              
                        delay_ms(1000);
                }
        }
}[/mw_shl_code]
            

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-2-17 19:13:22 | 显示全部楼层
如果上ucosii,至少不要用delay_ms了,改为OSTimeDLY或者OSTimeDLYHMSM吧!否则系统无法进行任务调度。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-2-19 20:12:33 | 显示全部楼层
仿真找下问题。
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-2-17
在线时间
1 小时
 楼主| 发表于 2018-2-21 17:15:44 | 显示全部楼层
本帖最后由 EastWind 于 2018-2-21 17:17 编辑
backup2k 发表于 2018-2-17 19:13
如果上ucosii,至少不要用delay_ms了,改为OSTimeDLY或者OSTimeDLYHMSM吧!否则系统无法进行任务调度。

但是板子带的教程就是用的delay_ms,详见附上的程序的led任务。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 12:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表