简介|B_QuRT_User_Guide(26)


B_QuRT_User_Guide(26)

  • 16 System Clock
    • 16.1 qurt_sysclock_get_hw_ticks()
      • 16.1.1 功能文档
        • 16.1.1.1 unsigned long long qurt_sysclock_get_hw_ticks ( void )
    • 16.2 qurt_sysclock_get_hw_ticks_32()
      • 16.2.1 功能文档
        • 16.2.1.1 int qurt_timer_base
    • 16.3 qurt_sysclock_get_hw_ticks_16()
      • 16.3.1 功能文档
        • 16.3.1.1 static unsigned short qurt_sysclock_get_hw_ticks_16 ( void )
  • 17 Interrupts
    • 17.1 qurt_interrupt_acknowledge()
      • 17.1.1 功能文档
        • 17.1.1.1 int qurt_interrupt_acknowledge ( int int_num )
    • 17.2 qurt_interrupt_clear()
      • 17.2.1 功能文档
        • 17.2.1.1 unsigned int qurt_interrupt_clear ( int int_num )
    • 17.3 qurt_interrupt_deregister()
      • 17.3.1 功能文档
        • 17.3.1.1 unsigned int qurt_interrupt_deregister ( int int_num )

16 System Clock 线程使用QuRT系统时钟来创建警报和定时器,访问当前的系统时间,或确定任何活动定时器的下一个定时器事件发生的时间。
系统时钟时间表明QuRT应用系统已经执行了多长时间(以系统滴答为单位)。一个系统滴答被定义为Hexagon处理器的19.2MHz QTIMER时钟的一个周期。
与常规计时器(第15节)不同,系统时钟警报和计时器是全局资源,可以通知多个客户线程发生了时钟事件。当一个客户线程为一个系统时钟事件注册时,它指定了一个信号对象和信号掩码。
系统时钟警报在指定的时间内失效,而系统时钟定时器在指定的时间内失效。在这两种情况下,当事件发生时,对于每个注册的客户线程,在注册的信号掩码中指定的信号被设置在注册的信号对象中。
系统时钟支持以下操作。
  • qurt_sysclock_get_hw_ticks()
  • qurt_sysclock_get_hw_ticks_32()
  • qurt_sysclock_get_hw_ticks_16()
16.1 qurt_sysclock_get_hw_ticks() 16.1.1 功能文档
16.1.1.1 unsigned long long qurt_sysclock_get_hw_ticks ( void ) 获取硬件滴答计数。
返回一个64位硬件计数器的当前值。当超过最大值时,该值会环绕到零。
注意:这个操作必须小心使用,因为有环绕行为。
相关数据类型
Integer - 64位硬件计数器的当前值。
依赖项
None.
16.2 qurt_sysclock_get_hw_ticks_32() 16.2.1 功能文档
16.2.1.1 int qurt_timer_base 获取32位的硬件滴答计数。
返回一个32位硬件计数器的当前值。当超过最大值时,该值会环绕到零。
注意:这个操作是作为一个内联C函数实现的,应该从C/C++程序中调用。返回的32位是Qtimer计数器的低32位。
返回值
整数 - 32位定时器计数器的当前值。
依赖项
None.
16.3 qurt_sysclock_get_hw_ticks_16() 16.3.1 功能文档
16.3.1.1 static unsigned short qurt_sysclock_get_hw_ticks_16 ( void ) 获取16位的硬件滴答计数。
返回一个16位定时器计数器的当前值。当超过最大值时,该值会环绕到零。
注意:这个操作是作为一个内联C函数实现的,应该从C/C++程序中调用。返回的16位是基于Qtimer计数器中低32位的值,右移16位。
返回值
整数 - 16位定时器计数器的当前值,由Qtimer计数器的低32位计算得出,右移16位。。
依赖项
None.
17 Interrupts 线程使用中断来响应外部事件。
当注册一个中断时,它既被启用又与指定的信号对象和信号掩码相关联。当一个中断发生时,信号掩码中指定的信号被设置在信号对象中。为了处理中断,一个中断服务线程(IST)通常会在该信号上等待。
中断发生后会自动禁用。为了重新启用一个中断,IST在处理完中断后,在暂停自身之前(例如,通过等待中断信号),执行确认中断的操作。当一个中断被取消注册时,它被禁用,不再与任何信号相关。
一个信号对象最多可以注册31个独立的中断,这是由该对象可以存储的独立信号的数量决定的。(信号31由QuRT保留。)因此一个IST可以处理几个不同的中断。
注意:一个信号对象只能注册到一个特定的中断上。在一个中断上注册多个信号对象会引发一个异常(第19节)。
作为IST的线程必须不调用退出线程操作。
中断不支持init和destroy操作,因为没有为它们创建对象(第2.4节)。
明确地用清除中断操作来清除一个挂起的中断。
注意:这个操作是为系统级使用的,必须谨慎使用。
所有中断都是基于L2VIC中断控制器的。使用L2VIC中断编号指定所有中断。
L2VIC中断可以动态地配置为不同的类型(边沿触发或电平触发)或极性(低电平有效或高电平有效)。
注意:L2VIC中断在重新配置之前必须先取消注册。中断是处理器资源,它支持以下操作。
  • qurt_interrupt_acknowledge() - qurt_interrupt_clear()
  • qurt_interrupt_deregister()
  • qurt_interrupt_disable()
  • qurt_interrupt_enable()
  • qurt_interrupt_get_config()
  • qurt_interrupt_raise()
  • qurt_interrupt_register()
  • qurt_interrupt_set_config() - qurt_interrupt_status()
  • qurt_interrupt_get_status().Constants
17.1 qurt_interrupt_acknowledge() 17.1.1 功能文档
17.1.1.1 int qurt_interrupt_acknowledge ( int int_num ) 在中断被处理后,确认该中断。
重新启用一个中断,并清除其挂起状态。这是在中断服务线程(IST)处理了一个中断后进行的。
中断发生后会自动禁用。为了重新启用一个中断,IST在处理完中断后,在暂停自身之前(比如等待中断信号),执行确认操作。
注意:为了防止中断的后续发生被丢失或重新处理,IST必须在确认中断之前清除中断信号(9.1.1.1节)。
参数
简介|B_QuRT_User_Guide(26)
文章图片

返回值
QURT_EOK - 中断确认成功。QURT_EDEREGISTERED - 中断已经被取消注册。
依赖项
None.
17.2 qurt_interrupt_clear() 17.2.1 功能文档
17.2.1.1 unsigned int qurt_interrupt_clear ( int int_num ) 参数
简介|B_QuRT_User_Guide(26)
文章图片

返回值
QURT_EOK - 成功。
QURT_EINT - 中断编号无效。
依赖项
None.
17.3 qurt_interrupt_deregister() 17.3.1 功能文档
17.3.1.1 unsigned int qurt_interrupt_deregister ( int int_num ) 【简介|B_QuRT_User_Guide(26)】禁用指定的中断,并将其与任何QuRT信号对象断开关联。如果指定的中断
从未被注册(第17.8.1.1节),取消注册的操作会返回状态值QURT_EINT。
注意:如果在中断服务线程(IST)等待接收中断时取消注册,IST可能会无限期地等待中断的发生。为了避免这个问题,QuRT内核在确定IST没有注册中断后,会发送信号SIG_INT_ABORT来唤醒它。
参数
简介|B_QuRT_User_Guide(26)
文章图片

返回值
QURT_EOK – Success.
QURT_EINT – Invalid interrupt number (not registered).
依赖项
None.

    推荐阅读