SYSPAGE_ENTRY()

Return an entry from the system page

Synopsis:

#include <sys/syspage.h>

#define SYSPAGE_ENTRY( entry )...

Arguments:

entry
The entry to get; see below.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The SYSPAGE_ENTRY() macro returns a pointer to the specified entry in the system page. For more information, see "Structure of the system page" in the Customizing Image Startup Programs chapter of Building Embedded Systems.

The best way to reference the system page is via the kernel calls and POSIX cover functions. If there isn't a function to access the information you need, use SYSPAGE_ENTRY() instead of referencing the _syspage_ptr variable directly. For information in the CPU-specific part of the syspage_entry structure, use SYSPAGE_CPU_ENTRY().

The entries you're likely to access with SYSPAGE_ENTRY() include:

cpuinfo
Information that's specific to the CPU. For example, to determine if the processor supports NEON technology, a 128-bit SIMD (Single Instruction, Multiple Data) architecture extension to the ARM Cortex-A series processor, do the following:
if (SYSPAGE_ENTRY(cpuinfo)->flags & ARM_CPU_FLAG_NEON)
  
qtime
QNX-specific time information. The qtime_entry structure contains at least the following members:
  • unsigned long boot_time — the time, in seconds, since the Unix Epoch (00:00:00 January 1, 1970 Coordinated Universal Time (UTC)) when this system was booted.

    If you call ClockTime() to set the time of day, the kernel checks to see if this field is zero. If it is, the kernel sets it to the appropriate value. There's a -T option for all startup programs that prevents the setting of this field, so that the kernel will set it the first time you call ClockTime() to change the time of day. This is useful if the RTC hardware isn't in UTC.

  • uint64_t cycles_per_sec — the number of ClockCycles() increments per second for this system.

Returns:

A pointer to the structure for the given entry.

Examples:

#include <sys/neutrino.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/syspage.h>

int main( void )
{
    uint64_t cps, cycle1, cycle2, ncycles;
    double sec;

    /* snap the time */
    cycle1=ClockCycles( );

    /* do something */
    printf("Hello!\n");

    /* snap the time again */
    cycle2=ClockCycles( );
    ncycles=cycle2-cycle1;
    printf("%lld cycles elapsed.\n", ncycles);
    
    /* find out how many cycles per second */
    cps = SYSPAGE_ENTRY(qtime)->cycles_per_sec;
    printf( "This system has %lld cycles/sec.\n",cps );
    sec=(double)ncycles/cps;
    printf("The cycles in seconds is %f.\n",sec);

    return EXIT_SUCCESS;
}

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler Yes
Signal handler Yes
Thread Yes

Caveats:

SYSPAGE_ENTRY() is a macro.