add rt_tick_set function

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1551 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
bernard.xiong@gmail.com 2011-06-29 14:45:35 +00:00
parent 0aa5ded9c1
commit cfd580edf4
3 changed files with 27 additions and 2 deletions

View File

@ -63,6 +63,7 @@ void rt_object_put_sethook(void (*hook)(struct rt_object* object));
*/
void rt_system_tick_init(void);
rt_tick_t rt_tick_get(void);
void rt_tick_set(rt_tick_t tick);
void rt_tick_increase(void);
rt_tick_t rt_tick_from_millisecond(rt_uint32_t ms);

View File

@ -15,8 +15,10 @@
* 2010-03-08 Bernard remove rt_passed_second
* 2010-05-20 Bernard fix the tick exceeds the maximum limits
* 2010-07-13 Bernard fix rt_tick_from_millisecond issue found by kuronca
* 2011-06-26 Bernard add rt_tick_set function.
*/
#include <rthw.h>
#include <rtthread.h>
static rt_tick_t rt_tick;
@ -51,6 +53,19 @@ rt_tick_t rt_tick_get()
return rt_tick;
}
/**
* This function will set current tick
*/
void rt_tick_set(rt_tick_t tick)
{
rt_base_t level;
level = rt_hw_interrupt_disable();
rt_tick = tick;
rt_hw_interrupt_enable(level);
}
/**
* This function will notify kernel there is one tick passed. Normally,
* this function is invoked by clock ISR.

View File

@ -44,7 +44,11 @@ rt_err_t rt_get_errno(void)
{
rt_thread_t tid;
RT_DEBUG_NOT_IN_INTERRUPT;
if(rt_interrupt_get_nest() != 0)
{
/* it's in interrupt context */
return errno;
}
tid = rt_thread_self();
if (tid == RT_NULL) return errno;
@ -61,7 +65,12 @@ void rt_set_errno(rt_err_t error)
{
rt_thread_t tid;
RT_DEBUG_NOT_IN_INTERRUPT;
if(rt_interrupt_get_nest() != 0)
{
/* it's in interrupt context */
errno = error;
return;
}
tid = rt_thread_self();
if (tid == RT_NULL) { errno = error; return; }