1,UCOS移植到atmega16上用定时器2做时钟滴答请问定时器2应工

比较中断和溢出中断都可以,时间精度要求不高
虽然我很聪明,但这么说真的难到我了

UCOS移植到atmega16上用定时器2做时钟滴答请问定时器2应工

2,STM32的RTC能产生毫秒级的中断吗

RTC支持三种中断,分别是秒中断,闹钟中断和溢出中断。从这三种方式可以看出,正常情况下,RTC的中断是秒级的。如果使用设置分频的方式让秒中断变成毫秒级中断的话,RTC就不能当作时真正的秒时钟来用了。如果需要毫秒级中断,推荐使用systick.所有使用Cortex-M3内核的CPU都有一个systick计数器。在不使用操作系统的工程中,一般都用systick作为毫秒级中断发生器。在使用ucos或其它简单操作系统的工程中,systick都作为操作系统的系统时钟滴答,周期是1毫秒一个中断。另外您也可以使用STM32的几个TIM。TIM1是最复杂的,在只需要简单功能情况下,建议使用TIM2或其它TIM。

STM32的RTC能产生毫秒级的中断吗

3,ucosiii系统时钟可以设置为微妙级别吗

msp430f149无法设置8M的主时钟作(MCLK)为定时器时钟源:TACTL = TASSEL_2;它只能设置辅助时钟SMCLK作为定时器时钟源,不过它们本身没有什么区别,因为你可以吧辅助时钟SMCLK设为主时钟MCLK:BCSCTL2 = SELS; 欢迎追问
或许可以。

ucosiii系统时钟可以设置为微妙级别吗

4,硬件时钟

有几个概率需要了解 1.时间周期(Clock Cycle)的频率:晶体振荡器在1秒以内时钟周期的个数=1秒以内时钟脉冲的个数,Linux里面用 #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ 单位为HZ 2.时钟滴答(Clock Tick): 当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也即一次时钟滴答。PIT通道0的计数器的初始值决定了要过多少时钟周期才产生一次时钟中断。 3.时钟滴答的频率(HZ):1秒以内产生时间滴答个数 HZ在arm和i386上定义为100,ALPHA和IA62为1024 ,IBM Power PC为1000 i386 1个时钟滴答时间为1000ms/100=10ms。 4.时钟滴答的时间间隔(tick) long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */ 单位为us ,tick=10ms,也可以通过HZ来计算 linux中#define TICK_SIZE= tick 1s=1,000,000us (5)宏LATCH:Linux用宏LATCH来定义要写到PIT通道0的计数器中的值,它表示PIT将没隔多少个时钟周期产生一次时钟中断。 LATCH=(1秒之内的时钟周期个数)÷(1秒之内的时钟中断次数)=(CLOCK_TICK_RATE)÷(HZ) Linux为取整 #define LATCH=(CLOCK_TICK_RATE + HZ/2) / HZ。 时钟周期理解:时钟脉冲,电平从0到1(或者相反)。 CLOCK_TICK_RATE和HZ都是 频率 :1秒以内时钟周期 频率 ,1秒以内时钟滴答 频率 。 TSC使用CPU频率,在现代计算机中CPU可能降频也可能超率,TSC时钟不准确。 顺序为HPET > APCI PMT>PIC>TSC local cpu APIC只在单CPU场景上使用,如进程调度时间. 参考: http://www.dedecms.com/knowledge/servers/linux-bsd/2012/0913/14187.html

5,请问在ucos中这个滴答时钟为系统提供一个时基有什么作用

1. 作为round robin schedule的时间片计算.2. 作为Delay的计时. 满足条件后会将任务变为ready状态,下次任务调度就有可能会执行.这个中断非常重要,就像OS的发动机.
比较中断和溢出中断都可以,时间精度要求不高
你好!发错吧仅代表个人观点,不喜勿喷,谢谢。

6,ucos isr是什么意思

