📄 os.c
字号:
/****h* DE9901/OS
* FILE NAME
* os.c
* COPYRIGHT
* (c) 2004-2005 Mobitex Technology AB - All rights reserved
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * 3. The name Mobitex Technology AB may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY MOBITEX TECHNOLOGY AB "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
* SHALL MOBITEX TECHNOLOGY AB BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* AUTHOR
* MPN/Kjell Westerberg
* HISTORY
* Changes in the file are recorded in this list.
* Ver: Date: Responsible: Comment:
* R1A01 2005-01-17 Kjell Westerberg Approved.
* R1A07 2005-06-17 Kjell Westerberg Added improved time calculations.
* DESCRIPTION
* This is a collection of functions to access some OS functions.
***/
#include "hel.h"
#define TC_BASE 0xFFFE0000
#define TC0_CV (TC_BASE + 0x010)
inline OSTICK OS_GetTicks(void) {
#if MS_PER_OSTICK == 1
return cyg_current_time();
#else
s32 t1, t2;
OSTICK t;
t1 = INPUT32(TC0_CV);
t = cyg_current_time();
t2 = INPUT32(TC0_CV);
if (t2 < t1) {
t = cyg_current_time();
t2 = INPUT32(TC0_CV);
}
#if MS_PER_OSTICK == 2
return (t*MS_PER_OSTICK + (t2<CYGNUM_HAL_RTC_PERIOD/2?0:1));
#elif MS_PER_OSTICK == 4
t1 = t2<CYGNUM_HAL_RTC_PERIOD/2?(t2<CYGNUM_HAL_RTC_PERIOD/4?0:1):(t2<3*CYGNUM_HAL_RTC_PERIOD/4?2:3);
return (t*MS_PER_OSTICK + t1);
#elif MS_PER_OSTICK == 8
t1 = t2<CYGNUM_HAL_RTC_PERIOD/2?
(t2<CYGNUM_HAL_RTC_PERIOD/4?(t2<CYGNUM_HAL_RTC_PERIOD/8?0:1):(t2<3*CYGNUM_HAL_RTC_PERIOD/8?2:3)):
(t2<3*CYGNUM_HAL_RTC_PERIOD/4?(t2<5*CYGNUM_HAL_RTC_PERIOD/8?4:5):(t2<7*CYGNUM_HAL_RTC_PERIOD/8?6:7));
return (t*MS_PER_OSTICK + t1);
#else
MS_PER_OSTICK Illegal ticks per ms!!
#endif
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -