新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2018-2-17
- 在线时间
- 1 小时
|
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]
|
|