OpenEdv-开源电子网

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

mini板下载ucosii调用任务问题

[复制链接]

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
发表于 2017-4-22 11:05:59 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 辉常可乐 于 2017-4-24 14:28 编辑

在mini板上用ucos操作系统调用了三个任务分别是跑马灯、DHT11测温湿度、BMP180测气压,发现程序只全程执行了一次就停住了,有人遇到过这种情况吗??程序代码如下:(串口打印出132就不再打印了)




DHT11,BMP180组合 (ucos).zip

584.68 KB, 下载次数: 116

最佳答案

查看完整内容[请看2#楼]

都有系统了.延时当然要用这玩意了.OSTimeDlyHMSM(0,0,0,200);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6656
金钱
6656
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-4-22 11:06:00 | 显示全部楼层
辉常可乐 发表于 2017-4-24 09:30
这是修改后的代码,现在三个任务可以正常运行,但是DHT11显示的数字不正常,能帮忙看看吗?

都有系统了.延时当然要用这玩意了.OSTimeDlyHMSM(0,0,0,200);
回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-22 11:08:57 | 显示全部楼层
[mw_shl_code=applescript,true]//éèÖÃèÎÎñ¶ÑÕ»′óD¡
#define LED_STK_SIZE     64
#define DHT11_STK_SIZE    64
#define BMP180_STK_SIZE    64
#define START_STK_SIZE   512

//éèÖÃèÎÎñóÅÏ輶
#define LED_TASK_Prio       9
#define DHT11_TASK_Prio      5
#define BMP180_TASK_Prio     2
#define START_TASK_Prio     10

//èÎÎñ¶ÑÕ»
OS_STK  TASK_LED_STK[LED_STK_SIZE];
OS_STK  TASK_DHT11_STK[DHT11_STK_SIZE];
OS_STK  TASK_BMP180_STK[BMP180_STK_SIZE];
OS_STK  TASK_START_STK[START_STK_SIZE];
//èÎÎñéêÃ÷
void TaskStart(void *pdata);
void TaskLed(void *pdata);
void TaskDht11(void *pdata);
void TaskBmp180(void *pdata);

//Ïμí3ê±ÖóÅäÖÃoˉêy
void SysTick_Configuration(void);

         
//Mini STM32¿a·¢°åucos·¶ày
//»ùóúucos2.52ÄúoË.
//ÕyμãÔ-×ó@ALIENTEK
//www.openedv.com
//2010.12.15                         
int main(void)
{                                   
//        Stm32_Clock_Init(9); //Ïμí3ê±ÖóéèÖÃ
        NVIC_Configuration();
        delay_init(72);             //Ñóê±3õê¼»ˉ
        uart_init(9600);         //′®¿ú3õê¼»ˉÎa9600
        LED_Init();                           //3õê¼»ˉóëLEDᬽóμÄó2¼t½ó¿ú  
  LCD_Init();  //??? LCD
  IIC_PortInit();
        POINT_COLOR=RED;//???????
   LCD_ShowString(60,50,"WarShip STM32");
   LCD_ShowString(60,70,"DHT11  TEST");
   LCD_ShowString(60,90,"ATOM@ALIENTEK");
   LCD_ShowString(60,110,"2017/4/22");
        SysTick_Configuration();
        OSInit();
        OSTaskCreate( TaskStart,        //task pointer
                                        (void *)0,        //parameter
                                        (OS_STK *)&TASK_START_STK[START_STK_SIZE-1],        //task stack top pointer
                                        START_TASK_Prio );        //task priority
       
        OSStart();
        return 0;          
}
//¿aê¼èÎÎñ
void TaskStart(void * pdata)
{
        pdata = pdata;
        OS_ENTER_CRITICAL();   
        OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio);
        OSTaskCreate(TaskDht11, (void * )0, (OS_STK *)&TASK_DHT11_STK[DHT11_STK_SIZE-1], DHT11_TASK_Prio);
        OSTaskCreate(TaskBmp180, (void * )0, (OS_STK *)&TASK_BMP180_STK[BMP180_STK_SIZE-1], BMP180_TASK_Prio);
                OSTaskSuspend(START_TASK_Prio);        //suspend but not delete
        OS_EXIT_CRITICAL();
}
//èÎÎñ1
//¿ØÖÆDS0μÄááÃe.
void TaskLed(void *pdata)
{
        while(1)
        {
//                 LED0=!LED0;
//                 OSTimeDlyHMSM(0,0,0,500);                       
                LED1=0;
                LED0=1;
                delay_ms(500);
                LED1=1;
                LED0=0;
                delay_ms(500);
                printf("1\n\n");
        }
}
//èÎÎñ2
//¿ØÖÆDS1μÄááÃe.
void TaskDht11(void *pdata)
{
while(1)
{
//                 LED1=!LED1;
//                 OSTimeDlyHMSM(0,0,0,200);       
        u8 temperature;
u8 humidity;
while(DHT11_Init())  //DHT11 ???
{
LCD_ShowString(60,130,"DHT11 Error");
delay_ms(200);
LCD_ShowString(60,150,"Please Check!        ");
delay_ms(200);
}
LCD_ShowString(60,130,"DHT11 OK");
POINT_COLOR=BLUE;//???????
LCD_ShowString(60,150,"Temp:   C");
LCD_ShowString(60,170,"Humi:   %");
DHT11_Read_Data(&temperature,&humidity); //??????
LCD_ShowNum(100,150,temperature,2,16); //????
LCD_ShowNum(100,170,humidity,2,16); //????
delay_ms(1000);
printf("2\n\n");

}
}

