在项目中需要进行RTC时间更新,允许蓝牙断开的情况下,请问TMOS_TimerInit(0)这个程序需要在什么位置调用,我在关机的任务事件中 断开蓝牙并更新了RTC,再次开机,手机可以搜索到设备,但不能连接。
蓝牙部分的函数重新调用就可以了。具体到更新RTC时间后,按照该函数重新配置即可:
void Systemshutdown(FunctionalState s)
{
uint16_t Tyear,Tmon,Tday,Thour,Tmin,Tsec ;
if(s == DISABLE)
{
tmos_stop_task(Peripheral_TaskID,SBP_PERIODIC_EVT);
tmos_stop_task(Peripheral_TaskID,SBP_READ_RSSI_EVT);
tmos_stop_task(Peripheral_TaskID,HAL_KEY_EVENT);
tmos_stop_task(Peripheral_TaskID,HAL_USART_EVENT);
tmos_stop_task(halTaskID, HAL_SIMRTC_EVENT);
Advertising_set_enable(DISABLE);
GAPRole_TerminateLink(peripheralConnList.connHandle);
PRINT("peripheral 主动断开\r\n");
HAL_KeyInit(ENABLE);
SimRTC_GetTime(&Tyear, &Tmon, &Tday, &Thour, &Tmin,&Tsec); //软件时钟,用于显示
RTC_InitTime(Tyear, Tmon, Tday, Thour, Tmin,Tsec); //将时间更新到RTC中
TMOS_TimerInit(0);
}
else
{
tmos_set_event(Peripheral_TaskID,SBP_PERIODIC_EVT);
tmos_set_event(Peripheral_TaskID,SBP_READ_RSSI_EVT);
tmos_set_event(Peripheral_TaskID,HAL_KEY_EVENT);
tmos_set_event(Peripheral_TaskID,HAL_USART_EVENT);
tmos_set_event(halTaskID, HAL_SIMRTC_EVENT);
RTC_GetTime(&Tyear,&Tmon, &Tday, &Thour, &Tmin, &Tsec);
SimRTC_Init(Tyear, Tmon, Tday, Thour, Tmin, Tsec); //读取RTC的时间并更新到软件时钟中
Advertising_set_enable(ENABLE);
}
}
你指的蓝牙部分是哪些参数呢?我将Peripheral_Init内的多个参数设置程序都执行了一次,还是有问题,请帮我再看看
直接看搜索到的广播,是否为可连接的广播,如果是不可连接,说明蓝牙的状态被修改,则需要查看打印,看看是否advertising,且与正常的流程日志相同。
在修改时间后,可以接收蓝牙断开的情况下,直接将蓝牙这部分的初始化都重新调用。