ucOS 时钟中断(ISR)1 系统中断与时钟节拍1.1 系统中断 中断是一种硬件机制,用于通知CPU有个异步事件发生了。中断一旦被系统识别,CPU则保存部分(或全部)现场(context),即部分(或全部)寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。中断服务子程序做事件处理,处理完成后执行任务调度,程序回到就绪态优先级最高的任务开始运行(对于可剥夺型内核)。 中断使得CPU可以在事件发生时才予以处理,而不必让微处理器连续不断地查询(polling)是否有事件发生。通过两条特殊指令:关中断 (disable interrupt)和开中断(enable interrupt)可以让微处理器不响应或响应中断。在实时环境中,关中断的时间应尽量的短,关中断影响中断响应时间,关中断时间太长可能会引起中断丢失。中断服务的处理时间应该尽可能的短,中断服务所做的事情应该尽可能的少,应把大部分工作留给任务去做。1.2 系统时钟节拍 时钟节拍是特定的周期性中断(时钟中断),这个中断可以看作是系统心脏的脉动。操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间隔取决于不同的应用,一般在10~200 ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越快,系统的额外开销就越大。系统定义了32位无符号整数OSTime来记录系统启动后时钟滴答的数目。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用 OSStart()之后。%26mu;C/OSII中的时钟节拍服务是通过在中断服务子程序中调用OSTimeTick()实现的。时钟节拍中断服务子程序的示意代码如下:void OSTickISR(void) 保存处理器寄存器的值; 调用OSIntEnter ()或是将OSIntNesting加1; 调用OSTimeTick (); 调用OSIntExit (); 恢复处理器寄存器的值; 执行中断返回指令;}2 时钟管理系统2.1 ucos ii时钟管理系统 ucos ii原有的时钟管理系统类似于Linux,但是比Linux简单得多。它仅向用户提供一个周期性的信号OSTime,时钟频率可以设置在 10~100 Hz,时钟硬件周期性地向CPU发出时钟中断,系统周期性响应时钟中断,每次时钟中断到来时,中断处理程序更新一个全局变量OSTime。ucos ii时钟中断服务程序的核心是调用OSTimeTick ()函数。OSTimeTick ()函数用来判断延时任务是否延时结束从而将其置于就绪态。其程序伪代码如下:void OSTimeTick(void) OSTimeTickHook();// 调用用户定义的时钟节拍外连函数 while OS_ENTER_CRITICAL();//关中断 对所有任务的延时时间递减; 扫描时间到期的任务,并且唤醒该任务; OS_EXIT_CRITICAL();//开中断 指针指向下一个任务; } OSTime++;//累计从开机以来的时间} 在ucos ii的时钟节拍函数中,需要执行用户定义的时钟节拍外连函数OSTimeTickHook (),以及对任务链表进行扫描并且递减任务的延时。这样就造成了时钟节拍函数OSTimeTick ()有两点不足: ① 在时钟中断中处理额外的任务OSTimeIickHook (),这样增加了中断处理的负担,影响了定时服务的准确性; ② 在关中断情况下扫描任务链表,任务越多所需要时间越长,而长时间关中断对中断响应有不利影响,是中断处理应当避免的。2.2 改进的时钟管理系统 针对上述OSTimeTick ()的不足之处,需加以改进来优化时钟节拍函数。在Linux中一般对中断的响应分为两部分:立即中断服务和底半中断处理(bottom half)。立即中断服务仅仅做重要的并且能快速完成的工作,而把不太重要的需要较长时间完成的工作放在底半处理部分来完成,这样就可以提高中断响应速度。 ucos ii不支持底半处理,为了减轻时钟中断处理程序的工作量来提高ucos ii的时钟精确度,可以将一部分在每次时钟中断需处理的工作内容放在任务级来完成。这样就可以减少每次时钟中断处理的CPU消耗,从而提高中断响应速度和ucos ii的时钟精确度。为此,定义任务OSTimeTask (),由它来处理原来在OSTimeTick()中需要处理的操作。因为%26mu;C/OSII采用基于优先级的抢占式调度策略,而每次时钟中断处理程序结束后需要首先调度该任务执行,因此让任务OSTimeTask()具有系统内最高优先级。由它执行用户定义的时钟节拍外连函数OSTimeTickHook (),以及对所有任务的延时时间进行递减,并把到期的任务链入到链表OSTCBRList中,OSTCBRList管理所有到期任务。 OSTimeTask()函数伪代码如下:void OSTimeTask() OSTimeTickHook()//用户定义的时间处理函数 while 对所有任务的延时时间进行递减; 把所有要到期的任务链入到OSTCBRList链表中;} 任务状态改为睡眠,调用OSSched ()进行任务调度;} 在任务OSTimeTask()中,执行原来在时钟中断处理的用户函数OSTimeIickHook (),并实现将延时到期的任务链入到OSTCBRList链表中,这样在时钟中断程序中就只需要扫描任务到期的链表而不需要扫描整个链表,减少了关中断的时间。OSTCBRList为新建链表,它管理所有到期的任务。 同时,需要减少OSTimeTick ()的执行工作量,只对OSTCBRList链表扫描,这样也减少了关中断时间。OSTimeTick ()伪代码如下:void OSTimeTick(void) OSTime++;OS_TCB* ptcb=OSTCBList;// OSTCBRList指向所有到期任务的链表while(ptchb!=null) 关中断; 唤醒任务; 开中断; 指针指向下一个任务; }}3 小结 本文以开源的嵌入式操作系统ucos ii为例,分析了操作系统的中断机制和中断应满足的条件。介绍了ucos ii系统时钟节拍,探讨了时钟中断函数中存在的不足,并且给出了解决方案,从而有效提高了中断响应速度和ucos ii的时钟精确度。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jianshe999/archive/2008/03/11/2171484.aspx