void TaskBmp180(void *pdata)
{
        while(1)
        {
//                 LED1=!LED1;
//                 OSTimeDlyHMSM(0,0,0,200);       
        long UT,UP;
  Read_CalibrationData(); //??BMP180?????
         BMP180_ID = BMP180_ReadOneByte(0xd0);
   POINT_COLOR=BLUE;
                LCD_ShowString(60,190,"Press:      Pa");
  LCD_ShowString(60,210,"Temp1:   C");
UT=Get_BMP180UT();
UP=Get_BMP180UP();
Convert_UncompensatedToTrue(UT,UP);
LCD_ShowNum(105,190,True_Press,6,16);
  LCD_ShowNum(105,210,True_Temp,2,16);       
                delay_ms(1000);
                printf("3\n\n");
        }

}          

void SysTick_Configuration(void)
{
        SysTick->CTRL&=~(1<<2);//SYSTICKê1ó&#195;ía2&#191;ê±&#214;ó&#212;′
        SysTick->CTRL|=1<<1;   //&#191;a&#198;&#244;SYSTICK&#214;D&#182;&#207;
        SysTick->LOAD=9000;    //2úéú1ms&#214;D&#182;&#207;
        //bit2&#199;&#229;&#191;&#213;,&#209;&#161;&#212;&#241;ía2&#191;ê±&#214;ó  HCLK/8
        SysTick->CTRL|=1<<0;   
}
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6656
金钱
6656
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-4-23 08:55:24 | 显示全部楼层
应该是优先级任务最高的那个 ,程序有问题,卡住了..
回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-24 09:28:52 | 显示全部楼层
操作系统 发表于 2017-4-23 08:55
应该是优先级任务最高的那个 ,程序有问题,卡住了..

我通过串口打印1、2、3的时候发现任务在DHT11那边被卡住了,而且设置优先级三个任务的优先级高低只要高于开始任务的优先级,应该就不影响吧,DHT11那边实在找不出哪里出问题了。。
回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-24 09:30:46 | 显示全部楼层
这是修改后的代码,现在三个任务可以正常运行,但是DHT11显示的数字不正常,能帮忙看看吗?

DHT11,BMP180组合 (ucos).zip

584.68 KB, 下载次数: 128

回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-24 22:55:05 | 显示全部楼层
操作系统 发表于 2017-4-24 19:29
都有系统了.延时当然要用这玩意了.OSTimeDlyHMSM(0,0,0,200);

好像这样也并没有解决问题,我用debug调试,一步步执行程序,得到的温湿度是没有问题的,LCD显示也正常,只不过当程序连续执行时,温湿度显示就会出现问题
回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-24 22:58:27 | 显示全部楼层
这是调试时的温湿度值(右下角)
1.png
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6656
金钱
6656
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-4-24 23:14:29 | 显示全部楼层
辉常可乐 发表于 2017-4-24 22:58
这是调试时的温湿度值(右下角)

全部换成这样子的格式
回复

使用道具 举报

20

主题

65

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2016-11-3
在线时间
79 小时
 楼主| 发表于 2017-4-26 21:54:30 | 显示全部楼层
操作系统 发表于 2017-4-24 23:14
全部换成这样子的格式

请问您说的更换是在主函数里面更换还是要将整个传感器的C文件也都更换
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 00:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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