TI中文支持网
TI专业的中文技术问题搜集分享网站

关于延迟函数问题

请教各位专家:

我想在COLLECTOR.C 历程中调用50MS 的延迟函数,通过查询发现很多函数能实现,例如 SLEEP ,task_sleep , CPUdelay(8000*50);

如下问题:

1、请教延迟函数除上诉函数以外还有哪些延迟函数,它们的功能如何定义,在应用上有何区别

2、在COLLECTOR.C 中有进程和任务的调度,应该用哪种延迟函数合适。

Kevin Qiu1:

CPUdelay使用delay loop来实现延时,其延时单位为指令周期。

//*****************************************************************************////! \brief Provide a small delay.//!//! This function provides means for generating a constant length delay. It//! is written in assembly to keep the delay consistent across tool chains,//! avoiding the need to tune the delay based on the tool chain in use.//!//! The loop takes 3 cycles/loop.//!//! \param ui32Count is the number of delay loop iterations to perform.//!//! \return None////*****************************************************************************extern void CPUdelay(uint32_t ui32Count);

Task_sleep是让出对MCU的占用,可以让其他task得到执行或者执行idle task从而进入低功耗状态。它的计时单位是systick,默认为10us。

Sleep()函数的作用仅仅是让程序停止运行一段时间

自由飞翔:

回复 Viki Shi:

csf.c

void Csf_deviceSensorDataUpdate(ApiMac_sAddr_t *pSrcAddr, int8_t rssi,

                               Smsgs_sensorMsg_t *pMsg)

{

   Board_Led_toggle(board_led_type_LED2);

   LCD_WRITE_STRING_VALUE("Sensor 0x", pSrcAddr->addr.shortAddr, 16, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageHead, 8, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageNo, 8, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageType, 8, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageUnit, 8, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageAction, 8, 6);

   LCD_WRITE_STRING_VALUE("csf.c:receive_data[667]", pMsg->SensorAlarm.AlarmMessageTail, 8, 6);

   Gsm_CallPhone("xxxxxxxxxxxxxxxxx");   //调用用户函数 其中执行了 TASK_SLEEP 函数

#if defined(MT_CSF)

   MTCSF_sensorUpdateIndCB(pSrcAddr, rssi, pMsg);

#endif

}

bool  Gsm_CallPhone(unsigned char *TargetPhoneText)

{  

   unsigned char  CodeStr[30]={'\0'};     //接收数据缓冲区

 //  RebackBuf=buf;

   sprintf((char *)CodeStr,"%s%s;\r\n",F_ORDER_ATD,TargetPhoneText);

// LcdShowStr(0, 0, "                                  ");

//LcdShowStr(0, 0, CodeStr);

UartWrite_TC35(CodeStr, strlen((const char *)CodeStr),30,F_REBACK_STR);//发送用户信息内容。

   Task_sleep(20);

   UART_write(hUart, F_ORDER_ATH, sizeof(F_ORDER_ATH)-1);

  //LcdShowStr(0, 1, "                                  ");

//LcdShowStr(0, 1,"CALL PHONE");

return true;

}

Viki Shi:

回复 自由飞翔:

Gsm_CallPhone 这不是例程代码吧?csf.c里没找到这个函数

自由飞翔:

回复 Viki Shi:

这是我自己写的函数

Viki Shi:

回复 自由飞翔:

建议callback里不要用task_sleep

赞(0)
未经允许不得转载:TI中文支持网 » 关于延迟函数问题
分享到: 更多 (0)