防止连续读time出错的处理---------后来证明不需要。(硬件上同一个总线)
2009-08-07 08:59
253 查看
//--------------unsigned LONG----16位--
portTickType DestTickCnt;
DATETIME BakTime;
//400ms为界,可能会涉及1s的误差
//如果tickcnt 多跑了一圈(需时49天)
void app_time_get(DATETIME* pTm)
{
portTickType CurrTickCnt;
CurrTickCnt = xTaskGetTickCount();
if(CurrTickCnt<DestTickCnt)//正常情况
{
*pTm=BakTime; //无需重读。
return;
}
else //if(CurrTickCnt>DestTickCnt)//情况
{
if((DestTickCnt<NTick)&& //溢出 回头情况
(CurrTickCnt>(~((portTickType)0)-NTick))) //CurrTickCnt还没回头
{
*pTm=BakTime; //无需重读。
return;
}
}
//需要重新获取
xSemaphoreTake(Mutex_TimeFlash,portMAX_DELAY);
if(!hal_rx8025_get(&BakTime))
{
s_devstate = ERROR_DEVHAL|DESC_E_TIME;//发现读常出错,故读3次最多。
}
//成功取走一次的记录
*pTm=BakTime;
CurrTickCnt = xTaskGetTickCount();
if((CurrTickCnt)>(~((portTickType)0)-NTick))
DestTickCnt=(CurrTickCnt+NTick)-~((portTickType)0);
else DestTickCnt=(CurrTickCnt+NTick);
xSemaphoreGive(Mutex_TimeFlash);
}
portTickType DestTickCnt;
DATETIME BakTime;
//400ms为界,可能会涉及1s的误差
//如果tickcnt 多跑了一圈(需时49天)
void app_time_get(DATETIME* pTm)
{
portTickType CurrTickCnt;
CurrTickCnt = xTaskGetTickCount();
if(CurrTickCnt<DestTickCnt)//正常情况
{
*pTm=BakTime; //无需重读。
return;
}
else //if(CurrTickCnt>DestTickCnt)//情况
{
if((DestTickCnt<NTick)&& //溢出 回头情况
(CurrTickCnt>(~((portTickType)0)-NTick))) //CurrTickCnt还没回头
{
*pTm=BakTime; //无需重读。
return;
}
}
//需要重新获取
xSemaphoreTake(Mutex_TimeFlash,portMAX_DELAY);
if(!hal_rx8025_get(&BakTime))
{
s_devstate = ERROR_DEVHAL|DESC_E_TIME;//发现读常出错,故读3次最多。
}
//成功取走一次的记录
*pTm=BakTime;
CurrTickCnt = xTaskGetTickCount();
if((CurrTickCnt)>(~((portTickType)0)-NTick))
DestTickCnt=(CurrTickCnt+NTick)-~((portTickType)0);
else DestTickCnt=(CurrTickCnt+NTick);
xSemaphoreGive(Mutex_TimeFlash);
}
相关文章推荐
- 载入一个COM组件出错的分析与处理
- 键盘操作往往需要添加一个遮盖层,防止点击其他地方导致出错
- Eclipse黑色主题设置方法和一个特别出错提示的处理
- flex ArrayCollection接受xml数据是时,只有一个值时出错处理
- 在使用FileReader.readAsDataURL()时,处理不能不能连续选择同一个文件的问题
- 一个发票处理的问题 Second time in above shift
- RxJava from 处理list时,其中有一个出错时如何继续发送下面的list内容。
- word-break:break-all和word-wrap:break-word该怎么用(连续的字母会当作一个单词处理)
- 今天在处理GridView分页问题时遇到了一个比较常见的分页出错问题。
- 我也写了一个牛顿迭代法,貌似不需要特殊处理溢出的情况 class Solution { public...
- 移动项目开发笔记(禁止一个按钮在服务器事件处理完成前连续点击按钮)
- 防止一个按钮给快速连续点击(防止测试疯狂点击)
- 最近遇到一个问题SQLSERVER2005 目录名称无效(批处理过程出错,不能查询)
- 一种处理同一个I2C总线上,器件地址冲突的方法
- 使用DTSC(Read Time Stamp Counter)指令做高精度时间处理,比QueryPerformanceCounter效率要高出一个数量级
- 用C语言开发一个BT下载软件 (四) ------ 代码实现-3-出错处理模块和运行日志模块
- 用eclipse做的一个短信发送器,编译通过但是部署到模拟器上面出错.后来经过多方学习发现是新的sdk原因
- C语言一个细节地方的说明【防止使用不当而出错】
- 编写一个与dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理
- 实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.