前序
前面一篇文章后,其实基本上就可以让canFestival运行起来了,但是移植过程中,你可能还有以下萌币:
(1)“核心层”中的timer.c到底有什么作用?跟drivers下面的硬件定时器到底是怎么交互的?
(2)“核心层”怎么使用到drivers下面的can硬件接口?
(3)怎么生成对象字典啊?应用层应该怎么使用呀?
(4)用户业务逻辑咋设计啊?
通过这篇文章,大家会进一步加强移植的信心。
“核心层”time.c分析
(1)TimeDispatch()函数分析。分析的大部分注释放在源码里面。
void TimeDispatch(void)
{
TIMER_HANDLE i;
TIMEVAL next_wakeup = TIMEVAL_MAX; /* 下一次定时周期 */
/* 定时中断产生后,定时器的计数又增加了多少,一般是0 */
UNS32 overrun = (UNS32)getElapsedTime();
/* total_sleep_time记录的是本次定时时长 */
TIMEVAL real_total_sleep_time = total_sleep_time + overrun;
s_timer_entry *row;
for(i=0, row = timers; i <= last_timer_raw; i++, row++)
{
if (row->state & TIMER_ARMED) /* if row is active */
{
/* 根据row->val判断软定时器timers是否超时,超时就要触发软定时的回调函数 */
if (row->val <= real_total_sleep_time) /* to be trigged */
{
/* 如果ro
canFestival嵌入式移植与使用

最低0.47元/天 解锁文章
7405

被折叠的 条评论
为什么被折叠?



