5248|4

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教vxworks下 定时器的ticks设置无效问题。 [复制链接]

 请问:
/* system clock initial */
    sysClkOringnalRate = sysClkRateGet();
    printf("\n system clock original rate = %d", sysClkOringnalRate);
    if (sysClkConnect ((FUNCPTR)clock_main,NO_ARG ) == ERROR)
    {
        printf("\n System clock ISR connecting failure!");
        return (ERROR);   
    }
    if (sysClkRateSet(SYSCLK_TICK) == ERROR)
    {
        printf("\n System clock rat setting failure!");
        return (ERROR);
    }
    sysClkOringnalRate = sysClkRateGet();
    printf("\n system clock rate right now = %d", sysClkOringnalRate);
    sysClkEnable();
/*  system aux clock */
    sysAuxClkRateSet(500);
    sysAuxClkConnect((FUNCPTR)interrupt,0);
    printf("\n system aux clock rate right now = %d", sysAuxClkRateGet());
    sysAuxClkEnable();
/*end clock*/  
假如设置SYSCLK_TICK 为500。RateGet两个时钟频率都打印输出是500。但是
void *clock_main(void)
   {
    tickAnnounce ();
    tot_secs = tickets/60;

    secs = tot_secs%60;
    mins = tot_secs / 60;
    hrs = mins / 60;
    mins = mins % 60;
    return ;
   }
/*clock prog*/
void interrupt(void)
   {
    tickets++;
    tot_secs = tickets/60;

    secs = tot_secs%60;
    mins = tot_secs / 60;
    hrs = mins / 60;
    mins = mins % 60;
    return ;
   }
时间都没有变化。就是说实际运行还是每1秒采用默认的60ticks。
请问各位大人可能是什么原因?谢谢!

最新回复

比如说某个BSP里这个函数大概这么写: sysClkRateSet(int tps) {     if((tps>maxtps)||(tips  详情 回复 发表于 2007-8-14 17:33
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没研究过,是不是只能在启动时初始化设置一次,后面就不能改了?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是不是你初始化的地方太早了,system初始化值(60)把你的配置又覆盖了?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
sysClkRateSet( )
NAME
sysClkRateSet( ) - set the system clock rate

SYNOPSIS

STATUS sysClkRateSet
    (
    int ticksPerSecond        /* number of clock interrupts per second */
    )

DESCRIPTION
This routine sets the interrupt rate of the system clock. It is called by usrRoot( ) in usrConfig.c.

There may be interactions between this routine and the POSIX clockLib routines. Refer to the clockLib reference entry.


NOTE
This is a generic page for a BSP-specific routine; this description contains general information only. To determine if this routine is supported by your BSP, or for information specific to your BSP's version of this routine, see the reference pages for your BSP.
[/COLOR]

RETURNS
OK, or ERROR if the tick rate is invalid or the timer cannot be set.


SEE ALSO
sysLib, sysClkEnable( ), sysClkRateGet( ), clockLib, and BSP-specific reference pages for this routine.

也就是说呢,你在这里修改tick了,问题是你BSP里有没有实际的修改时钟?
我读的几个BSP里这个sysClkRateSet都仅仅是改变了一个全局变量而已。而实际上tick是由时钟中断引起的,不改变时钟的参数的话使用这个函数就仅仅改了个全局变量,对系统运行一点作用都没有,除非BSP支持你随便修改时钟,并将这些修改的函数挂到了sysclkrateSet下。这就涉及到BSP里计算时钟的定时了,无非就是频率/tick数得到多少个脉冲出现一个时钟中断,然后把这个数值写到对应的定时器里。

因此我觉得可能是BSP里不支持这个时钟修改。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
比如说某个BSP里这个函数大概这么写:
sysClkRateSet(int tps)
{
    if((tps>maxtps)||(tips<0))
      return error;

    systickpersecond=tps;

    sysclockdisable();
    sysclockenable();
    return ok;
}
其中
    sysclockdisable();
    sysclockenable();
这两行中间应该插入对硬件定时器的更改,否则只修改了全局变量而已
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表