研究生
最后登录1970-1-1
在线时间 小时
注册时间2015-4-2
|
在一个ucos工程中,刚刚板级初始化之后,读18b20温度,串口打印是可以读到温度的,如下。- void BSP_Init(void)
- {
-
-
- USART1_Config();
- printf("USART1初始化完毕\r\n");
- USART2_Config();
- printf("USART2初始化完毕\r\n");
- LED_GPIO_Config();
- printf("LED初始化完毕\r\n");
- NVIC_Configuration();
- printf("NVIC初始化完毕\r\n");
- TIM2_Configuration();
- printf("Timer2初始化完毕\r\n");
-
- if(DS18B20_Init()==0)
- printf("DS18B20初始化完毕\r\n");
- else
- printf("DS18B20初始化失败\r\n");
- printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp());
- SysTick_init();
-
- }
复制代码 之后启动ucos,OSStart(&err); 将printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp()); 这句话放在某个任务中,打印出来的就一直是0。该任务如下
- void Task_LED1(void *p_arg)
- {
- CPU_SR_ALLOC();
- OS_ERR err;
- (void)p_arg;
- while (1)
- {
- OS_CRITICAL_ENTER();//进入临界区
- printf("\r\n temperature %.1f\r\n",DS18B20_Get_Temp());
- OS_CRITICAL_EXIT(); //退出临界区
- OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
- }
- }
复制代码 18b20驱动中,延时是采用定时器的,中断函数如下
- void TIM2_IRQHandler(void)
- {
- if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
- {
- OSIntEnter(); //用于统计中断的嵌套层数,对嵌套层数+1
- Timer2_count++;
- TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
- OSIntExit(); //对嵌套层数减1,在退出中断前启动任务调度
- }
- }
复制代码 在没挂OS之前是可以正常打印出温度,但是挂完OS之后,打印放在任务中,就读到的是0. |
|