7,uCOS函数void OSMboxPend OSEVENT pevent INT16U timeout

都不是,这里指的是时钟节拍,即等待多少个时钟节拍,uCOS中所有用到延时的地方都是以时钟节拍为单位的。在OS_cfg.h 中有个宏定义OS_TICKS_PER_SEC,的值表示:每秒钟有多少个节拍。具体可参看相关参考书。。在此函数timeout处如果需要等待100ms则是(OS_TICKS_PER_SEC/10)个节拍。
*err 和 err1是等价的;就是定义一个变量,调用这个等待消息函数时,将所产生的错误信息存在这个变量里。因为函数形参是指针,所以调用时用取址的方法。

8,ucos 中 OSTimeDly函数的最小延时可为多少可为50us吗如何

最小延时时间与你选取的时钟源有关。以51单片机举个例子,使用12M晶振的话,其最小的指令周期为1us,你不可能获得运行时间小于这个最小指令周期的指令。操作系统的时钟节拍也是一样,如果你设置的定时源为100us中断一次,也就是你的系统节拍单位为100us。那么你不可能获得小于100us的操作延时。当然,这个情况不包括抢占调度的情况。如果你的系统节拍的参考时钟设置为10us中断一次,那么倒是可以获得50us的任务延时的。具体讲就是OSTimeDly(5),这样就可以获得50us了。 这个问题的关键不在于你赋给OSTimeDly()的形参值为多少。而在于OSTimeDly()中的Tick值改变一个需要多久的时间间隔。这个时间间隔的产生与操作系统是没有关系的。去查一下你的定时器中断代码,看看是怎么设置的。 以后提问题的时候写清楚是基于什么平台。要不然只能这样定性分析了……

9,OSTimeSet0此时OSTime为多少是之前的OSTime值还是0搜

其实UC/OS是记录的不是stm32的时钟,而是由滴答定时器每次进入中断所记录的节拍数量,uc/os依靠节拍来维持系统的运行。就和人的心跳一样。记录节拍数的变量是OSIntNestingCtr,当使用OSTimeSet()函数其实就是将OSIntNestingCtr变量改变成你设定的值。
print一下就看出来了:> print(os.time())1337060663> print(os.date())05/15/12 13:44:30os.time返回的是从1970年x月x日到现在经过的秒数,os.date返回的是按照一定格式输出的日期字符串或table。
0X000000该内存不能为read的解决方法 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 一:先说说硬件: 一般来说,电脑硬件是很不容易

10,关于ucos中OSTimeDly的问题

void main (void) OSInit();...... OSTaskCreate(Task, (void *)0, (void *)&TaskStk[0][0], 10); OSTaskCreate(Task1, (void *)0, (void *)&TaskStk[1][0], 12); ...... OSStart();}void Task1(void *data) UBYTE x1;x1=x1; for (; *LED0 =1; OSTimeDly(3); /*从Task切换到此处,该任务也进入等待态,只有空闲任务运行 ,在3个时钟周期后, Task被重新调度运行,所以LED不是没灭,只是时间很短; */ }} void Task (void *data) for (; *LED0 =0; OSTimeDly(3); /*由于此任务优先级高,所以首先运行,当运行到此处,进入等待态,此时Task1运行,并且在Task1中LED0被马上修改为1,所以LED0灭的时间与任务切换时间相等,所以如果修改为OSTimeDly(6),则在Task运行完之后Task1不马上运行,即可*/ }}
ostimedly(os_ticks_per_sec*9)在延时的过程中cpu在干吗?cpu的行为取决于你这个function的实现是什么,这个函数是否会引起调度,或者这个函数就只是一个while loop来检查timer 模块是否已经跑到了你设置进去的值(os_ticks_per_sec*9)。

文章TAG:ucos的时钟滴答为多少时钟  滴答  多少  
下一篇