Static Configuration (nrk_cfg.h)

Given the memory constraints of embedded sensor operating systems, Nano-RK uses a static design-time framework. This approach is consistent with sensor networking assumptions because as compared to traditional operating systems (where processes can be dynamically spawned), the OS and the applications are co-located in a single address space. In particular, admission control and real-time schedulability analysis tests are carried out offline as compared to taking a dynamic online approach. We would like to stress that a static approach does not mean that task properties and configuration parameters cannot be reconfigured during run-time. Rather, a static approach enforces the checks to ensure that the dynamic reconfiguration does not adversely affect application and system guarantees in a pre-deployment offline setting as compared to running dynamic admission control algorithms. Data (or control) dependent modifications to the task code such as changing task periods, resource usage limits, resource priorities and configuration of various parameters such as the network buffer sizes and stack sizes of each task can be changed to accommodate mode changes. With current energy and memory constraints, the run-time configurations will need to be verified offline at design-time.

Many of the static parameters are defined in nrk_cfg.h

 1   #define NRK_REPORT_ERRORS
 2   // NRK_REPORT_ERRORS will cause the kernel to print out information about
 3   // missed deadlines or reserve violations
 4
 5   #define NRK_HALT_ON_ERROR
 6   // NRK_HALT_ON_ERRORS will cause the kernel to freeze on errors so that
 7   // it is easier to see debugging messages.
 8
 9   #define NRK_HALT_AND_LOOP_ON_ERROR
10   // NRK_HALT_AND_LOOP_ON_ERRORS will cause the kernel to freeze on errors but
11   // unlike NRK_HALT_ON_ERROR, the kernel panic msg will continously be printed out.
12
13   #define NRK_STACK_CHECK
14   // NRK_STACK_CHECK adds a little check to see if the bottom of the stack
15   // has been over written on all suspend calls
16
17   #define NRK_NO_POWER_DOWN
18  // Leave NRK_NO_POWER_DOWN define in if the target can not wake up from sleep
19  // because it has no asynchronously clocked
20
21  #define NRK_MAX_TASKS 2
22 // Max number of tasks in your application
23 // Be sure to include the idle task
24 // Making this the correct size will save on BSS memory which
25 // is both RAM and ROM...
26
27  #define NRK_MAX_RESOURCE_CNT 1
28 // NRK_MAX_RESOURCE_CNT defines the number of semaphores in the system.
29 // If you don't use any semaphores, set this to 0.  Be sure that libraries
30 // you are using do not require semaphores.  These should be stated in any
31 // documenation that comes with them.
32
33  #define NRK_TASK_IDLE_STK_SIZE 64
34  // Idle task stack size min=32
35  #define NRK_APP_STACKSIZE 128
36  // Used as a default for application tasks
37  #define NRK_KERNEL_STACKSIZE 128
38  // Size of kernel stack
39

A sample nrk_cfg.h that configures the static parameters for a particular project. This includes stack sizes, number of resources, error handling etc. Make sure tomake clean when you change any parameters in header files or moved from another project directory.

Prev: Contents Next: Errors Top