summaryrefslogtreecommitdiff
path: root/ports
diff options
context:
space:
mode:
authorScott Larson <[email protected]>2020-08-07 17:47:29 -0700
committerScott Larson <[email protected]>2020-08-07 17:47:29 -0700
commit6a018a4cfda937c0d8cbdee761187c5c5843e115 (patch)
treecc9990878ab97ac171a192fe1c2922e752feee99 /ports
parent608f55f0d120886e0eddf7e39cf3c3b6f06bd08c (diff)
add ARM11v6.0.1_rel
Diffstat (limited to 'ports')
-rw-r--r--ports/arm11/ac5/example_build/build_threadx.bat238
-rw-r--r--ports/arm11/ac5/example_build/build_threadx_sample.bat4
-rw-r--r--ports/arm11/ac5/example_build/sample_threadx.c369
-rw-r--r--ports/arm11/ac5/example_build/tx_initialize_low_level.s444
-rw-r--r--ports/arm11/ac5/inc/tx_port.h327
-rw-r--r--ports/arm11/ac5/readme_threadx.txt534
-rw-r--r--ports/arm11/ac5/src/tx_thread_context_restore.s247
-rw-r--r--ports/arm11/ac5/src/tx_thread_context_save.s207
-rw-r--r--ports/arm11/ac5/src/tx_thread_fiq_context_restore.s259
-rw-r--r--ports/arm11/ac5/src/tx_thread_fiq_context_save.s203
-rw-r--r--ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s111
-rw-r--r--ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s104
-rw-r--r--ports/arm11/ac5/src/tx_thread_interrupt_control.s102
-rw-r--r--ports/arm11/ac5/src/tx_thread_interrupt_disable.s98
-rw-r--r--ports/arm11/ac5/src/tx_thread_interrupt_restore.s87
-rw-r--r--ports/arm11/ac5/src/tx_thread_irq_nesting_end.s110
-rw-r--r--ports/arm11/ac5/src/tx_thread_irq_nesting_start.s104
-rw-r--r--ports/arm11/ac5/src/tx_thread_schedule.s172
-rw-r--r--ports/arm11/ac5/src/tx_thread_stack_build.s156
-rw-r--r--ports/arm11/ac5/src/tx_thread_system_return.s150
-rw-r--r--ports/arm11/ac5/src/tx_thread_vectored_context_save.s209
-rw-r--r--ports/arm11/ac5/src/tx_timer_interrupt.s258
-rw-r--r--ports/arm11/gnu/example_build/build_threadx.bat238
-rw-r--r--ports/arm11/gnu/example_build/build_threadx_sample.bat6
-rw-r--r--ports/arm11/gnu/example_build/crt0.S90
-rw-r--r--ports/arm11/gnu/example_build/libc.abin0 -> 1207876 bytes
-rw-r--r--ports/arm11/gnu/example_build/libgcc.abin0 -> 261004 bytes
-rw-r--r--ports/arm11/gnu/example_build/libnosys.abin0 -> 29354 bytes
-rw-r--r--ports/arm11/gnu/example_build/reset.S76
-rw-r--r--ports/arm11/gnu/example_build/sample_threadx.c369
-rw-r--r--ports/arm11/gnu/example_build/sample_threadx.ld239
-rw-r--r--ports/arm11/gnu/example_build/tx_initialize_low_level.S347
-rw-r--r--ports/arm11/gnu/inc/tx_port.h316
-rw-r--r--ports/arm11/gnu/readme_threadx.txt496
-rw-r--r--ports/arm11/gnu/src/tx_thread_context_restore.S241
-rw-r--r--ports/arm11/gnu/src/tx_thread_context_save.S210
-rw-r--r--ports/arm11/gnu/src/tx_thread_fiq_context_restore.S256
-rw-r--r--ports/arm11/gnu/src/tx_thread_fiq_context_save.S204
-rw-r--r--ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S111
-rw-r--r--ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S104
-rw-r--r--ports/arm11/gnu/src/tx_thread_interrupt_control.S115
-rw-r--r--ports/arm11/gnu/src/tx_thread_interrupt_disable.S116
-rw-r--r--ports/arm11/gnu/src/tx_thread_interrupt_restore.S104
-rw-r--r--ports/arm11/gnu/src/tx_thread_irq_nesting_end.S111
-rw-r--r--ports/arm11/gnu/src/tx_thread_irq_nesting_start.S104
-rw-r--r--ports/arm11/gnu/src/tx_thread_schedule.S187
-rw-r--r--ports/arm11/gnu/src/tx_thread_stack_build.S178
-rw-r--r--ports/arm11/gnu/src/tx_thread_system_return.S167
-rw-r--r--ports/arm11/gnu/src/tx_thread_vectored_context_save.S199
-rw-r--r--ports/arm11/gnu/src/tx_timer_interrupt.S279
-rw-r--r--ports/arm11/iar/example_build/azure_rtos.eww13
-rw-r--r--ports/arm11/iar/example_build/cstartup.s161
-rw-r--r--ports/arm11/iar/example_build/sample_threadx.c374
-rw-r--r--ports/arm11/iar/example_build/sample_threadx.ewd2974
-rw-r--r--ports/arm11/iar/example_build/sample_threadx.ewp2136
-rw-r--r--ports/arm11/iar/example_build/sample_threadx.ewt2797
-rw-r--r--ports/arm11/iar/example_build/sample_threadx.icf49
-rw-r--r--ports/arm11/iar/example_build/settings/azure_rtos.wsdt535
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.bat40
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.ps131
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.Debug.driver.xcl13
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.Debug.general.xcl11
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.crun13
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.dbgdt1685
-rw-r--r--ports/arm11/iar/example_build/settings/sample_threadx.dnx99
-rw-r--r--ports/arm11/iar/example_build/settings/tx.Debug.cspy.bat40
-rw-r--r--ports/arm11/iar/example_build/settings/tx.Debug.cspy.ps131
-rw-r--r--ports/arm11/iar/example_build/settings/tx.Debug.driver.xcl13
-rw-r--r--ports/arm11/iar/example_build/settings/tx.Debug.general.xcl11
-rw-r--r--ports/arm11/iar/example_build/settings/tx.crun13
-rw-r--r--ports/arm11/iar/example_build/settings/tx.dbgdt4
-rw-r--r--ports/arm11/iar/example_build/settings/tx.dnx58
-rw-r--r--ports/arm11/iar/example_build/tx.ewd2974
-rw-r--r--ports/arm11/iar/example_build/tx.ewp2766
-rw-r--r--ports/arm11/iar/example_build/tx.ewt3427
-rw-r--r--ports/arm11/iar/example_build/tx_initialize_low_level.s339
-rw-r--r--ports/arm11/iar/inc/tx_port.h401
-rw-r--r--ports/arm11/iar/readme_threadx.txt527
-rw-r--r--ports/arm11/iar/src/tx_iar.c816
-rw-r--r--ports/arm11/iar/src/tx_thread_context_restore.s258
-rw-r--r--ports/arm11/iar/src/tx_thread_context_save.s222
-rw-r--r--ports/arm11/iar/src/tx_thread_fiq_context_restore.s269
-rw-r--r--ports/arm11/iar/src/tx_thread_fiq_context_save.s215
-rw-r--r--ports/arm11/iar/src/tx_thread_fiq_nesting_end.s121
-rw-r--r--ports/arm11/iar/src/tx_thread_fiq_nesting_start.s114
-rw-r--r--ports/arm11/iar/src/tx_thread_interrupt_control.s115
-rw-r--r--ports/arm11/iar/src/tx_thread_interrupt_disable.s113
-rw-r--r--ports/arm11/iar/src/tx_thread_interrupt_restore.s99
-rw-r--r--ports/arm11/iar/src/tx_thread_irq_nesting_end.s122
-rw-r--r--ports/arm11/iar/src/tx_thread_irq_nesting_start.s114
-rw-r--r--ports/arm11/iar/src/tx_thread_schedule.s183
-rw-r--r--ports/arm11/iar/src/tx_thread_stack_build.s170
-rw-r--r--ports/arm11/iar/src/tx_thread_system_return.s161
-rw-r--r--ports/arm11/iar/src/tx_thread_vectored_context_save.s207
-rw-r--r--ports/arm11/iar/src/tx_timer_interrupt.s272
95 files changed, 34462 insertions, 0 deletions
diff --git a/ports/arm11/ac5/example_build/build_threadx.bat b/ports/arm11/ac5/example_build/build_threadx.bat
new file mode 100644
index 00000000..d2abc782
--- /dev/null
+++ b/ports/arm11/ac5/example_build/build_threadx.bat
@@ -0,0 +1,238 @@
+del tx.a
+armasm -g --cpu ARM1136J-S --apcs /interwork tx_initialize_low_level.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_stack_build.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_schedule.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_system_return.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_context_save.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_context_restore.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_interrupt_control.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_timer_interrupt.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_interrupt_disable.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_interrupt_restore.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_fiq_context_save.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_fiq_nesting_start.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_irq_nesting_start.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_irq_nesting_end.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_fiq_nesting_end.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_fiq_context_restore.s
+armasm -g --cpu ARM1136J-S --apcs /interwork ../src/tx_thread_vectored_context_save.s
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_allocate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_block_release.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_allocate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_search.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_release.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_set.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_set_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_high_level.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_kernel_enter.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_kernel_setup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_priority_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_flush.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_front_send.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_receive.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_send.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_send_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_ceiling_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_cleanup.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_put_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_entry_exit_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_identify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_preemption_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_priority_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_relinquish.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_reset.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_resume.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_shell_entry.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_sleep.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_analyze.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_error_handler.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_error_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_suspend.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_preempt_check.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_resume.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_suspend.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_terminate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_time_slice.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_time_slice_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_timeout.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_wait_abort.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_time_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_time_set.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_activate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_deactivate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_expiration_process.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_performance_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_performance_system_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_system_activate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_system_deactivate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_thread_entry.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_enable.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_disable.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_initialize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_interrupt_control.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_isr_enter_insert.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_isr_exit_insert.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_object_register.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_object_unregister.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_user_event_insert.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_buffer_full_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_event_filter.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_event_unfilter.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_allocate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_block_release.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_allocate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_release.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_set.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_set_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_flush.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_front_send.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_receive.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_send.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_send_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_ceiling_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_prioritize.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_put.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_put_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_entry_exit_notify.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_info_get.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_preemption_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_priority_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_relinquish.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_reset.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_resume.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_suspend.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_terminate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_time_slice_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_wait_abort.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_activate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_change.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_create.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_deactivate.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_delete.c
+armcc -c -g -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_info_get.c
+armar --create tx.a tx_thread_stack_build.o tx_thread_schedule.o tx_thread_system_return.o tx_thread_context_save.o tx_thread_context_restore.o tx_timer_interrupt.o tx_thread_interrupt_control.o
+armar -r tx.a tx_thread_interrupt_disable.o tx_thread_interrupt_restore.o tx_thread_fiq_context_save.o tx_thread_fiq_nesting_start.o tx_thread_irq_nesting_start.o tx_thread_irq_nesting_end.o
+armar -r tx.a tx_thread_fiq_nesting_end.o tx_thread_fiq_context_restore.o tx_thread_vectored_context_save.o tx_initialize_low_level.o
+armar -r tx.a tx_block_allocate.o tx_block_pool_cleanup.o tx_block_pool_create.o tx_block_pool_delete.o tx_block_pool_info_get.o
+armar -r tx.a tx_block_pool_initialize.o tx_block_pool_performance_info_get.o tx_block_pool_performance_system_info_get.o tx_block_pool_prioritize.o
+armar -r tx.a tx_block_release.o tx_byte_allocate.o tx_byte_pool_cleanup.o tx_byte_pool_create.o tx_byte_pool_delete.o tx_byte_pool_info_get.o
+armar -r tx.a tx_byte_pool_initialize.o tx_byte_pool_performance_info_get.o tx_byte_pool_performance_system_info_get.o tx_byte_pool_prioritize.o
+armar -r tx.a tx_byte_pool_search.o tx_byte_release.o tx_event_flags_cleanup.o tx_event_flags_create.o tx_event_flags_delete.o tx_event_flags_get.o
+armar -r tx.a tx_event_flags_info_get.o tx_event_flags_initialize.o tx_event_flags_performance_info_get.o tx_event_flags_performance_system_info_get.o
+armar -r tx.a tx_event_flags_set.o tx_event_flags_set_notify.o tx_initialize_high_level.o tx_initialize_kernel_enter.o tx_initialize_kernel_setup.o
+armar -r tx.a tx_mutex_cleanup.o tx_mutex_create.o tx_mutex_delete.o tx_mutex_get.o tx_mutex_info_get.o tx_mutex_initialize.o tx_mutex_performance_info_get.o
+armar -r tx.a tx_mutex_performance_system_info_get.o tx_mutex_prioritize.o tx_mutex_priority_change.o tx_mutex_put.o tx_queue_cleanup.o tx_queue_create.o
+armar -r tx.a tx_queue_delete.o tx_queue_flush.o tx_queue_front_send.o tx_queue_info_get.o tx_queue_initialize.o tx_queue_performance_info_get.o
+armar -r tx.a tx_queue_performance_system_info_get.o tx_queue_prioritize.o tx_queue_receive.o tx_queue_send.o tx_queue_send_notify.o tx_semaphore_ceiling_put.o
+armar -r tx.a tx_semaphore_cleanup.o tx_semaphore_create.o tx_semaphore_delete.o tx_semaphore_get.o tx_semaphore_info_get.o tx_semaphore_initialize.o
+armar -r tx.a tx_semaphore_performance_info_get.o tx_semaphore_performance_system_info_get.o tx_semaphore_prioritize.o tx_semaphore_put.o tx_semaphore_put_notify.o
+armar -r tx.a tx_thread_create.o tx_thread_delete.o tx_thread_entry_exit_notify.o tx_thread_identify.o tx_thread_info_get.o tx_thread_initialize.o
+armar -r tx.a tx_thread_performance_info_get.o tx_thread_performance_system_info_get.o tx_thread_preemption_change.o tx_thread_priority_change.o tx_thread_relinquish.o
+armar -r tx.a tx_thread_reset.o tx_thread_resume.o tx_thread_shell_entry.o tx_thread_sleep.o tx_thread_stack_analyze.o tx_thread_stack_error_handler.o
+armar -r tx.a tx_thread_stack_error_notify.o tx_thread_suspend.o tx_thread_system_preempt_check.o tx_thread_system_resume.o tx_thread_system_suspend.o
+armar -r tx.a tx_thread_terminate.o tx_thread_time_slice.o tx_thread_time_slice_change.o tx_thread_timeout.o tx_thread_wait_abort.o tx_time_get.o
+armar -r tx.a tx_time_set.o tx_timer_activate.o tx_timer_change.o tx_timer_create.o tx_timer_deactivate.o tx_timer_delete.o tx_timer_expiration_process.o
+armar -r tx.a tx_timer_info_get.o tx_timer_initialize.o tx_timer_performance_info_get.o tx_timer_performance_system_info_get.o tx_timer_system_activate.o
+armar -r tx.a tx_timer_system_deactivate.o tx_timer_thread_entry.o tx_trace_enable.o tx_trace_disable.o tx_trace_initialize.o tx_trace_interrupt_control.o
+armar -r tx.a tx_trace_isr_enter_insert.o tx_trace_isr_exit_insert.o tx_trace_object_register.o tx_trace_object_unregister.o tx_trace_user_event_insert.o
+armar -r tx.a tx_trace_buffer_full_notify.o tx_trace_event_filter.o tx_trace_event_unfilter.o
+armar -r tx.a txe_block_allocate.o txe_block_pool_create.o txe_block_pool_delete.o txe_block_pool_info_get.o txe_block_pool_prioritize.o txe_block_release.o
+armar -r tx.a txe_byte_allocate.o txe_byte_pool_create.o txe_byte_pool_delete.o txe_byte_pool_info_get.o txe_byte_pool_prioritize.o txe_byte_release.o
+armar -r tx.a txe_event_flags_create.o txe_event_flags_delete.o txe_event_flags_get.o txe_event_flags_info_get.o txe_event_flags_set.o
+armar -r tx.a txe_event_flags_set_notify.o txe_mutex_create.o txe_mutex_delete.o txe_mutex_get.o txe_mutex_info_get.o txe_mutex_prioritize.o
+armar -r tx.a txe_mutex_put.o txe_queue_create.o txe_queue_delete.o txe_queue_flush.o txe_queue_front_send.o txe_queue_info_get.o txe_queue_prioritize.o
+armar -r tx.a txe_queue_receive.o txe_queue_send.o txe_queue_send_notify.o txe_semaphore_ceiling_put.o txe_semaphore_create.o txe_semaphore_delete.o
+armar -r tx.a txe_semaphore_get.o txe_semaphore_info_get.o txe_semaphore_prioritize.o txe_semaphore_put.o txe_semaphore_put_notify.o txe_thread_create.o
+armar -r tx.a txe_thread_delete.o txe_thread_entry_exit_notify.o txe_thread_info_get.o txe_thread_preemption_change.o txe_thread_priority_change.o
+armar -r tx.a txe_thread_relinquish.o txe_thread_reset.o txe_thread_resume.o txe_thread_suspend.o txe_thread_terminate.o txe_thread_time_slice_change.o
+armar -r tx.a txe_thread_wait_abort.o txe_timer_activate.o txe_timer_change.o txe_timer_create.o txe_timer_deactivate.o txe_timer_delete.o txe_timer_info_get.o
diff --git a/ports/arm11/ac5/example_build/build_threadx_sample.bat b/ports/arm11/ac5/example_build/build_threadx_sample.bat
new file mode 100644
index 00000000..f8fb754b
--- /dev/null
+++ b/ports/arm11/ac5/example_build/build_threadx_sample.bat
@@ -0,0 +1,4 @@
+armasm -g --cpu ARM1136J-S --apcs /interwork tx_initialize_low_level.s
+armcc -g -c -O2 --cpu ARM1136J-S --apcs /interwork -I../../../../common/inc -I../inc sample_threadx.c
+armlink -d -o sample_threadx.axf --elf --ro 0 --first tx_initialize_low_level.o(Init) --remove --map --symbols --list sample_threadx.map tx_initialize_low_level.o sample_threadx.o tx.a
+
diff --git a/ports/arm11/ac5/example_build/sample_threadx.c b/ports/arm11/ac5/example_build/sample_threadx.c
new file mode 100644
index 00000000..418ec634
--- /dev/null
+++ b/ports/arm11/ac5/example_build/sample_threadx.c
@@ -0,0 +1,369 @@
+/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ byte pool, and block pool. */
+
+#include "tx_api.h"
+
+#define DEMO_STACK_SIZE 1024
+#define DEMO_BYTE_POOL_SIZE 9120
+#define DEMO_BLOCK_POOL_SIZE 100
+#define DEMO_QUEUE_SIZE 100
+
+
+/* Define the ThreadX object control blocks... */
+
+TX_THREAD thread_0;
+TX_THREAD thread_1;
+TX_THREAD thread_2;
+TX_THREAD thread_3;
+TX_THREAD thread_4;
+TX_THREAD thread_5;
+TX_THREAD thread_6;
+TX_THREAD thread_7;
+TX_QUEUE queue_0;
+TX_SEMAPHORE semaphore_0;
+TX_MUTEX mutex_0;
+TX_EVENT_FLAGS_GROUP event_flags_0;
+TX_BYTE_POOL byte_pool_0;
+TX_BLOCK_POOL block_pool_0;
+
+
+/* Define the counters used in the demo application... */
+
+ULONG thread_0_counter;
+ULONG thread_1_counter;
+ULONG thread_1_messages_sent;
+ULONG thread_2_counter;
+ULONG thread_2_messages_received;
+ULONG thread_3_counter;
+ULONG thread_4_counter;
+ULONG thread_5_counter;
+ULONG thread_6_counter;
+ULONG thread_7_counter;
+
+
+/* Define thread prototypes. */
+
+void thread_0_entry(ULONG thread_input);
+void thread_1_entry(ULONG thread_input);
+void thread_2_entry(ULONG thread_input);
+void thread_3_and_4_entry(ULONG thread_input);
+void thread_5_entry(ULONG thread_input);
+void thread_6_and_7_entry(ULONG thread_input);
+
+
+/* Define main entry point. */
+
+int main()
+{
+
+ /* Enter the ThreadX kernel. */
+ tx_kernel_enter();
+}
+
+
+/* Define what the initial system looks like. */
+
+void tx_application_define(void *first_unused_memory)
+{
+
+CHAR *pointer = TX_NULL;
+
+
+ /* Create a byte memory pool from which to allocate the thread stacks. */
+ tx_byte_pool_create(&byte_pool_0, "byte pool 0", first_unused_memory, DEMO_BYTE_POOL_SIZE);
+
+ /* Put system definition stuff in here, e.g. thread creates and other assorted
+ create information. */
+
+ /* Allocate the stack for thread 0. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create the main thread. */
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+
+ /* Allocate the stack for thread 1. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
+ message queue. It is also interesting to note that these threads have a time
+ slice. */
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 2. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 3. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ An interesting thing here is that both threads share the same instruction area. */
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 4. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 5. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create thread 5. This thread simply pends on an event flag which will be set
+ by thread_0. */
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
+ 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 6. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 7. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the message queue. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
+
+ /* Create the message queue shared by threads 1 and 2. */
+ tx_queue_create(&queue_0, "queue 0", TX_1_ULONG, pointer, DEMO_QUEUE_SIZE*sizeof(ULONG));
+
+ /* Create the semaphore used by threads 3 and 4. */
+ tx_semaphore_create(&semaphore_0, "semaphore 0", 1);
+
+ /* Create the event flags group used by threads 1 and 5. */
+ tx_event_flags_create(&event_flags_0, "event flags 0");
+
+ /* Create the mutex used by thread 6 and 7 without priority inheritance. */
+ tx_mutex_create(&mutex_0, "mutex 0", TX_NO_INHERIT);
+
+ /* Allocate the memory for a small block pool. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_BLOCK_POOL_SIZE, TX_NO_WAIT);
+
+ /* Create a block memory pool to allocate a message buffer from. */
+ tx_block_pool_create(&block_pool_0, "block pool 0", sizeof(ULONG), pointer, DEMO_BLOCK_POOL_SIZE);
+
+ /* Allocate a block and release the block memory. */
+ tx_block_allocate(&block_pool_0, (VOID **) &pointer, TX_NO_WAIT);
+
+ /* Release the block back to the pool. */
+ tx_block_release(pointer);
+}
+
+
+
+/* Define the test threads. */
+
+void thread_0_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sits in while-forever-sleep loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_0_counter++;
+
+ /* Sleep for 10 ticks. */
+ tx_thread_sleep(10);
+
+ /* Set event flag 0 to wakeup thread 5. */
+ status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_1_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sends messages to a queue shared by thread 2. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_1_counter++;
+
+ /* Send message to queue 0. */
+ status = tx_queue_send(&queue_0, &thread_1_messages_sent, TX_WAIT_FOREVER);
+
+ /* Check completion status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Increment the message sent. */
+ thread_1_messages_sent++;
+ }
+}
+
+
+void thread_2_entry(ULONG thread_input)
+{
+
+ULONG received_message;
+UINT status;
+
+ /* This thread retrieves messages placed on the queue by thread 1. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_2_counter++;
+
+ /* Retrieve a message from the queue. */
+ status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
+
+ /* Check completion status and make sure the message is what we
+ expected. */
+ if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
+ break;
+
+ /* Otherwise, all is okay. Increment the received message count. */
+ thread_2_messages_received++;
+ }
+}
+
+
+void thread_3_and_4_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 3 and thread 4. As the loop
+ below shows, these function compete for ownership of semaphore_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 3)
+ thread_3_counter++;
+ else
+ thread_4_counter++;
+
+ /* Get the semaphore with suspension. */
+ status = tx_semaphore_get(&semaphore_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the semaphore. */
+ tx_thread_sleep(2);
+
+ /* Release the semaphore. */
+ status = tx_semaphore_put(&semaphore_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_5_entry(ULONG thread_input)
+{
+
+UINT status;
+ULONG actual_flags;
+
+
+ /* This thread simply waits for an event in a forever loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_5_counter++;
+
+ /* Wait for event flag 0. */
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ &actual_flags, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if ((status != TX_SUCCESS) || (actual_flags != 0x1))
+ break;
+ }
+}
+
+
+void thread_6_and_7_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 6 and thread 7. As the loop
+ below shows, these function compete for ownership of mutex_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 6)
+ thread_6_counter++;
+ else
+ thread_7_counter++;
+
+ /* Get the mutex with suspension. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Get the mutex again with suspension. This shows
+ that an owning thread may retrieve the mutex it
+ owns multiple times. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the mutex. */
+ tx_thread_sleep(2);
+
+ /* Release the mutex. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Release the mutex again. This will actually
+ release ownership since it was obtained twice. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
diff --git a/ports/arm11/ac5/example_build/tx_initialize_low_level.s b/ports/arm11/ac5/example_build/tx_initialize_low_level.s
new file mode 100644
index 00000000..a7bd0a35
--- /dev/null
+++ b/ports/arm11/ac5/example_build/tx_initialize_low_level.s
@@ -0,0 +1,444 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Initialize */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_initialize.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+SVC_MODE EQU 0xD3 ; Disable IRQ/FIQ SVC mode
+IRQ_MODE EQU 0xD2 ; Disable IRQ/FIQ IRQ mode
+FIQ_MODE EQU 0xD1 ; Disable IRQ/FIQ FIQ mode
+SYS_MODE EQU 0xDF ; Disable IRQ/FIQ SYS mode
+HEAP_SIZE EQU 4096 ; Heap size
+FIQ_STACK_SIZE EQU 512 ; FIQ stack size
+SYS_STACK_SIZE EQU 1024 ; SYS stack size (used for nested interrupts)
+IRQ_STACK_SIZE EQU 1024 ; IRQ stack size
+;
+;
+;/* ARM11 ARMulator Timer and Interrupt controller information. This depends on
+; the ARMulator's Interrupt Controller and Timer being enabled in the default.ami.
+; In addition, the addresses must match those specified in the peripherals.ami file.
+; Please refer to section 2.10 and 4.16 of the Debug Target Guide, version 1.2. */
+;
+IRQStatus EQU 0x0a000000 ; IRQ Status Register
+IRQRawStatus EQU 0x0a000004 ; IRQ Raw Status Register
+IRQEnable EQU 0x0a000008 ; IRQ Enable Set Register
+IRQEnableClear EQU 0x0a00000C ; IRQ Enable Clear Register
+IRQSoft EQU 0x0a000010 ; IRQ Soft
+FIQStatus EQU 0x0a000100 ; FIQ Status Register
+FIQRawStatus EQU 0x0a000104 ; FIQ Raw Status Register
+FIQEnable EQU 0x0a000108 ; FIQ Enable Set Register
+FIQEnableClear EQU 0x0a00010C ; FIQ Enable Clear Register
+
+TIMER1_BIT EQU 0x00000010 ; IRQ/FIQ Timer1 bit
+TIMER2_BIT EQU 0x00000020 ; IRQ/FIQ Timer2 bit
+
+Timer1Load EQU 0x0a800000 ; Timer1 Load Register
+Timer1Value EQU 0x0a800004 ; Timer1 Value Register
+Timer1Control EQU 0x0a800008 ; Timer1 Control Register
+Timer1Clear EQU 0x0a80000C ; Timer1 Clear Register
+
+Timer1Mode EQU 0x000000C0 ; Timer1 Control Value, Timer enable, periodic, no prescaler
+Timer1Period EQU 0x0000FFFF ; Timer1 count-down period, maximum value
+
+Timer2Load EQU 0x0a800020 ; Timer2 Load Register
+Timer2Value EQU 0x0a800024 ; Timer2 Value Register
+Timer2Control EQU 0x0a800028 ; Timer2 Control Register
+Timer2Clear EQU 0x0a80002C ; Timer2 Clear Register
+;
+;
+ IMPORT _tx_thread_system_stack_ptr
+ IMPORT _tx_initialize_unused_memory
+ IMPORT _tx_thread_context_save
+ IMPORT _tx_thread_context_restore
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+ IMPORT _tx_thread_fiq_context_save
+ IMPORT _tx_thread_fiq_context_restore
+ ENDIF
+ IF :DEF:TX_ENABLE_IRQ_NESTING
+ IMPORT _tx_thread_irq_nesting_start
+ IMPORT _tx_thread_irq_nesting_end
+ ENDIF
+ IF :DEF:TX_ENABLE_FIQ_NESTING
+ IMPORT _tx_thread_fiq_nesting_start
+ IMPORT _tx_thread_fiq_nesting_end
+ ENDIF
+ IMPORT _tx_timer_interrupt
+ IMPORT __main
+ IMPORT _tx_version_id
+ IMPORT _tx_build_options
+ IMPORT |Image$$ZI$$Limit|
+;
+;
+ AREA Init, CODE, READONLY
+;
+;/* Define the ARM11 vector area. This should be located or copied to 0. */
+;
+ EXPORT __vectors
+__vectors
+ LDR pc,=__main ; Reset goes to startup function
+ LDR pc,=__tx_undefined ; Undefined handler
+ LDR pc,=__tx_swi_interrupt ; Software interrupt handler
+ LDR pc,=__tx_prefetch_handler ; Prefetch exception handler
+ LDR pc,=__tx_abort_handler ; Abort exception handler
+ LDR pc,=__tx_reserved_handler ; Reserved exception handler
+ LDR pc,=__tx_irq_handler ; IRQ interrupt handler
+ LDR pc,=__tx_fiq_handler ; FIQ interrupt handler
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_initialize_low_level(VOID)
+;{
+ EXPORT _tx_initialize_low_level
+_tx_initialize_low_level
+;
+;
+; /****** NOTE ****** We must be in SVC MODE at this point. Some monitors
+; enter this routine in USER mode and require a software interrupt to
+; change into SVC mode. */
+;
+ LDR r1, =|Image$$ZI$$Limit| ; Get end of non-initialized RAM area
+ LDR r2, =HEAP_SIZE ; Pickup the heap size
+ ADD r1, r2, r1 ; Setup heap limit
+ ADD r1, r1, #4 ; Setup stack limit
+;
+ IF :DEF:TX_ENABLE_IRQ_NESTING
+; /* Setup the system mode stack for nested interrupt support */
+ LDR r2, =SYS_STACK_SIZE ; Pickup stack size
+ MOV r3, #SYS_MODE ; Build SYS mode CPSR
+ MSR CPSR_cxsf, r3 ; Enter SYS mode
+ ADD r1, r1, r2 ; Calculate start of SYS stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ MOV sp, r1 ; Setup SYS stack pointer
+ ENDIF
+;
+ LDR r2, =FIQ_STACK_SIZE ; Pickup stack size
+ MOV r0, #FIQ_MODE ; Build FIQ mode CPSR
+ MSR CPSR_c, r0 ; Enter FIQ mode
+ ADD r1, r1, r2 ; Calculate start of FIQ stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ MOV sp, r1 ; Setup FIQ stack pointer
+ MOV sl, #0 ; Clear sl
+ MOV fp, #0 ; Clear fp
+ LDR r2, =IRQ_STACK_SIZE ; Pickup IRQ (system stack size)
+ MOV r0, #IRQ_MODE ; Build IRQ mode CPSR
+ MSR CPSR_c, r0 ; Enter IRQ mode
+ ADD r1, r1, r2 ; Calculate start of IRQ stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ MOV sp, r1 ; Setup IRQ stack pointer
+ MOV r0, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_c, r0 ; Enter SVC mode
+ LDR r3, =_tx_thread_system_stack_ptr ; Pickup stack pointer
+ STR r1, [r3, #0] ; Save the system stack
+;
+; /* Save the system stack pointer. */
+; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
+;
+ LDR r1, =_tx_thread_system_stack_ptr ; Pickup address of system stack ptr
+ LDR r0, [r1, #0] ; Pickup system stack
+ ADD r0, r0, #4 ; Increment to next free word
+;
+; /* Save the first available memory address. */
+; _tx_initialize_unused_memory = (VOID_PTR) |Image$$ZI$$Limit| + HEAP + [SYS_STACK] + FIQ_STACK + IRQ_STACK;
+;
+ LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
+ STR r0, [r2, #0] ; Save first free memory address
+;
+; /* Setup Timer for periodic interrupts. */
+;
+; /* Setup ARMulator Timer1 for periodic interrupts. */
+;
+ LDR r0,=IRQEnable ; Build address of IRQ enable register
+ LDR r1,=TIMER1_BIT ; Build value of Timer1 IRQ enable
+ STR r1,[r0] ; Enable IRQ interrupts for Timer1
+
+ LDR r0,=Timer1Load ; Build address of Timer1 load register
+ LDR r1,=Timer1Period ; Build Timer1 periodic value
+ STR r1,[r0] ; Set Timer1 load value
+
+ LDR r0,=Timer1Control ; Build address of Timer1 control register
+ LDR r1,=Timer1Mode ; Build Timer1 control value
+ STR r1,[r0] ; Enable Timer1
+;
+; /* Done, return to caller. */
+;
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;}
+;
+;
+;/* Define initial heap/stack routine for the ARM RealView (and ADS) startup code. This
+; routine will set the initial stack to use the ThreadX IRQ & FIQ &
+; (optionally SYS) stack areas. */
+;
+ EXPORT __user_initial_stackheap
+__user_initial_stackheap
+ LDR r0, =|Image$$ZI$$Limit| ; Get end of non-initialized RAM area
+ LDR r2, =HEAP_SIZE ; Pickup the heap size
+ ADD r2, r2, r0 ; Setup heap limit
+ ADD r3, r2, #4 ; Setup stack limit
+ MOV r1, r3 ; Setup start of stack
+ IF :DEF:TX_ENABLE_IRQ_NESTING
+ LDR r12, =SYS_STACK_SIZE ; Pickup IRQ system stack
+ ADD r1, r1, r12 ; Setup the return system stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ ENDIF
+ LDR r12, =FIQ_STACK_SIZE ; Pickup FIQ stack size
+ ADD r1, r1, r12 ; Setup the return system stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ LDR r12, =IRQ_STACK_SIZE ; Pickup IRQ system stack
+ ADD r1, r1, r12 ; Setup the return system stack
+ BIC r1, r1, #7 ; Ensure 8-byte alignment
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+;
+;/* Define shells for each of the interrupt vectors. */
+;
+ EXPORT __tx_undefined
+__tx_undefined
+ B __tx_undefined ; Undefined handler
+;
+ EXPORT __tx_swi_interrupt
+__tx_swi_interrupt
+ B __tx_swi_interrupt ; Software interrupt handler
+;
+ EXPORT __tx_prefetch_handler
+__tx_prefetch_handler
+ B __tx_prefetch_handler ; Prefetch exception handler
+;
+ EXPORT __tx_abort_handler
+__tx_abort_handler
+ B __tx_abort_handler ; Abort exception handler
+;
+ EXPORT __tx_reserved_handler
+__tx_reserved_handler
+ B __tx_reserved_handler ; Reserved exception handler
+;
+;
+ EXPORT __tx_irq_handler
+ EXPORT __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. In
+; addition, IRQ interrupts may be re-enabled - with certain restrictions -
+; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+; small code sequences where lr is saved before enabling interrupts and
+; restored after interrupts are again disabled. */
+;
+;
+; /* Check for Timer1 interrupts on the ARMulator. */
+
+ LDR r1,=IRQStatus ; Pickup address of IRQStatus register
+ LDR r2, [r1] ; Read IRQStatus
+ LDR r0,=TIMER1_BIT ; Pickup Timer1 interrupt present bit
+ AND r2, r2, r0 ; Is this a timer interrupt?
+ CMP r2, r0 ;
+ BNE _tx_not_timer_interrupt ; If 0, not a timer interrupt
+
+ LDR r1,=Timer1Clear ; Build address of Timer1 clear register
+ MOV r0,#0 ;
+ STR r0, [r1] ; Clear timer 0 interrupt
+
+ BL _tx_timer_interrupt ; Timer interrupt handler
+_tx_not_timer_interrupt
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; from IRQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; prior to enabling nested IRQ interrupts. */
+ IF :DEF:TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_start
+ ENDIF
+;
+;
+; /* Application IRQ handlers can be called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_context_restore.
+; This routine returns in processing in IRQ mode with interrupts disabled. */
+ IF :DEF:TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_end
+ ENDIF
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+;
+;
+; /* This is an example of a vectored IRQ handler. */
+;
+ EXPORT __tx_example_vectored_irq_handler
+__tx_example_vectored_irq_handler
+;
+;
+; /* Save initial context and call context save to prepare for
+; vectored ISR execution. */
+;
+; STMDB sp!, {r0-r3} ; Save some scratch registers
+; MRS r0, SPSR ; Pickup saved SPSR
+; SUB lr, lr, #4 ; Adjust point of interrupt
+; STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
+; BL _tx_thread_vectored_context_save ; Vectored context save
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. In
+; addition, IRQ interrupts may be re-enabled - with certain restrictions -
+; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+; small code sequences where lr is saved before enabling interrupts and
+; restored after interrupts are again disabled. */
+;
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; from IRQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; prior to enabling nested IRQ interrupts. */
+; IF :DEF:TX_ENABLE_IRQ_NESTING
+; BL _tx_thread_irq_nesting_start
+; ENDIF
+;
+; /* Application IRQ handlers can be called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_context_restore.
+; This routine returns in processing in IRQ mode with interrupts disabled. */
+; IF :DEF:TX_ENABLE_IRQ_NESTING
+; BL _tx_thread_irq_nesting_end
+; ENDIF
+;
+; /* Jump to context restore to restore system context. */
+; B _tx_thread_context_restore
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+ EXPORT __tx_fiq_handler
+ EXPORT __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; from FIQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with FIQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; prior to enabling nested FIQ interrupts. */
+ IF :DEF:TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_start
+ ENDIF
+;
+; /* Application FIQ handlers can be called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_fiq_context_restore. */
+ IF :DEF:TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_end
+ ENDIF
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+;
+;
+ ELSE
+ EXPORT __tx_fiq_handler
+__tx_fiq_handler
+ B __tx_fiq_handler ; FIQ interrupt handler
+ ENDIF
+;
+; /* Reference build options and version ID to ensure they come in. */
+;
+ LDR r2, =_tx_build_options ; Pickup build options variable address
+ LDR r0, [r2, #0] ; Pickup build options content
+ LDR r2, =_tx_version_id ; Pickup version ID variable address
+ LDR r0, [r2, #0] ; Pickup version ID content
+;
+;
+ END
+
diff --git a/ports/arm11/ac5/inc/tx_port.h b/ports/arm11/ac5/inc/tx_port.h
new file mode 100644
index 00000000..90145158
--- /dev/null
+++ b/ports/arm11/ac5/inc/tx_port.h
@@ -0,0 +1,327 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) Microsoft Corporation. All rights reserved. */
+/* */
+/* This software is licensed under the Microsoft Software License */
+/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+/* and in the root directory of this software. */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/AC5 */
+/* 6.0.1 */
+/* */
+/* AUTHOR */
+/* */
+/* William E. Lamie, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+/* */
+/**************************************************************************/
+
+#ifndef TX_PORT_H
+#define TX_PORT_H
+
+
+/* Determine if the optional ThreadX user define file should be used. */
+
+#ifdef TX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in tx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "tx_user.h"
+#endif
+
+
+/* Define compiler library include files. */
+
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Define ThreadX basic types for this port. */
+
+#define VOID void
+typedef char CHAR;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef short SHORT;
+typedef unsigned short USHORT;
+
+
+/* Define the priority levels for ThreadX. Legal values range
+ from 32 to 1024 and MUST be evenly divisible by 32. */
+
+#ifndef TX_MAX_PRIORITIES
+#define TX_MAX_PRIORITIES 32
+#endif
+
+
+/* Define the minimum stack for a ThreadX thread on this processor. If the size supplied during
+ thread creation is less than this value, the thread create call will return an error. */
+
+#ifndef TX_MINIMUM_STACK
+#define TX_MINIMUM_STACK 200 /* Minimum stack size for this port */
+#endif
+
+
+/* Define the system timer thread's default stack size and priority. These are only applicable
+ if TX_TIMER_PROCESS_IN_ISR is not defined. */
+
+#ifndef TX_TIMER_THREAD_STACK_SIZE
+#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
+#endif
+
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#endif
+
+
+/* Define various constants for the ThreadX ARM port. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
+#else
+#define TX_INT_DISABLE 0x80 /* Disable IRQ interrupts */
+#endif
+#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
+
+
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ source constants would be:
+
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
+#define TX_TRACE_TIME_MASK 0x0000FFFFUL
+
+*/
+
+#ifndef TX_TRACE_TIME_SOURCE
+#define TX_TRACE_TIME_SOURCE ++_tx_trace_simulated_time
+#endif
+#ifndef TX_TRACE_TIME_MASK
+#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
+#endif
+
+
+/* Define the port specific options for the _tx_build_options variable. This variable indicates
+ how the ThreadX library was built. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_FIQ_ENABLED 1
+#else
+#define TX_FIQ_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_IRQ_NESTING
+#define TX_IRQ_NESTING_ENABLED 2
+#else
+#define TX_IRQ_NESTING_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_FIQ_NESTING
+#define TX_FIQ_NESTING_ENABLED 4
+#else
+#define TX_FIQ_NESTING_ENABLED 0
+#endif
+
+#define TX_PORT_SPECIFIC_BUILD_OPTIONS TX_FIQ_ENABLED | TX_IRQ_NESTING_ENABLED | TX_FIQ_NESTING_ENABLED
+
+
+/* Define the in-line initialization constant so that modules with in-line
+ initialization capabilities can prevent their initialization from being
+ a function call. */
+
+#define TX_INLINE_INITIALIZATION
+
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+#ifdef TX_ENABLE_STACK_CHECKING
+#undef TX_DISABLE_STACK_FILLING
+#endif
+
+
+/* Define the TX_THREAD control block extensions for this port. The main reason
+ for the multiple macros is so that backward compatibility can be maintained with
+ existing ThreadX kernel awareness modules. */
+
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
+
+
+/* Define the port extensions of the remaining ThreadX objects. */
+
+#define TX_BLOCK_POOL_EXTENSION
+#define TX_BYTE_POOL_EXTENSION
+#define TX_EVENT_FLAGS_GROUP_EXTENSION
+#define TX_MUTEX_EXTENSION
+#define TX_QUEUE_EXTENSION
+#define TX_SEMAPHORE_EXTENSION
+#define TX_TIMER_EXTENSION
+
+
+/* Define the user extension field of the thread control block. Nothing
+ additional is needed for this port so it is defined as white space. */
+
+#ifndef TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
+#endif
+
+
+/* Define the macros for processing extensions in tx_thread_create, tx_thread_delete,
+ tx_thread_shell_entry, and tx_thread_terminate. */
+
+
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+
+
+/* Define the ThreadX object creation extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_CREATE_EXTENSION(group_ptr)
+#define TX_MUTEX_CREATE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_CREATE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_CREATE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_CREATE_EXTENSION(timer_ptr)
+
+
+/* Define the ThreadX object deletion extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_DELETE_EXTENSION(group_ptr)
+#define TX_MUTEX_DELETE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_DELETE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_DELETE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
+
+
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
+ lowest bit set. */
+
+#ifndef __thumb
+
+#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
+ b = (ULONG) __clz((unsigned int) m); \
+ b = 31 - b;
+#endif
+
+
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
+ present prior to the disable macro. In most cases, the save area macro
+ is used to define a local function save area for the disable and restore
+ macros. */
+
+#ifndef __thumb
+
+#define TX_INTERRUPT_SAVE_AREA register unsigned int interrupt_save_disabled;
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+
+/* IRQ and FIQ support. */
+
+#define TX_DISABLE __memory_changed(), interrupt_save_disabled = __disable_irq(); \
+ __disable_fiq();
+
+#define TX_RESTORE if (!interrupt_save_disabled) \
+ { \
+ __enable_irq(); \
+ __enable_fiq(); \
+ }
+
+#else
+
+#define TX_DISABLE __memory_changed(), interrupt_save_disabled = __disable_irq();
+
+#define TX_RESTORE if (!interrupt_save_disabled) \
+ { \
+ __enable_irq(); \
+ }
+#endif
+
+#else
+
+unsigned int _tx_thread_interrupt_disable(void);
+unsigned int _tx_thread_interrupt_restore(UINT old_posture);
+
+
+#define TX_INTERRUPT_SAVE_AREA unsigned int interrupt_save;
+
+#define TX_DISABLE interrupt_save = _tx_thread_interrupt_disable();
+#define TX_RESTORE _tx_thread_interrupt_restore(interrupt_save);
+#endif
+
+
+/* Define the interrupt lockout macros for each ThreadX object. */
+
+#define TX_BLOCK_POOL_DISABLE TX_DISABLE
+#define TX_BYTE_POOL_DISABLE TX_DISABLE
+#define TX_EVENT_FLAGS_GROUP_DISABLE TX_DISABLE
+#define TX_MUTEX_DISABLE TX_DISABLE
+#define TX_QUEUE_DISABLE TX_DISABLE
+#define TX_SEMAPHORE_DISABLE TX_DISABLE
+
+
+/* Define the version ID of ThreadX. This may be utilized by the application. */
+
+#ifdef TX_THREAD_INIT
+CHAR _tx_version_id[] =
+ "Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/AC5 Version 6.0.1 *";
+#else
+extern CHAR _tx_version_id[];
+#endif
+
+
+#endif
+
diff --git a/ports/arm11/ac5/readme_threadx.txt b/ports/arm11/ac5/readme_threadx.txt
new file mode 100644
index 00000000..836a2e01
--- /dev/null
+++ b/ports/arm11/ac5/readme_threadx.txt
@@ -0,0 +1,534 @@
+ Microsoft's Azure RTOS ThreadX for ARM11
+
+ Thumb & 32-bit Mode
+
+ Using ARM Compiler 5 (AC5)
+
+1. Building the ThreadX run-time Library
+
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the ARM
+AC5 development environment. At this point you may run the build_threadx.bat
+batch file. This will build the ThreadX run-time environment in the
+"example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
+application in order to use ThreadX.
+
+
+2. Demonstration System
+
+Since there is no ARM11 FVP, there are no instructions here for running
+the demonstration; users are expected to run the demonstration on their
+platform of choice.
+
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
+
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.axf
+is a binary file that can be downloaded and executed on the user's platform of choice.
+
+
+3. System Initialization
+
+The entry point in ThreadX for the Cortex-A5 using AC5 tools is at label
+__main. This is defined within the AC5 compiler's startup code. In addition,
+this is where all static and global pre-set C variable initialization processing
+takes place.
+
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, the vector area, and a periodic timer interrupt
+source. By default, the vector area is defined to be located in the Init area,
+which is defined at the top of tx_initialize_low_level.s. This area is typically
+located at 0. In situations where this is impossible, the vectors at the beginning
+of the Init area should be copied to address 0.
+
+This is also where initialization of a periodic timer interrupt source
+should take place.
+
+In addition, _tx_initialize_low_level determines the first available
+address for use by the application, which is supplied as the sole input
+parameter to your application definition function, tx_application_define.
+
+
+4. Assembler / Compiler Switches
+
+The following are compiler switches used in building the demonstration
+system:
+
+Compiler Switch Meaning
+
+ -g Specifies debug information
+ -c Specifies object code generation
+ --cpu Cortex-A5 Specifies Cortex-A5 instruction set
+ --apcs /interwork Specifies Thumb/32-bit compatibility
+
+Linker Switch Meaning
+
+ -d Specifies to retain debug information in output file
+ -o demo.axf Specifies demo output file name
+ --elf Specifies elf output file format
+ --ro Specifies that Read-Only memory starts at address 0
+ --first tx_initialize_low_level.o(Init)
+ Specifies that the first area loaded is Init
+ --remove Remove unused areas
+ --list Specifies map file name
+ --symbols Specifies symbols for map file
+ --map Creates a map file
+
+Application Defines
+
+ --PD "TX_ENABLE_FIQ_SUPPORT SETL {TRUE}" This assembler define enables FIQ
+ interrupt handling support in the
+ ThreadX assembly files. If used,
+ it should be used on all assembly
+ files and the generic C source of
+ ThreadX should be compiled with
+ TX_ENABLE_FIQ_SUPPORT defined as well.
+ --PD "TX_ENABLE_IRQ_NESTING SETL {TRUE}" This assembler define enables IRQ
+ nested support. If IRQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.s.
+ --PD "TX_ENABLE_FIQ_NESTING SETL {TRUE}" This assembler define enables FIQ
+ nested support. If FIQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.s. In addition,
+ IRQ nesting should also be enabled.
+ -DTX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
+ interrupt handling in the ThreadX
+ generic C source. This define
+ should also be used in conjunction
+ with the corresponding assembler
+ define.
+ -DTX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
+ this define causes basic ThreadX error
+ checking to be disabled. Please see
+ Chapter 2 in the "ThreadX User Guide"
+ for more details.
+
+ -DTX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
+ default, this value is set to 32 priority levels.
+
+ -DTX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
+ in tx_port.h.
+
+ -DTX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
+ value is port-specific and is found in tx_port.h.
+
+ -DTX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
+ in tx_port.h.
+
+ -DTX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
+ By default, this option is not defined.
+
+ -DTX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
+ By default, this option is not defined.
+
+ -DTX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
+ not defined.
+
+ -DTX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
+ By default, this option is not defined.
+
+ -DTX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
+ By default, this option is not defined.
+
+ -DTX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
+ By default, this option is not defined.
+
+ -DTX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
+ and improves performance.
+
+ -DTX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
+ not defined.
+
+ -DTX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
+ not defined.
+
+ -DTX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
+ is not defined.
+
+ -DTX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
+ not defined.
+
+ -DTX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
+ not defined.
+
+ -DTX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
+ not defined.
+
+ -DTX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
+ not defined.
+
+ -DTX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
+ not defined.
+
+ -DTX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
+ feature. The trace buffer is supplied at a later time
+ via an application call to tx_trace_enable.
+
+ -DTX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
+ built with TX_ENABLE_EVENT_TRACE defined.
+
+ -DTX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ library is built with TX_ENABLE_EVENT_TRACE defined.
+
+
+
+5. Register Usage and Stack Frames
+
+The AC5 compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
+is only the non-scratch registers.
+
+The following defines the saved context stack frames for context switches
+that occur as a result of interrupt handling or from thread-level API calls.
+All suspended threads have one of these two types of stack frames. The top
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+associated thread control block TX_THREAD.
+
+
+
+ Offset Interrupted Stack Frame Non-Interrupt Stack Frame
+
+ 0x00 1 0
+ 0x04 CPSR CPSR
+ 0x08 r0 (a1) r4 (v1)
+ 0x0C r1 (a2) r5 (v2)
+ 0x10 r2 (a3) r6 (v3)
+ 0x14 r3 (a4) r7 (v4)
+ 0x18 r4 (v1) r8 (v5)
+ 0x1C r5 (v2) r9 (v6)
+ 0x20 r6 (v3) r10 (v7)
+ 0x24 r7 (v4) r11 (fp)
+ 0x28 r8 (v5) r14 (lr)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
+ 0x3C r14 (lr)
+ 0x40 PC
+
+
+6. Improving Performance
+
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the build_threadx.bat file to
+remove the -g option and enable all compiler optimizations.
+
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
+
+
+7. Interrupt Handling
+
+ThreadX provides complete and high-performance interrupt handling for Cortex-A5
+targets. There are a certain set of requirements that are defined in the
+following sub-sections:
+
+
+7.1 Vector Area
+
+The Cortex-A5 vectors start at address zero. The demonstration system startup
+Init area contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
+
+
+7.2 IRQ ISRs
+
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports nested
+IRQ interrupts. The following sub-sections define the IRQ capabilities.
+
+
+7.2.1 Standard IRQ ISRs
+
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+is the default IRQ handler defined in tx_initialize_low_level.s:
+
+ EXPORT __tx_irq_handler
+ EXPORT __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save ; Jump to the context save
+__tx_irq_processing_return
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. Note
+; that IRQ interrupts are still disabled upon return from the context
+; save function. */
+;
+; /* Application ISR call(s) go here! */
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.2 Vectored IRQ ISRs
+
+The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
+by the particular implementation. The following is an example IRQ handler defined in
+tx_initialize_low_level.s:
+
+ EXPORT __tx_irq_example_handler
+__tx_irq_example_handler
+;
+; /* Call context save to save system context. */
+
+ STMDB sp!, {r0-r3} ; Save some scratch registers
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other scratch registers
+ BL _tx_thread_vectored_context_save ; Call the vectored IRQ context save
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. Note
+; that IRQ interrupts are still disabled upon return from the context
+; save function. */
+;
+; /* Application ISR call goes here! */
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.3 Nested IRQ Support
+
+By default, nested IRQ interrupt support is not enabled. To enable nested
+IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
+defined. With this defined, two new IRQ interrupt management services are
+available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
+These function should be called between the IRQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no longer required,
+calling the _tx_thread_irq_nesting_end service disables nesting by disabling
+IRQ interrupts and switching back to IRQ mode in preparation for the IRQ
+context restore service.
+
+The following is an example of enabling IRQ nested interrupts in a standard
+IRQ handler:
+
+ EXPORT __tx_irq_handler
+ EXPORT __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return
+;
+; /* Enable nested IRQ interrupts. NOTE: Since this service returns
+; with IRQ interrupts enabled, all IRQ interrupt sources must be
+; cleared prior to calling this service. */
+ BL _tx_thread_irq_nesting_start
+;
+; /* Application ISR call(s) go here! */
+;
+; /* Disable nested IRQ interrupts. The mode is switched back to
+; IRQ mode and IRQ interrupts are disable upon return. */
+ BL _tx_thread_irq_nesting_end
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.3 FIQ Interrupts
+
+By default, Cortex-A5 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
+from default FIQ ISRs, which is located in tx_initialize_low_level.s.
+
+
+7.3.1 Managed FIQ Interrupts
+
+Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
+are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
+this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
+handlers defined previously. The following is default FIQ handler
+defined in tx_initialize_low_level.s:
+
+
+ EXPORT __tx_fiq_handler
+ EXPORT __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Application FIQ handlers can be called here! */
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+7.3.1.1 Nested FIQ Support
+
+By default, nested FIQ interrupt support is not enabled. To enable nested
+FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
+defined. With this defined, two new FIQ interrupt management services are
+available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
+These function should be called between the FIQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no longer required,
+calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+context restore service.
+
+The following is an example of enabling FIQ nested interrupts in the
+typical FIQ handler:
+
+
+ EXPORT __tx_fiq_handler
+ EXPORT __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Enable nested FIQ interrupts. NOTE: Since this service returns
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; cleared prior to calling this service. */
+ BL _tx_thread_fiq_nesting_start
+;
+; /* Application FIQ handlers can be called here! */
+;
+; /* Disable nested FIQ interrupts. The mode is switched back to
+; FIQ mode and FIQ interrupts are disable upon return. */
+ BL _tx_thread_fiq_nesting_end
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+8. ThreadX Timer Interrupt
+
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional. However, all other
+ThreadX services are operational without a periodic timer source.
+
+To add the timer interrupt processing, simply make a call to
+_tx_timer_interrupt in the IRQ processing. An example of this can be
+found in the file tx_initialize_low_level.s in the Integrator sub-directories.
+
+
+9. Thumb/Cortex-A5 Mixed Mode
+
+By default, ThreadX is setup for running in Cortex-A5 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. If any Thumb code
+is used the entire ThreadX source- both C and assembly - should be built
+with the "-apcs /interwork" option.
+
+11. VFP Support
+
+By default, VFP support is disabled for each thread. If saving the context of the VFP registers
+is needed, the following API call must be made from the context of the application thread - before
+the VFP usage:
+
+void tx_thread_vfp_enable(void);
+
+After this API is called in the application, VFP registers will be saved/restored for this thread if it
+is preempted via an interrupt. All other suspension of the this thread will not require the VFP registers
+to be saved/restored.
+
+To disable VFP register context saving, simply call the following API:
+
+void tx_thread_vfp_disable(void);
+
+
+12. Revision History
+
+For generic code revision information, please refer to the readme_threadx_generic.txt
+file, which is included in your distribution. The following details the revision
+information associated with this specific port of ThreadX:
+
+06/30/2020 Initial ThreadX 6.0.1 version for Cortex-A5 using AC5 tools.
+
+
+Copyright(c) 1996-2020 Microsoft Corporation
+
+
+https://azure.com/rtos
+
diff --git a/ports/arm11/ac5/src/tx_thread_context_restore.s b/ports/arm11/ac5/src/tx_thread_context_restore.s
new file mode 100644
index 00000000..1d6cd60f
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_context_restore.s
@@ -0,0 +1,247 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+IRQ_MODE EQU 0xD2 ; IRQ mode
+SVC_MODE EQU 0xD3 ; SVC mode
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
+ ELSE
+DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
+ ENDIF
+MODE_MASK EQU 0x1F ; Mode mask
+THUMB_MASK EQU 0x20 ; Thumb bit mask
+SVC_MODE_BITS EQU 0x13 ; SVC mode value
+;
+;
+ IMPORT _tx_thread_system_state
+ IMPORT _tx_thread_current_ptr
+ IMPORT _tx_thread_execute_ptr
+ IMPORT _tx_timer_time_slice
+ IMPORT _tx_thread_schedule
+ IMPORT _tx_thread_preempt_disable
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_isr_exit
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_context_restore(VOID)
+;{
+ EXPORT _tx_thread_context_restore
+_tx_thread_context_restore
+;
+; /* Lockout interrupts. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ ORR r0, r3, #DISABLE_INTS ; Build interrupt disable value
+ MSR CPSR_cxsf, r0 ; Lockout interrupts
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR exit function to indicate an ISR is complete. */
+;
+ BL _tx_execution_isr_exit ; Call the ISR exit function
+ ENDIF
+;
+; /* Determine if interrupts are nested. */
+; if (--_tx_thread_system_state)
+; {
+;
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ SUB r2, r2, #1 ; Decrement the counter
+ STR r2, [r3, #0] ; Store the counter
+ CMP r2, #0 ; Was this the first interrupt?
+ BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
+;
+; /* Interrupts are nested. */
+;
+; /* Just recover the saved registers and return to the point of
+; interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+__tx_thread_not_nested_restore
+;
+; /* Determine if a thread was interrupted and no preemption is required. */
+; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+; || (_tx_thread_preempt_disable))
+; {
+;
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup actual current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_restore ; Yes, idle system was interrupted
+;
+ LDR r3, =_tx_thread_preempt_disable ; Pickup preempt disable address
+ LDR r2, [r3, #0] ; Pickup actual preempt disable flag
+ CMP r2, #0 ; Is it set?
+ BNE __tx_thread_no_preempt_restore ; Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr ; Pickup address of execute thread ptr
+ LDR r2, [r3, #0] ; Pickup actual execute thread pointer
+ CMP r0, r2 ; Is the same thread highest priority?
+ BNE __tx_thread_preempt_restore ; No, preemption needs to happen
+;
+;
+__tx_thread_no_preempt_restore
+;
+; /* Restore interrupted thread or ISR. */
+;
+; /* Pickup the saved stack pointer. */
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+;
+; /* Recover the saved context and return to the point of interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+; else
+; {
+__tx_thread_preempt_restore
+;
+ LDMIA sp!, {r3, r10, r12, lr} ; Recover temporarily saved registers
+ MOV r1, lr ; Save lr (point of interrupt)
+ MOV r2, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_c, r2 ; Enter SVC mode
+ STR r1, [sp, #-4]! ; Save point of interrupt
+ STMDB sp!, {r4-r12, lr} ; Save upper half of registers
+ MOV r4, r3 ; Save SPSR in r4
+ MOV r2, #IRQ_MODE ; Build IRQ mode CPSR
+ MSR CPSR_c, r2 ; Enter IRQ mode
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOV r5, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_c, r5 ; Enter SVC mode
+ STMDB sp!, {r0-r3} ; Save r0-r3 on thread's stack
+ MOV r3, #1 ; Build interrupt stack type
+ STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ STR sp, [r0, #8] ; Save stack pointer in thread control
+ ; block
+ BIC r4, r4, #THUMB_MASK ; Clear the Thumb bit of CPSR
+ ORR r3, r4, #DISABLE_INTS ; Or-in interrupt lockout bit(s)
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+;
+; /* Save the remaining time-slice and disable it. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup time-slice variable address
+ LDR r2, [r3, #0] ; Pickup time-slice
+ CMP r2, #0 ; Is it active?
+ BEQ __tx_thread_dont_save_ts ; No, don't save it
+;
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r2, [r0, #24] ; Save thread's time-slice
+ MOV r2, #0 ; Clear value
+ STR r2, [r3, #0] ; Disable global time-slice flag
+;
+; }
+__tx_thread_dont_save_ts
+;
+;
+; /* Clear the current task pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ MOV r0, #0 ; NULL value
+ STR r0, [r1, #0] ; Clear current thread pointer
+;
+; /* Return to the scheduler. */
+; _tx_thread_schedule();
+;
+ B _tx_thread_schedule ; Return to scheduler
+; }
+;
+__tx_thread_idle_system_restore
+;
+; /* Just return back to the scheduler! */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r3, r3, #MODE_MASK ; Clear the mode portion of the CPSR
+ ORR r3, r3, #SVC_MODE_BITS ; Or-in new interrupt lockout bit
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+ B _tx_thread_schedule ; Return to scheduler
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_context_save.s b/ports/arm11/ac5/src/tx_thread_context_save.s
new file mode 100644
index 00000000..6ce74590
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_context_save.s
@@ -0,0 +1,207 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; IRQ & FIQ interrupts disabled
+ ELSE
+DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
+ ENDIF
+
+ IMPORT _tx_thread_system_state
+ IMPORT _tx_thread_current_ptr
+ IMPORT __tx_irq_processing_return
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_isr_enter
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_context_save(VOID)
+;{
+ EXPORT _tx_thread_context_save
+_tx_thread_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, and all registers are intact. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+ STMDB sp!, {r0-r3} ; Save some working registers
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ ENDIF
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+;
+; /* Save the rest of the scratch registers on the stack and return to the
+; calling ISR. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+__tx_thread_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ ; scheduling loop - nothing needs saving!
+;
+; /* Save minimal context of interrupted thread. */
+;
+ MRS r2, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r2, r10, r12, lr} ; Store other registers
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+; }
+; else
+; {
+;
+__tx_thread_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; processing. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ ADD sp, sp, #16 ; Recover saved registers
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+; }
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s b/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s
new file mode 100644
index 00000000..a183032b
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_fiq_context_restore.s
@@ -0,0 +1,259 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+SVC_MODE EQU 0xD3 ; SVC mode
+FIQ_MODE EQU 0xD1 ; FIQ mode
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
+ ELSE
+DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
+ ENDIF
+MODE_MASK EQU 0x1F ; Mode mask
+THUMB_MASK EQU 0x20 ; Thumb bit mask
+IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
+SVC_MODE_BITS EQU 0x13 ; SVC mode value
+;
+;
+ IMPORT _tx_thread_system_state
+ IMPORT _tx_thread_current_ptr
+ IMPORT _tx_thread_system_stack_ptr
+ IMPORT _tx_thread_execute_ptr
+ IMPORT _tx_timer_time_slice
+ IMPORT _tx_thread_schedule
+ IMPORT _tx_thread_preempt_disable
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_isr_exit
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_context_restore(VOID)
+;{
+ EXPORT _tx_thread_fiq_context_restore
+_tx_thread_fiq_context_restore
+;
+; /* Lockout interrupts. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ ORR r0, r3, #DISABLE_INTS ; Build interrupt disable value
+ MSR CPSR_cxsf, r0 ; Lockout interrupts
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR exit function to indicate an ISR is complete. */
+;
+ BL _tx_execution_isr_exit ; Call the ISR exit function
+ ENDIF
+;
+; /* Determine if interrupts are nested. */
+; if (--_tx_thread_system_state)
+; {
+;
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3] ; Pickup system state
+ SUB r2, r2, #1 ; Decrement the counter
+ STR r2, [r3] ; Store the counter
+ CMP r2, #0 ; Was this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
+;
+; /* Interrupts are nested. */
+;
+; /* Just recover the saved registers and return to the point of
+; interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+__tx_thread_fiq_not_nested_restore
+;
+; /* Determine if a thread was interrupted and no preemption is required. */
+; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+; || (_tx_thread_preempt_disable))
+; {
+;
+ LDR r1, [sp] ; Pickup the saved SPSR
+ MOV r2, #MODE_MASK ; Build mask to isolate the interrupted mode
+ AND r1, r1, r2 ; Isolate mode bits
+ CMP r1, #IRQ_MODE_BITS ; Was an interrupt taken in IRQ mode before we
+ ; got to context save? */
+ BEQ __tx_thread_fiq_no_preempt_restore ; Yes, just go back to point of interrupt
+
+
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup actual current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_restore ; Yes, idle system was interrupted
+
+ LDR r3, =_tx_thread_preempt_disable ; Pickup preempt disable address
+ LDR r2, [r3] ; Pickup actual preempt disable flag
+ CMP r2, #0 ; Is it set?
+ BNE __tx_thread_fiq_no_preempt_restore ; Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr ; Pickup address of execute thread ptr
+ LDR r2, [r3] ; Pickup actual execute thread pointer
+ CMP r0, r2 ; Is the same thread highest priority?
+ BNE __tx_thread_fiq_preempt_restore ; No, preemption needs to happen
+
+
+__tx_thread_fiq_no_preempt_restore
+;
+; /* Restore interrupted thread or ISR. */
+;
+; /* Pickup the saved stack pointer. */
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+;
+; /* Recover the saved context and return to the point of interrupt. */
+;
+ LDMIA sp!, {r0, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+; else
+; {
+__tx_thread_fiq_preempt_restore
+;
+ LDMIA sp!, {r3, lr} ; Recover temporarily saved registers
+ MOV r1, lr ; Save lr (point of interrupt)
+ MOV r2, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_cxsf, r2 ; Enter SVC mode
+ STR r1, [sp, #-4]! ; Save point of interrupt
+ STMDB sp!, {r4-r12, lr} ; Save upper half of registers
+ MOV r4, r3 ; Save SPSR in r4
+ MOV r2, #FIQ_MODE ; Build FIQ mode CPSR
+ MSR CPSR_cxsf, r2 ; Re-enter FIQ mode
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOV r5, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_cxsf, r5 ; Enter SVC mode
+ STMDB sp!, {r0-r3} ; Save r0-r3 on thread's stack
+ MOV r3, #1 ; Build interrupt stack type
+ STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup current thread pointer
+ STR sp, [r0, #8] ; Save stack pointer in thread control
+ ; block */
+ BIC r4, r4, #THUMB_MASK ; Clear the Thumb bit of CPSR
+ ORR r3, r4, #DISABLE_INTS ; Or-in interrupt lockout bit(s)
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+;
+; /* Save the remaining time-slice and disable it. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup time-slice variable address
+ LDR r2, [r3] ; Pickup time-slice
+ CMP r2, #0 ; Is it active?
+ BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
+;
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r2, [r0, #24] ; Save thread's time-slice
+ MOV r2, #0 ; Clear value
+ STR r2, [r3] ; Disable global time-slice flag
+;
+; }
+__tx_thread_fiq_dont_save_ts
+;
+;
+; /* Clear the current task pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ MOV r0, #0 ; NULL value
+ STR r0, [r1] ; Clear current thread pointer
+;
+; /* Return to the scheduler. */
+; _tx_thread_schedule();
+;
+ B _tx_thread_schedule ; Return to scheduler
+; }
+;
+__tx_thread_fiq_idle_system_restore
+;
+; /* Just return back to the scheduler! */
+;
+ ADD sp, sp, #24 ; Recover FIQ stack space
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r3, r3, #MODE_MASK ; Clear the mode portion of the CPSR
+ ORR r3, r3, #SVC_MODE_BITS ; Or-in new interrupt lockout bit
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+ B _tx_thread_schedule ; Return to scheduler
+;
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_context_save.s b/ports/arm11/ac5/src/tx_thread_fiq_context_save.s
new file mode 100644
index 00000000..370e0946
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_fiq_context_save.s
@@ -0,0 +1,203 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IMPORT _tx_thread_system_state
+ IMPORT _tx_thread_current_ptr
+ IMPORT __tx_fiq_processing_return
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_isr_enter
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+; VOID _tx_thread_fiq_context_save(VOID)
+;{
+ EXPORT _tx_thread_fiq_context_save
+_tx_thread_fiq_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, and all registers are intact. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+ STMDB sp!, {r0-r3} ; Save some working registers
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3] ; Store it back in the variable
+;
+; /* Save the rest of the scratch registers on the stack and return to the
+; calling ISR. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+__tx_thread_fiq_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
+;
+; /* Save minimal context of interrupted thread. */
+;
+ MRS r2, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
+; ; interrupt processing does need to save
+; ; these registers.
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+; }
+; else
+; {
+;
+__tx_thread_fiq_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+;
+; /* Not much to do here, save the current SPSR and LR for possible
+; use in IRQ interrupted in idle system conditions, and return to
+; FIQ interrupt processing. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, lr} ; Store other registers that will get used
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+; }
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s b/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s
new file mode 100644
index 00000000..5d81879d
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_fiq_nesting_end.s
@@ -0,0 +1,111 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
+ ELSE
+DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
+ ENDIF
+MODE_MASK EQU 0x1F ; Mode mask
+FIQ_MODE_BITS EQU 0x11 ; FIQ mode bits
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_nesting_end(VOID)
+;{
+ EXPORT _tx_thread_fiq_nesting_end
+_tx_thread_fiq_nesting_end
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ ; 8-byte alignment logic)
+ BIC r0, r0, #MODE_MASK ; Clear mode bits
+ ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 ; Re-enter IRQ mode
+ IF {INTER} = {TRUE}
+ BX r3 ; Return to caller
+ ELSE
+ MOV pc, r3 ; Return to caller
+ ENDIF
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s b/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s
new file mode 100644
index 00000000..32c1b258
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_fiq_nesting_start.s
@@ -0,0 +1,104 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+FIQ_DISABLE EQU 0x40 ; FIQ disable bit
+MODE_MASK EQU 0x1F ; Mode mask
+SYS_MODE_BITS EQU 0x1F ; System mode bits
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_nesting_start(VOID)
+;{
+ EXPORT _tx_thread_fiq_nesting_start
+_tx_thread_fiq_nesting_start
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ BIC r0, r0, #MODE_MASK ; Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS ; Build system mode CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ STMDB sp!, {r1, lr} ; Push the system mode lr on the system mode stack
+ ; and push r1 just to keep 8-byte alignment
+ BIC r0, r0, #FIQ_DISABLE ; Build enable FIQ CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ IF {INTER} = {TRUE}
+ BX r3 ; Return to caller
+ ELSE
+ MOV pc, r3 ; Return to caller
+ ENDIF
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_control.s b/ports/arm11/ac5/src/tx_thread_interrupt_control.s
new file mode 100644
index 00000000..f11c820e
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_control.s
@@ -0,0 +1,102 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+INT_MASK EQU 0xC0 ; Interrupt bit mask
+ ELSE
+INT_MASK EQU 0x80 ; Interrupt bit mask
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;UINT _tx_thread_interrupt_control(UINT new_posture)
+;{
+ EXPORT _tx_thread_interrupt_control
+_tx_thread_interrupt_control
+;
+; /* Pickup current interrupt lockout posture. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r1, r3, #INT_MASK ; Clear interrupt lockout bits
+ ORR r1, r1, r0 ; Or-in new interrupt lockout bits
+;
+; /* Apply the new interrupt posture. */
+;
+ MSR CPSR_cxsf, r1 ; Setup new CPSR
+ AND r0, r3, #INT_MASK ; Return previous interrupt mask
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_disable.s b/ports/arm11/ac5/src/tx_thread_interrupt_disable.s
new file mode 100644
index 00000000..a3145dab
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_disable.s
@@ -0,0 +1,98 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; IRQ & FIQ interrupts disabled
+ ELSE
+DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;UINT _tx_thread_interrupt_disable(void)
+;{
+ EXPORT _tx_thread_interrupt_disable
+_tx_thread_interrupt_disable
+;
+; /* Pickup current interrupt lockout posture. */
+;
+ MRS r0, CPSR ; Pickup current CPSR
+;
+; /* Mask interrupts. */
+;
+ ORR r1, r0, #DISABLE_INTS ; Mask interrupts
+ MSR CPSR_cxsf, r1 ; Setup new CPSR
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_interrupt_restore.s b/ports/arm11/ac5/src/tx_thread_interrupt_restore.s
new file mode 100644
index 00000000..aad4e743
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_interrupt_restore.s
@@ -0,0 +1,87 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for restoring interrupts to the state */
+;/* returned by a previous _tx_thread_interrupt_disable call. */
+;/* */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;UINT _tx_thread_interrupt_restore(UINT old_posture)
+;{
+ EXPORT _tx_thread_interrupt_restore
+_tx_thread_interrupt_restore
+;
+; /* Apply the new interrupt posture. */
+;
+ MSR CPSR_cxsf, r0 ; Setup new CPSR
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s b/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s
new file mode 100644
index 00000000..415d6152
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_irq_nesting_end.s
@@ -0,0 +1,110 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; Disable IRQ & FIQ interrupts
+ ELSE
+DISABLE_INTS EQU 0x80 ; Disable IRQ interrupts
+ ENDIF
+MODE_MASK EQU 0x1F ; Mode mask
+IRQ_MODE_BITS EQU 0x12 ; IRQ mode bits
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_irq_nesting_end(VOID)
+;{
+ EXPORT _tx_thread_irq_nesting_end
+_tx_thread_irq_nesting_end
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ LDMIA sp!, {r1, lr} ; Pickup saved lr (and r1 throw-away for
+ ; 8-byte alignment logic)
+ BIC r0, r0, #MODE_MASK ; Clear mode bits
+ ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 ; Re-enter IRQ mode
+ IF {INTER} = {TRUE}
+ BX r3 ; Return to caller
+ ELSE
+ MOV pc, r3 ; Return to caller
+ ENDIF
+;}
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s b/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s
new file mode 100644
index 00000000..417235dd
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_irq_nesting_start.s
@@ -0,0 +1,104 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+IRQ_DISABLE EQU 0x80 ; IRQ disable bit
+MODE_MASK EQU 0x1F ; Mode mask
+SYS_MODE_BITS EQU 0x1F ; System mode bits
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_irq_nesting_start(VOID)
+;{
+ EXPORT _tx_thread_irq_nesting_start
+_tx_thread_irq_nesting_start
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ BIC r0, r0, #MODE_MASK ; Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS ; Build system mode CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ STMDB sp!, {r1, lr} ; Push the system mode lr on the system mode stack
+ ; and push r1 just to keep 8-byte alignment
+ BIC r0, r0, #IRQ_DISABLE ; Build enable IRQ CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ IF {INTER} = {TRUE}
+ BX r3 ; Return to caller
+ ELSE
+ MOV pc, r3 ; Return to caller
+ ENDIF
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_schedule.s b/ports/arm11/ac5/src/tx_thread_schedule.s
new file mode 100644
index 00000000..0347394e
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_schedule.s
@@ -0,0 +1,172 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+ENABLE_INTS EQU 0xC0 ; IRQ & FIQ Interrupts enabled mask
+ ELSE
+ENABLE_INTS EQU 0x80 ; IRQ Interrupts enabled mask
+ ENDIF
+;
+;
+ IMPORT _tx_thread_execute_ptr
+ IMPORT _tx_thread_current_ptr
+ IMPORT _tx_timer_time_slice
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_thread_enter
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_schedule(VOID)
+;{
+ EXPORT _tx_thread_schedule
+_tx_thread_schedule
+;
+; /* Enable interrupts. */
+;
+ MRS r2, CPSR ; Pickup CPSR
+ BIC r0, r2, #ENABLE_INTS ; Clear the disable bit(s)
+ MSR CPSR_cxsf, r0 ; Enable interrupts
+;
+; /* Wait for a thread to execute. */
+; do
+; {
+ LDR r1, =_tx_thread_execute_ptr ; Address of thread execute ptr
+;
+__tx_thread_schedule_loop
+;
+ LDR r0, [r1, #0] ; Pickup next thread to execute
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_schedule_loop ; If so, keep looking for a thread
+;
+; }
+; while(_tx_thread_execute_ptr == TX_NULL);
+;
+; /* Yes! We have a thread to execute. Lockout interrupts and
+; transfer control to it. */
+;
+ MSR CPSR_cxsf, r2 ; Disable interrupts
+;
+; /* Setup the current thread pointer. */
+; _tx_thread_current_ptr = _tx_thread_execute_ptr;
+;
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ STR r0, [r1, #0] ; Setup current thread pointer
+;
+; /* Increment the run count for this thread. */
+; _tx_thread_current_ptr -> tx_thread_run_count++;
+;
+ LDR r2, [r0, #4] ; Pickup run counter
+ LDR r3, [r0, #24] ; Pickup time-slice for this thread
+ ADD r2, r2, #1 ; Increment thread run-counter
+ STR r2, [r0, #4] ; Store the new run counter
+;
+; /* Setup time-slice, if present. */
+; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
+;
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ ; variable
+ LDR sp, [r0, #8] ; Switch stack pointers
+ STR r3, [r2, #0] ; Setup time-slice
+;
+; /* Switch to the thread's stack. */
+; sp = _tx_thread_execute_ptr -> tx_thread_stack_ptr;
+;
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the thread entry function to indicate the thread is executing. */
+;
+ BL _tx_execution_thread_enter ; Call the thread execution enter function
+ ENDIF
+;
+; /* Determine if an interrupt frame or a synchronous task suspension frame
+; is present. */
+;
+ LDMIA sp!, {r0, r1} ; Pickup the stack type and saved CPSR
+ CMP r0, #0 ; Check for synchronous context switch
+ MSRNE SPSR_cxsf, r1 ; Setup SPSR for return
+ LDMNEIA sp!, {r0-r12, lr, pc}^ ; Return to point of thread interrupt
+ LDMIA sp!, {r4-r11, lr} ; Return to thread synchronously
+ MSR CPSR_cxsf, r1 ; Recover CPSR
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_stack_build.s b/ports/arm11/ac5/src/tx_thread_stack_build.s
new file mode 100644
index 00000000..d9b68fa9
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_stack_build.s
@@ -0,0 +1,156 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+SVC_MODE EQU 0x13 ; SVC mode
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+CPSR_MASK EQU 0xDF ; Mask initial CPSR, IRQ & FIQ ints enabled
+ ELSE
+CPSR_MASK EQU 0x9F ; Mask initial CPSR, IRQ ints enabled
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function builds a stack frame on the supplied thread's stack. */
+;/* The stack frame results in a fake interrupt return to the supplied */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
+;/* thread_ptr Pointer to thread control blk */
+;/* function_ptr Pointer to return function */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
+;{
+ EXPORT _tx_thread_stack_build
+_tx_thread_stack_build
+;
+;
+; /* Build a fake interrupt frame. The form of the fake interrupt stack
+; on the ARM11 should look like the following after it is built:
+;
+; Stack Top: 1 Interrupt stack frame type
+; CPSR Initial value for CPSR
+; a1 (r0) Initial value for a1
+; a2 (r1) Initial value for a2
+; a3 (r2) Initial value for a3
+; a4 (r3) Initial value for a4
+; v1 (r4) Initial value for v1
+; v2 (r5) Initial value for v2
+; v3 (r6) Initial value for v3
+; v4 (r7) Initial value for v4
+; v5 (r8) Initial value for v5
+; sb (r9) Initial value for sb
+; sl (r10) Initial value for sl
+; fp (r11) Initial value for fp
+; ip (r12) Initial value for ip
+; lr (r14) Initial value for lr
+; pc (r15) Initial value for pc
+; 0 For stack backtracing
+;
+; Stack Bottom: (higher memory address) */
+;
+ LDR r2, [r0, #16] ; Pickup end of stack area
+ BIC r2, r2, #7 ; Ensure 8-byte alignment
+ SUB r2, r2, #76 ; Allocate space for the stack frame
+;
+; /* Actually build the stack frame. */
+;
+ MOV r3, #1 ; Build interrupt stack type
+ STR r3, [r2, #0] ; Store stack type
+ MOV r3, #0 ; Build initial register value
+ STR r3, [r2, #8] ; Store initial r0
+ STR r3, [r2, #12] ; Store initial r1
+ STR r3, [r2, #16] ; Store initial r2
+ STR r3, [r2, #20] ; Store initial r3
+ STR r3, [r2, #24] ; Store initial r4
+ STR r3, [r2, #28] ; Store initial r5
+ STR r3, [r2, #32] ; Store initial r6
+ STR r3, [r2, #36] ; Store initial r7
+ STR r3, [r2, #40] ; Store initial r8
+ STR r3, [r2, #44] ; Store initial r9
+ LDR r3, [r0, #12] ; Pickup stack starting address
+ STR r3, [r2, #48] ; Store initial r10 (sl)
+ MOV r3, #0 ; Build initial register value
+ STR r3, [r2, #52] ; Store initial r11
+ STR r3, [r2, #56] ; Store initial r12
+ STR r3, [r2, #60] ; Store initial lr
+ STR r1, [r2, #64] ; Store initial pc
+ STR r3, [r2, #68] ; 0 for back-trace
+ MRS r1, CPSR ; Pickup CPSR
+ BIC r1, r1, #CPSR_MASK ; Mask mode bits of CPSR
+ ORR r3, r1, #SVC_MODE ; Build CPSR, SVC mode, interrupts enabled
+ STR r3, [r2, #4] ; Store initial CPSR
+;
+; /* Setup stack pointer. */
+; thread_ptr -> tx_thread_stack_ptr = r2;
+;
+ STR r2, [r0, #8] ; Save stack pointer in thread's
+ ; control block
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;}
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_system_return.s b/ports/arm11/ac5/src/tx_thread_system_return.s
new file mode 100644
index 00000000..9bfd95d9
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_system_return.s
@@ -0,0 +1,150 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; IRQ & FIQ interrupts disabled
+ ELSE
+DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
+ ENDIF
+;
+;
+ IMPORT _tx_thread_current_ptr
+ IMPORT _tx_timer_time_slice
+ IMPORT _tx_thread_schedule
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_thread_exit
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_system_return(VOID)
+;{
+ EXPORT _tx_thread_system_return
+_tx_thread_system_return
+;
+; /* Save minimal context on the stack. */
+;
+ MOV r0, #0 ; Build a solicited stack type
+ MRS r1, CPSR ; Pickup the CPSR
+ STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
+;
+; /* Lockout interrupts. */
+;
+ ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r2 ; Disable interrupts
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the thread exit function to indicate the thread is no longer executing. */
+;
+ BL _tx_execution_thread_exit ; Call the thread exit function
+ ENDIF
+
+ LDR r3, =_tx_thread_current_ptr ; Pickup address of current ptr
+ LDR r0, [r3, #0] ; Pickup current thread pointer
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r1, [r2, #0] ; Pickup current time slice
+;
+; /* Save current stack and switch to system stack. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; sp = _tx_thread_system_stack_ptr;
+;
+ STR sp, [r0, #8] ; Save thread stack pointer
+;
+; /* Determine if the time-slice is active. */
+; if (_tx_timer_time_slice)
+; {
+;
+ MOV r4, #0 ; Build clear value
+ CMP r1, #0 ; Is a time-slice active?
+ BEQ __tx_thread_dont_save_ts ; No, don't save the time-slice
+;
+; /* Save time-slice for the thread and clear the current time-slice. */
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r4, [r2, #0] ; Clear time-slice
+ STR r1, [r0, #24] ; Save current time-slice
+;
+; }
+__tx_thread_dont_save_ts
+;
+; /* Clear the current thread pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ STR r4, [r3, #0] ; Clear current thread pointer
+ B _tx_thread_schedule ; Jump to scheduler!
+;
+;}
+ END
+
diff --git a/ports/arm11/ac5/src/tx_thread_vectored_context_save.s b/ports/arm11/ac5/src/tx_thread_vectored_context_save.s
new file mode 100644
index 00000000..f318ff3d
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_thread_vectored_context_save.s
@@ -0,0 +1,209 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS EQU 0xC0 ; IRQ & FIQ interrupts disabled
+ ELSE
+DISABLE_INTS EQU 0x80 ; IRQ interrupts disabled
+ ENDIF
+;
+;
+ IMPORT _tx_thread_system_state
+ IMPORT _tx_thread_current_ptr
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+ IMPORT _tx_execution_isr_enter
+ ENDIF
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_vectored_context_save(VOID)
+;{
+ EXPORT _tx_thread_vectored_context_save
+_tx_thread_vectored_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, and all registers are intact. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+ IF :DEF:TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ ENDIF
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+;
+; /* Note: Minimal context of interrupted thread is already saved. */
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+__tx_thread_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occurred in
+ ; scheduling loop - nothing needs saving!
+;
+; /* Note: Minimal context of interrupted thread is already saved. */
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+; }
+; else
+; {
+;
+__tx_thread_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; processing. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+ IF :DEF:TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+ ENDIF
+
+ ADD sp, sp, #32 ; Recover saved registers
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+; }
+;}
+;
+ END
+
diff --git a/ports/arm11/ac5/src/tx_timer_interrupt.s b/ports/arm11/ac5/src/tx_timer_interrupt.s
new file mode 100644
index 00000000..158f6930
--- /dev/null
+++ b/ports/arm11/ac5/src/tx_timer_interrupt.s
@@ -0,0 +1,258 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) Microsoft Corporation. All rights reserved. */
+;/* */
+;/* This software is licensed under the Microsoft Software License */
+;/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+;/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+;/* and in the root directory of this software. */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Timer */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_timer.h"
+;#include "tx_thread.h"
+;
+;
+;Define Assembly language external references...
+;
+ IMPORT _tx_timer_time_slice
+ IMPORT _tx_timer_system_clock
+ IMPORT _tx_timer_current_ptr
+ IMPORT _tx_timer_list_start
+ IMPORT _tx_timer_list_end
+ IMPORT _tx_timer_expired_time_slice
+ IMPORT _tx_timer_expired
+ IMPORT _tx_thread_time_slice
+ IMPORT _tx_timer_expiration_process
+;
+;
+ AREA ||.text||, CODE, READONLY
+ PRESERVE8
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM11/AC5 */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Microsoft Corporation */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_timer_interrupt(VOID)
+;{
+ EXPORT _tx_timer_interrupt
+_tx_timer_interrupt
+;
+; /* Upon entry to this routine, it is assumed that context save has already
+; been called, and therefore the compiler scratch registers are available
+; for use. */
+;
+; /* Increment the system clock. */
+; _tx_timer_system_clock++;
+;
+ LDR r1, =_tx_timer_system_clock ; Pickup address of system clock
+ LDR r0, [r1, #0] ; Pickup system clock
+ ADD r0, r0, #1 ; Increment system clock
+ STR r0, [r1, #0] ; Store new system clock
+;
+; /* Test for time-slice expiration. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r2, [r3, #0] ; Pickup time-slice
+ CMP r2, #0 ; Is it non-active?
+ BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
+;
+; /* Decrement the time_slice. */
+; _tx_timer_time_slice--;
+;
+ SUB r2, r2, #1 ; Decrement the time-slice
+ STR r2, [r3, #0] ; Store new time-slice value
+;
+; /* Check for expiration. */
+; if (__tx_timer_time_slice == 0)
+;
+ CMP r2, #0 ; Has it expired?
+ BNE __tx_timer_no_time_slice ; No, skip expiration processing
+;
+; /* Set the time-slice expired flag. */
+; _tx_timer_expired_time_slice = TX_TRUE;
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup address of expired flag
+ MOV r0, #1 ; Build expired value
+ STR r0, [r3, #0] ; Set time-slice expiration flag
+;
+; }
+;
+__tx_timer_no_time_slice
+;
+; /* Test for timer expiration. */
+; if (*_tx_timer_current_ptr)
+; {
+;
+ LDR r1, =_tx_timer_current_ptr ; Pickup current timer pointer addr
+ LDR r0, [r1, #0] ; Pickup current timer
+ LDR r2, [r0, #0] ; Pickup timer list entry
+ CMP r2, #0 ; Is there anything in the list?
+ BEQ __tx_timer_no_timer ; No, just increment the timer
+;
+; /* Set expiration flag. */
+; _tx_timer_expired = TX_TRUE;
+;
+ LDR r3, =_tx_timer_expired ; Pickup expiration flag address
+ MOV r2, #1 ; Build expired value
+ STR r2, [r3, #0] ; Set expired flag
+ B __tx_timer_done ; Finished timer processing
+;
+; }
+; else
+; {
+__tx_timer_no_timer
+;
+; /* No timer expired, increment the timer pointer. */
+; _tx_timer_current_ptr++;
+;
+ ADD r0, r0, #4 ; Move to next timer
+;
+; /* Check for wrap-around. */
+; if (_tx_timer_current_ptr == _tx_timer_list_end)
+;
+ LDR r3, =_tx_timer_list_end ; Pickup addr of timer list end
+ LDR r2, [r3, #0] ; Pickup list end
+ CMP r0, r2 ; Are we at list end?
+ BNE __tx_timer_skip_wrap ; No, skip wrap-around logic
+;
+; /* Wrap to beginning of list. */
+; _tx_timer_current_ptr = _tx_timer_list_start;
+;
+ LDR r3, =_tx_timer_list_start ; Pickup addr of timer list start
+ LDR r0, [r3, #0] ; Set current pointer to list start
+;
+__tx_timer_skip_wrap
+;
+ STR r0, [r1, #0] ; Store new current timer pointer
+; }
+;
+__tx_timer_done
+;
+;
+; /* See if anything has expired. */
+; if ((_tx_timer_expired_time_slice) || (_tx_timer_expired))
+; {
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of expired flag
+ LDR r2, [r3, #0] ; Pickup time-slice expired flag
+ CMP r2, #0 ; Did a time-slice expire?
+ BNE __tx_something_expired ; If non-zero, time-slice expired
+ LDR r1, =_tx_timer_expired ; Pickup addr of other expired flag
+ LDR r0, [r1, #0] ; Pickup timer expired flag
+ CMP r0, #0 ; Did a timer expire?
+ BEQ __tx_timer_nothing_expired ; No, nothing expired
+;
+__tx_something_expired
+;
+;
+ STMDB sp!, {r0, lr} ; Save the lr register on the stack
+ ; and save r0 just to keep 8-byte alignment
+;
+; /* Did a timer expire? */
+; if (_tx_timer_expired)
+; {
+;
+ LDR r1, =_tx_timer_expired ; Pickup addr of expired flag
+ LDR r0, [r1, #0] ; Pickup timer expired flag
+ CMP r0, #0 ; Check for timer expiration
+ BEQ __tx_timer_dont_activate ; If not set, skip timer activation
+;
+; /* Process timer expiration. */
+; _tx_timer_expiration_process();
+;
+ BL _tx_timer_expiration_process ; Call the timer expiration handling routine
+;
+; }
+__tx_timer_dont_activate
+;
+; /* Did time slice expire? */
+; if (_tx_timer_expired_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r2, [r3, #0] ; Pickup the actual flag
+ CMP r2, #0 ; See if the flag is set
+ BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
+;
+; /* Time slice interrupted thread. */
+; _tx_thread_time_slice();
+
+ BL _tx_thread_time_slice ; Call time-slice processing
+;
+; }
+;
+__tx_timer_not_ts_expiration
+;
+ LDMIA sp!, {r0, lr} ; Recover lr register (r0 is just there for
+ ; the 8-byte stack alignment
+;
+; }
+;
+__tx_timer_nothing_expired
+;
+ IF {INTER} = {TRUE}
+ BX lr ; Return to caller
+ ELSE
+ MOV pc, lr ; Return to caller
+ ENDIF
+;
+;}
+ END
+
diff --git a/ports/arm11/gnu/example_build/build_threadx.bat b/ports/arm11/gnu/example_build/build_threadx.bat
new file mode 100644
index 00000000..812a730e
--- /dev/null
+++ b/ports/arm11/gnu/example_build/build_threadx.bat
@@ -0,0 +1,238 @@
+del tx.a
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s tx_initialize_low_level.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_stack_build.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_schedule.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_system_return.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_context_save.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_context_restore.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_interrupt_control.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_timer_interrupt.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_interrupt_disable.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_interrupt_restore.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_fiq_context_save.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_fiq_nesting_start.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_irq_nesting_start.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_irq_nesting_end.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_fiq_nesting_end.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_fiq_context_restore.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s ../src/tx_thread_vectored_context_save.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_allocate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_pool_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_block_release.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_allocate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_pool_search.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_byte_release.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_set.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_event_flags_set_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_high_level.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_kernel_enter.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_initialize_kernel_setup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_priority_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_mutex_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_flush.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_front_send.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_receive.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_send.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_queue_send_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_ceiling_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_cleanup.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_semaphore_put_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_entry_exit_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_identify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_preemption_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_priority_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_relinquish.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_reset.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_resume.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_shell_entry.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_sleep.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_analyze.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_error_handler.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_stack_error_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_suspend.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_preempt_check.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_resume.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_system_suspend.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_terminate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_time_slice.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_time_slice_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_timeout.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_thread_wait_abort.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_time_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_time_set.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_activate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_deactivate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_expiration_process.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_performance_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_performance_system_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_system_activate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_system_deactivate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_timer_thread_entry.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_enable.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_disable.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_initialize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_interrupt_control.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_isr_enter_insert.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_isr_exit_insert.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_object_register.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_object_unregister.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_user_event_insert.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_buffer_full_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_event_filter.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/tx_trace_event_unfilter.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_allocate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_pool_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_block_release.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_allocate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_pool_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_byte_release.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_set.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_event_flags_set_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_mutex_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_flush.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_front_send.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_receive.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_send.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_queue_send_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_ceiling_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_prioritize.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_put.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_semaphore_put_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_entry_exit_notify.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_info_get.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_preemption_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_priority_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_relinquish.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_reset.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_resume.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_suspend.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_terminate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_time_slice_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_thread_wait_abort.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_activate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_change.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_create.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_deactivate.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_delete.c
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc ../../../../common/src/txe_timer_info_get.c
+arm-none-eabi-ar -r tx.a tx_thread_stack_build.o tx_thread_schedule.o tx_thread_system_return.o tx_thread_context_save.o tx_thread_context_restore.o tx_timer_interrupt.o tx_thread_interrupt_control.o
+arm-none-eabi-ar -r tx.a tx_thread_interrupt_disable.o tx_thread_interrupt_restore.o tx_thread_fiq_context_save.o tx_thread_fiq_nesting_start.o tx_thread_irq_nesting_start.o tx_thread_irq_nesting_end.o
+arm-none-eabi-ar -r tx.a tx_thread_fiq_nesting_end.o tx_thread_fiq_context_restore.o tx_thread_vectored_context_save.o tx_initialize_low_level.o
+arm-none-eabi-ar -r tx.a tx_block_allocate.o tx_block_pool_cleanup.o tx_block_pool_create.o tx_block_pool_delete.o tx_block_pool_info_get.o
+arm-none-eabi-ar -r tx.a tx_block_pool_initialize.o tx_block_pool_performance_info_get.o tx_block_pool_performance_system_info_get.o tx_block_pool_prioritize.o
+arm-none-eabi-ar -r tx.a tx_block_release.o tx_byte_allocate.o tx_byte_pool_cleanup.o tx_byte_pool_create.o tx_byte_pool_delete.o tx_byte_pool_info_get.o
+arm-none-eabi-ar -r tx.a tx_byte_pool_initialize.o tx_byte_pool_performance_info_get.o tx_byte_pool_performance_system_info_get.o tx_byte_pool_prioritize.o
+arm-none-eabi-ar -r tx.a tx_byte_pool_search.o tx_byte_release.o tx_event_flags_cleanup.o tx_event_flags_create.o tx_event_flags_delete.o tx_event_flags_get.o
+arm-none-eabi-ar -r tx.a tx_event_flags_info_get.o tx_event_flags_initialize.o tx_event_flags_performance_info_get.o tx_event_flags_performance_system_info_get.o
+arm-none-eabi-ar -r tx.a tx_event_flags_set.o tx_event_flags_set_notify.o tx_initialize_high_level.o tx_initialize_kernel_enter.o tx_initialize_kernel_setup.o
+arm-none-eabi-ar -r tx.a tx_mutex_cleanup.o tx_mutex_create.o tx_mutex_delete.o tx_mutex_get.o tx_mutex_info_get.o tx_mutex_initialize.o tx_mutex_performance_info_get.o
+arm-none-eabi-ar -r tx.a tx_mutex_performance_system_info_get.o tx_mutex_prioritize.o tx_mutex_priority_change.o tx_mutex_put.o tx_queue_cleanup.o tx_queue_create.o
+arm-none-eabi-ar -r tx.a tx_queue_delete.o tx_queue_flush.o tx_queue_front_send.o tx_queue_info_get.o tx_queue_initialize.o tx_queue_performance_info_get.o
+arm-none-eabi-ar -r tx.a tx_queue_performance_system_info_get.o tx_queue_prioritize.o tx_queue_receive.o tx_queue_send.o tx_queue_send_notify.o tx_semaphore_ceiling_put.o
+arm-none-eabi-ar -r tx.a tx_semaphore_cleanup.o tx_semaphore_create.o tx_semaphore_delete.o tx_semaphore_get.o tx_semaphore_info_get.o tx_semaphore_initialize.o
+arm-none-eabi-ar -r tx.a tx_semaphore_performance_info_get.o tx_semaphore_performance_system_info_get.o tx_semaphore_prioritize.o tx_semaphore_put.o tx_semaphore_put_notify.o
+arm-none-eabi-ar -r tx.a tx_thread_create.o tx_thread_delete.o tx_thread_entry_exit_notify.o tx_thread_identify.o tx_thread_info_get.o tx_thread_initialize.o
+arm-none-eabi-ar -r tx.a tx_thread_performance_info_get.o tx_thread_performance_system_info_get.o tx_thread_preemption_change.o tx_thread_priority_change.o tx_thread_relinquish.o
+arm-none-eabi-ar -r tx.a tx_thread_reset.o tx_thread_resume.o tx_thread_shell_entry.o tx_thread_sleep.o tx_thread_stack_analyze.o tx_thread_stack_error_handler.o
+arm-none-eabi-ar -r tx.a tx_thread_stack_error_notify.o tx_thread_suspend.o tx_thread_system_preempt_check.o tx_thread_system_resume.o tx_thread_system_suspend.o
+arm-none-eabi-ar -r tx.a tx_thread_terminate.o tx_thread_time_slice.o tx_thread_time_slice_change.o tx_thread_timeout.o tx_thread_wait_abort.o tx_time_get.o
+arm-none-eabi-ar -r tx.a tx_time_set.o tx_timer_activate.o tx_timer_change.o tx_timer_create.o tx_timer_deactivate.o tx_timer_delete.o tx_timer_expiration_process.o
+arm-none-eabi-ar -r tx.a tx_timer_info_get.o tx_timer_initialize.o tx_timer_performance_info_get.o tx_timer_performance_system_info_get.o tx_timer_system_activate.o
+arm-none-eabi-ar -r tx.a tx_timer_system_deactivate.o tx_timer_thread_entry.o tx_trace_enable.o tx_trace_disable.o tx_trace_initialize.o tx_trace_interrupt_control.o
+arm-none-eabi-ar -r tx.a tx_trace_isr_enter_insert.o tx_trace_isr_exit_insert.o tx_trace_object_register.o tx_trace_object_unregister.o tx_trace_user_event_insert.o
+arm-none-eabi-ar -r tx.a tx_trace_buffer_full_notify.o tx_trace_event_filter.o tx_trace_event_unfilter.o
+arm-none-eabi-ar -r tx.a txe_block_allocate.o txe_block_pool_create.o txe_block_pool_delete.o txe_block_pool_info_get.o txe_block_pool_prioritize.o txe_block_release.o
+arm-none-eabi-ar -r tx.a txe_byte_allocate.o txe_byte_pool_create.o txe_byte_pool_delete.o txe_byte_pool_info_get.o txe_byte_pool_prioritize.o txe_byte_release.o
+arm-none-eabi-ar -r tx.a txe_event_flags_create.o txe_event_flags_delete.o txe_event_flags_get.o txe_event_flags_info_get.o txe_event_flags_set.o
+arm-none-eabi-ar -r tx.a txe_event_flags_set_notify.o txe_mutex_create.o txe_mutex_delete.o txe_mutex_get.o txe_mutex_info_get.o txe_mutex_prioritize.o
+arm-none-eabi-ar -r tx.a txe_mutex_put.o txe_queue_create.o txe_queue_delete.o txe_queue_flush.o txe_queue_front_send.o txe_queue_info_get.o txe_queue_prioritize.o
+arm-none-eabi-ar -r tx.a txe_queue_receive.o txe_queue_send.o txe_queue_send_notify.o txe_semaphore_ceiling_put.o txe_semaphore_create.o txe_semaphore_delete.o
+arm-none-eabi-ar -r tx.a txe_semaphore_get.o txe_semaphore_info_get.o txe_semaphore_prioritize.o txe_semaphore_put.o txe_semaphore_put_notify.o txe_thread_create.o
+arm-none-eabi-ar -r tx.a txe_thread_delete.o txe_thread_entry_exit_notify.o txe_thread_info_get.o txe_thread_preemption_change.o txe_thread_priority_change.o
+arm-none-eabi-ar -r tx.a txe_thread_relinquish.o txe_thread_reset.o txe_thread_resume.o txe_thread_suspend.o txe_thread_terminate.o txe_thread_time_slice_change.o
+arm-none-eabi-ar -r tx.a txe_thread_wait_abort.o txe_timer_activate.o txe_timer_change.o txe_timer_create.o txe_timer_deactivate.o txe_timer_delete.o txe_timer_info_get.o
diff --git a/ports/arm11/gnu/example_build/build_threadx_sample.bat b/ports/arm11/gnu/example_build/build_threadx_sample.bat
new file mode 100644
index 00000000..e67e3c20
--- /dev/null
+++ b/ports/arm11/gnu/example_build/build_threadx_sample.bat
@@ -0,0 +1,6 @@
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s reset.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s crt0.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s tx_initialize_low_level.S
+arm-none-eabi-gcc -c -g -mcpu=arm1136j-s -I../../../../common/inc -I../inc sample_threadx.c
+arm-none-eabi-ld -A arm1136j-s -T sample_threadx.ld reset.o crt0.o tx_initialize_low_level.o sample_threadx.o tx.a libc.a libnosys.a libgcc.a -o sample_threadx.out -M > sample_threadx.map
+
diff --git a/ports/arm11/gnu/example_build/crt0.S b/ports/arm11/gnu/example_build/crt0.S
new file mode 100644
index 00000000..aa0f3239
--- /dev/null
+++ b/ports/arm11/gnu/example_build/crt0.S
@@ -0,0 +1,90 @@
+
+/* .text is used instead of .section .text so it works with arm-aout too. */
+ .text
+ .code 32
+ .align 0
+
+ .global _mainCRTStartup
+ .global _start
+ .global start
+start:
+_start:
+_mainCRTStartup:
+
+/* Start by setting up a stack */
+ /* Set up the stack pointer to a fixed value */
+ ldr r3, .LC0
+ mov sp, r3
+ /* Setup a default stack-limit in case the code has been
+ compiled with "-mapcs-stack-check". Hard-wiring this value
+ is not ideal, since there is currently no support for
+ checking that the heap and stack have not collided, or that
+ this default 64k is enough for the program being executed.
+ However, it ensures that this simple crt0 world will not
+ immediately cause an overflow event: */
+ sub sl, sp, #64 << 10 /* Still assumes 256bytes below sl */
+ mov a2, #0 /* Second arg: fill value */
+ mov fp, a2 /* Null frame pointer */
+ mov r7, a2 /* Null frame pointer for Thumb */
+
+ ldr a1, .LC1 /* First arg: start of memory block */
+ ldr a3, .LC2
+ sub a3, a3, a1 /* Third arg: length of block */
+
+
+
+ bl memset
+ mov r0, #0 /* no arguments */
+ mov r1, #0 /* no argv either */
+#ifdef __USES_INITFINI__
+ /* Some arm/elf targets use the .init and .fini sections
+ to create constructors and destructors, and for these
+ targets we need to call the _init function and arrange
+ for _fini to be called at program exit. */
+ mov r4, r0
+ mov r5, r1
+/* ldr r0, .Lfini */
+ bl atexit
+/* bl init */
+ mov r0, r4
+ mov r1, r5
+#endif
+ bl main
+
+ bl exit /* Should not return. */
+
+
+ /* For Thumb, constants must be after the code since only
+ positive offsets are supported for PC relative addresses. */
+
+ .align 0
+.LC0:
+.LC1:
+ .word __bss_start__
+.LC2:
+ .word __bss_end__
+/*
+#ifdef __USES_INITFINI__
+.Lfini:
+ .word _fini
+#endif */
+ /* Return ... */
+#ifdef __APCS_26__
+ movs pc, lr
+#else
+#ifdef __THUMB_INTERWORK
+ bx lr
+#else
+ mov pc, lr
+#endif
+#endif
+
+
+/* Workspace for Angel calls. */
+ .data
+/* Data returned by monitor SWI. */
+.global __stack_base__
+HeapBase: .word 0
+HeapLimit: .word 0
+__stack_base__: .word 0
+StackLimit: .word 0
diff --git a/ports/arm11/gnu/example_build/libc.a b/ports/arm11/gnu/example_build/libc.a
new file mode 100644
index 00000000..b03b1626
--- /dev/null
+++ b/ports/arm11/gnu/example_build/libc.a
Binary files differ
diff --git a/ports/arm11/gnu/example_build/libgcc.a b/ports/arm11/gnu/example_build/libgcc.a
new file mode 100644
index 00000000..da2319e0
--- /dev/null
+++ b/ports/arm11/gnu/example_build/libgcc.a
Binary files differ
diff --git a/ports/arm11/gnu/example_build/libnosys.a b/ports/arm11/gnu/example_build/libnosys.a
new file mode 100644
index 00000000..b70de481
--- /dev/null
+++ b/ports/arm11/gnu/example_build/libnosys.a
Binary files differ
diff --git a/ports/arm11/gnu/example_build/reset.S b/ports/arm11/gnu/example_build/reset.S
new file mode 100644
index 00000000..856e31eb
--- /dev/null
+++ b/ports/arm11/gnu/example_build/reset.S
@@ -0,0 +1,76 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Initialize */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_initialize.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+
+ .arm
+
+ .global _start
+ .global __tx_undefined
+ .global __tx_swi_interrupt
+ .global __tx_prefetch_handler
+ .global __tx_abort_handler
+ .global __tx_reserved_handler
+ .global __tx_irq_handler
+ .global __tx_fiq_handler
+@
+@
+@/* Define the vector area. This should be located or copied to 0. */
+@
+ .text
+ .global __vectors
+__vectors:
+
+ LDR pc, STARTUP @ Reset goes to startup function
+ LDR pc, UNDEFINED @ Undefined handler
+ LDR pc, SWI @ Software interrupt handler
+ LDR pc, PREFETCH @ Prefetch exception handler
+ LDR pc, ABORT @ Abort exception handler
+ LDR pc, RESERVED @ Reserved exception handler
+ LDR pc, IRQ @ IRQ interrupt handler
+ LDR pc, FIQ @ FIQ interrupt handler
+
+STARTUP:
+ .word _start @ Reset goes to C startup function
+UNDEFINED:
+ .word __tx_undefined @ Undefined handler
+SWI:
+ .word __tx_swi_interrupt @ Software interrupt handler
+PREFETCH:
+ .word __tx_prefetch_handler @ Prefetch exception handler
+ABORT:
+ .word __tx_abort_handler @ Abort exception handler
+RESERVED:
+ .word __tx_reserved_handler @ Reserved exception handler
+IRQ:
+ .word __tx_irq_handler @ IRQ interrupt handler
+FIQ:
+ .word __tx_fiq_handler @ FIQ interrupt handler
diff --git a/ports/arm11/gnu/example_build/sample_threadx.c b/ports/arm11/gnu/example_build/sample_threadx.c
new file mode 100644
index 00000000..418ec634
--- /dev/null
+++ b/ports/arm11/gnu/example_build/sample_threadx.c
@@ -0,0 +1,369 @@
+/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ byte pool, and block pool. */
+
+#include "tx_api.h"
+
+#define DEMO_STACK_SIZE 1024
+#define DEMO_BYTE_POOL_SIZE 9120
+#define DEMO_BLOCK_POOL_SIZE 100
+#define DEMO_QUEUE_SIZE 100
+
+
+/* Define the ThreadX object control blocks... */
+
+TX_THREAD thread_0;
+TX_THREAD thread_1;
+TX_THREAD thread_2;
+TX_THREAD thread_3;
+TX_THREAD thread_4;
+TX_THREAD thread_5;
+TX_THREAD thread_6;
+TX_THREAD thread_7;
+TX_QUEUE queue_0;
+TX_SEMAPHORE semaphore_0;
+TX_MUTEX mutex_0;
+TX_EVENT_FLAGS_GROUP event_flags_0;
+TX_BYTE_POOL byte_pool_0;
+TX_BLOCK_POOL block_pool_0;
+
+
+/* Define the counters used in the demo application... */
+
+ULONG thread_0_counter;
+ULONG thread_1_counter;
+ULONG thread_1_messages_sent;
+ULONG thread_2_counter;
+ULONG thread_2_messages_received;
+ULONG thread_3_counter;
+ULONG thread_4_counter;
+ULONG thread_5_counter;
+ULONG thread_6_counter;
+ULONG thread_7_counter;
+
+
+/* Define thread prototypes. */
+
+void thread_0_entry(ULONG thread_input);
+void thread_1_entry(ULONG thread_input);
+void thread_2_entry(ULONG thread_input);
+void thread_3_and_4_entry(ULONG thread_input);
+void thread_5_entry(ULONG thread_input);
+void thread_6_and_7_entry(ULONG thread_input);
+
+
+/* Define main entry point. */
+
+int main()
+{
+
+ /* Enter the ThreadX kernel. */
+ tx_kernel_enter();
+}
+
+
+/* Define what the initial system looks like. */
+
+void tx_application_define(void *first_unused_memory)
+{
+
+CHAR *pointer = TX_NULL;
+
+
+ /* Create a byte memory pool from which to allocate the thread stacks. */
+ tx_byte_pool_create(&byte_pool_0, "byte pool 0", first_unused_memory, DEMO_BYTE_POOL_SIZE);
+
+ /* Put system definition stuff in here, e.g. thread creates and other assorted
+ create information. */
+
+ /* Allocate the stack for thread 0. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create the main thread. */
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+
+ /* Allocate the stack for thread 1. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
+ message queue. It is also interesting to note that these threads have a time
+ slice. */
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 2. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 3. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ An interesting thing here is that both threads share the same instruction area. */
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 4. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 5. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create thread 5. This thread simply pends on an event flag which will be set
+ by thread_0. */
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
+ 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 6. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 7. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the message queue. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
+
+ /* Create the message queue shared by threads 1 and 2. */
+ tx_queue_create(&queue_0, "queue 0", TX_1_ULONG, pointer, DEMO_QUEUE_SIZE*sizeof(ULONG));
+
+ /* Create the semaphore used by threads 3 and 4. */
+ tx_semaphore_create(&semaphore_0, "semaphore 0", 1);
+
+ /* Create the event flags group used by threads 1 and 5. */
+ tx_event_flags_create(&event_flags_0, "event flags 0");
+
+ /* Create the mutex used by thread 6 and 7 without priority inheritance. */
+ tx_mutex_create(&mutex_0, "mutex 0", TX_NO_INHERIT);
+
+ /* Allocate the memory for a small block pool. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_BLOCK_POOL_SIZE, TX_NO_WAIT);
+
+ /* Create a block memory pool to allocate a message buffer from. */
+ tx_block_pool_create(&block_pool_0, "block pool 0", sizeof(ULONG), pointer, DEMO_BLOCK_POOL_SIZE);
+
+ /* Allocate a block and release the block memory. */
+ tx_block_allocate(&block_pool_0, (VOID **) &pointer, TX_NO_WAIT);
+
+ /* Release the block back to the pool. */
+ tx_block_release(pointer);
+}
+
+
+
+/* Define the test threads. */
+
+void thread_0_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sits in while-forever-sleep loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_0_counter++;
+
+ /* Sleep for 10 ticks. */
+ tx_thread_sleep(10);
+
+ /* Set event flag 0 to wakeup thread 5. */
+ status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_1_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sends messages to a queue shared by thread 2. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_1_counter++;
+
+ /* Send message to queue 0. */
+ status = tx_queue_send(&queue_0, &thread_1_messages_sent, TX_WAIT_FOREVER);
+
+ /* Check completion status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Increment the message sent. */
+ thread_1_messages_sent++;
+ }
+}
+
+
+void thread_2_entry(ULONG thread_input)
+{
+
+ULONG received_message;
+UINT status;
+
+ /* This thread retrieves messages placed on the queue by thread 1. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_2_counter++;
+
+ /* Retrieve a message from the queue. */
+ status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
+
+ /* Check completion status and make sure the message is what we
+ expected. */
+ if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
+ break;
+
+ /* Otherwise, all is okay. Increment the received message count. */
+ thread_2_messages_received++;
+ }
+}
+
+
+void thread_3_and_4_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 3 and thread 4. As the loop
+ below shows, these function compete for ownership of semaphore_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 3)
+ thread_3_counter++;
+ else
+ thread_4_counter++;
+
+ /* Get the semaphore with suspension. */
+ status = tx_semaphore_get(&semaphore_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the semaphore. */
+ tx_thread_sleep(2);
+
+ /* Release the semaphore. */
+ status = tx_semaphore_put(&semaphore_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_5_entry(ULONG thread_input)
+{
+
+UINT status;
+ULONG actual_flags;
+
+
+ /* This thread simply waits for an event in a forever loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_5_counter++;
+
+ /* Wait for event flag 0. */
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ &actual_flags, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if ((status != TX_SUCCESS) || (actual_flags != 0x1))
+ break;
+ }
+}
+
+
+void thread_6_and_7_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 6 and thread 7. As the loop
+ below shows, these function compete for ownership of mutex_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 6)
+ thread_6_counter++;
+ else
+ thread_7_counter++;
+
+ /* Get the mutex with suspension. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Get the mutex again with suspension. This shows
+ that an owning thread may retrieve the mutex it
+ owns multiple times. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the mutex. */
+ tx_thread_sleep(2);
+
+ /* Release the mutex. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Release the mutex again. This will actually
+ release ownership since it was obtained twice. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
diff --git a/ports/arm11/gnu/example_build/sample_threadx.ld b/ports/arm11/gnu/example_build/sample_threadx.ld
new file mode 100644
index 00000000..3dea4e1c
--- /dev/null
+++ b/ports/arm11/gnu/example_build/sample_threadx.ld
@@ -0,0 +1,239 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+ "elf32-littlearm")
+OUTPUT_ARCH(arm)
+/* ENTRY(_start) */
+/* Do we need any of these for elf?
+ __DYNAMIC = 0; */
+SECTIONS
+{
+ . = 0x00000000;
+
+ .vectors : {reset.o(.text) }
+
+ /* Read-only sections, merged into text segment: */
+ . = 0x00001000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.text :
+ {
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+ }
+ .rela.text :
+ {
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+ }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.rodata :
+ {
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+ }
+ .rela.rodata :
+ {
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+ }
+ .rel.data :
+ {
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+ }
+ .rela.data :
+ {
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+ }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.sdata :
+ {
+ *(.rel.sdata)
+ *(.rel.sdata.*)
+ *(.rel.gnu.linkonce.s*)
+ }
+ .rela.sdata :
+ {
+ *(.rela.sdata)
+ *(.rela.sdata.*)
+ *(.rela.gnu.linkonce.s*)
+ }
+ .rel.sbss : { *(.rel.sbss) }
+ .rela.sbss : { *(.rela.sbss) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ .plt : { *(.plt) }
+ .text :
+ {
+ *(.text)
+ *(.text.*)
+ *(.stub)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.gnu.linkonce.t*)
+ *(.glue_7t) *(.glue_7)
+ } =0
+ .init :
+ {
+ KEEP (*(.init))
+ } =0
+ _etext = .;
+ PROVIDE (etext = .);
+ .fini :
+ {
+ KEEP (*(.fini))
+ } =0
+ .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) }
+ .rodata1 : { *(.rodata1) }
+ .eh_frame_hdr : { *(.eh_frame_hdr) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(256) + (. & (256 - 1));
+ .data :
+ {
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
+ SORT(CONSTRUCTORS)
+ }
+ .data1 : { *(.data1) }
+ .eh_frame : { KEEP (*(.eh_frame)) }
+ .gcc_except_table : { *(.gcc_except_table) }
+ .ctors :
+ {
+ /* gcc uses crtbegin.o to find the start of
+ the constructors, so we make sure it is
+ first. Because this is a wildcard, it
+ doesn't matter if the user does not
+ actually link against crtbegin.o; the
+ linker won't look for a file to match a
+ wildcard. The wildcard also means that it
+ doesn't matter which directory crtbegin.o
+ is in. */
+ KEEP (*crtbegin.o(.ctors))
+ /* We don't want to include the .ctor section from
+ from the crtend.o file until after the sorted ctors.
+ The .ctor section from the crtend file contains the
+ end of ctors marker and it must be last */
+ KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
+ KEEP (*(SORT(.ctors.*)))
+ KEEP (*(.ctors))
+ }
+ .dtors :
+ {
+ KEEP (*crtbegin.o(.dtors))
+ KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
+ KEEP (*(SORT(.dtors.*)))
+ KEEP (*(.dtors))
+ }
+ .jcr : { KEEP (*(.jcr)) }
+ .got : { *(.got.plt) *(.got) }
+ .dynamic : { *(.dynamic) }
+ /* We want the small data sections together, so single-instruction offsets
+ can access them all, and initialized data all before uninitialized, so
+ we can shorten the on-disk segment size. */
+ .sdata :
+ {
+ *(.sdata)
+ *(.sdata.*)
+ *(.gnu.linkonce.s.*)
+ }
+ _edata = .;
+ PROVIDE (edata = .);
+ __bss_start = .;
+ __bss_start__ = .;
+ .sbss :
+ {
+ *(.dynsbss)
+ *(.sbss)
+ *(.sbss.*)
+ *(.scommon)
+ }
+ .bss :
+ {
+ *(.dynbss)
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
+ /* Align here to ensure that the .bss section occupies space up to
+ _end. Align after .bss to ensure correct alignment even if the
+ .bss section disappears because there are no input sections. */
+ . = ALIGN(32 / 8);
+ }
+ . = ALIGN(32 / 8);
+
+ _bss_end__ = . ; __bss_end__ = . ;
+ PROVIDE (end = .);
+
+ .stack :
+ {
+
+ _stack_bottom = ABSOLUTE(.) ;
+
+ /* Allocate room for stack. This must be big enough for the IRQ, FIQ, and
+ SYS stack if nested interrupts are enabled. */
+ . = ALIGN(8) ;
+ . += 4096 ;
+ _sp = . - 16 ;
+ _stack_top = ABSOLUTE(.) ;
+ }
+
+ _end = .; __end__ = . ;
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+
+ /* These must appear regardless of . */
+}
diff --git a/ports/arm11/gnu/example_build/tx_initialize_low_level.S b/ports/arm11/gnu/example_build/tx_initialize_low_level.S
new file mode 100644
index 00000000..1cce43f6
--- /dev/null
+++ b/ports/arm11/gnu/example_build/tx_initialize_low_level.S
@@ -0,0 +1,347 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Initialize */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_initialize.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+
+ .arm
+
+SVC_MODE = 0xD3 @ Disable IRQ/FIQ SVC mode
+IRQ_MODE = 0xD2 @ Disable IRQ/FIQ IRQ mode
+FIQ_MODE = 0xD1 @ Disable IRQ/FIQ FIQ mode
+SYS_MODE = 0xDF @ Disable IRQ/FIQ SYS mode
+FIQ_STACK_SIZE = 512 @ FIQ stack size
+IRQ_STACK_SIZE = 1024 @ IRQ stack size
+SYS_STACK_SIZE = 1024 @ System stack size
+@
+@
+ .global _tx_thread_system_stack_ptr
+ .global _tx_initialize_unused_memory
+ .global _tx_thread_context_save
+ .global _tx_thread_context_restore
+ .global _tx_timer_interrupt
+ .global _end
+ .global _sp
+ .global _stack_bottom
+
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_initialize_low_level for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .thumb
+ .global $_tx_initialize_low_level
+ .type $_tx_initialize_low_level,function
+$_tx_initialize_low_level:
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_initialize_low_level @ Call _tx_initialize_low_level function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_initialize_low_level ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for any low-level processor */
+@/* initialization, including setting up interrupt vectors, setting */
+@/* up a periodic timer interrupt source, saving the system stack */
+@/* pointer for use in ISR processing later, and finding the first */
+@/* available RAM memory address for tx_application_define. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_initialize_low_level(VOID)
+@{
+ .global _tx_initialize_low_level
+ .type _tx_initialize_low_level,function
+_tx_initialize_low_level:
+@
+@ /* We must be in SVC mode at this point! */
+@
+@ /* Setup various stack pointers. */
+@
+ LDR r1, =_sp @ Get pointer to stack area
+
+#ifdef TX_ENABLE_IRQ_NESTING
+@
+@ /* Setup the system mode stack for nested interrupt support */
+@
+ LDR r2, =SYS_STACK_SIZE @ Pickup stack size
+ MOV r3, #SYS_MODE @ Build SYS mode CPSR
+ MSR CPSR_cxsf, r3 @ Enter SYS mode
+ SUB r1, r1, #1 @ Backup 1 byte
+ BIC r1, r1, #7 @ Ensure 8-byte alignment
+ MOV sp, r1 @ Setup SYS stack pointer
+ SUB r1, r1, r2 @ Calculate start of next stack
+#endif
+
+ LDR r2, =FIQ_STACK_SIZE @ Pickup stack size
+ MOV r0, #FIQ_MODE @ Build FIQ mode CPSR
+ MSR CPSR, r0 @ Enter FIQ mode
+ SUB r1, r1, #1 @ Backup 1 byte
+ BIC r1, r1, #7 @ Ensure 8-byte alignment
+ MOV sp, r1 @ Setup FIQ stack pointer
+ SUB r1, r1, r2 @ Calculate start of next stack
+ LDR r2, =IRQ_STACK_SIZE @ Pickup IRQ stack size
+ MOV r0, #IRQ_MODE @ Build IRQ mode CPSR
+ MSR CPSR, r0 @ Enter IRQ mode
+ SUB r1, r1, #1 @ Backup 1 byte
+ BIC r1, r1, #7 @ Ensure 8-byte alignment
+ MOV sp, r1 @ Setup IRQ stack pointer
+ SUB r3, r1, r2 @ Calculate end of IRQ stack
+ MOV r0, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR, r0 @ Enter SVC mode
+ LDR r2, =_stack_bottom @ Pickup stack bottom
+ CMP r3, r2 @ Compare the current stack end with the bottom
+_stack_error_loop:
+ BLT _stack_error_loop @ If the IRQ stack exceeds the stack bottom, just sit here!
+@
+@ /* Save the system stack pointer. */
+@ _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
+@
+ LDR r2, =_tx_thread_system_stack_ptr @ Pickup stack pointer
+ STR r1, [r2] @ Save the system stack
+@
+@ /* Save the first available memory address. */
+@ _tx_initialize_unused_memory = (VOID_PTR) _end;
+@
+ LDR r1, =_end @ Get end of non-initialized RAM area
+ LDR r2, =_tx_initialize_unused_memory @ Pickup unused memory ptr address
+ ADD r1, r1, #8 @ Increment to next free word
+ STR r1, [r2] @ Save first free memory address
+@
+@ /* Setup Timer for periodic interrupts. */
+@
+@ /* Done, return to caller. */
+@
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+@
+@
+@/* Define shells for each of the interrupt vectors. */
+@
+ .global __tx_undefined
+__tx_undefined:
+ B __tx_undefined @ Undefined handler
+@
+ .global __tx_swi_interrupt
+__tx_swi_interrupt:
+ B __tx_swi_interrupt @ Software interrupt handler
+@
+ .global __tx_prefetch_handler
+__tx_prefetch_handler:
+ B __tx_prefetch_handler @ Prefetch exception handler
+@
+ .global __tx_abort_handler
+__tx_abort_handler:
+ B __tx_abort_handler @ Abort exception handler
+@
+ .global __tx_reserved_handler
+__tx_reserved_handler:
+ B __tx_reserved_handler @ Reserved exception handler
+@
+ .global __tx_irq_handler
+ .global __tx_irq_processing_return
+__tx_irq_handler:
+@
+@ /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return:
+@
+@ /* At this point execution is still in the IRQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. In
+@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
+@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+@ small code sequences where lr is saved before enabling interrupts and
+@ restored after interrupts are again disabled. */
+@
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ from IRQ mode with interrupts disabled. This routine switches to the
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ prior to enabling nested IRQ interrupts. */
+#ifdef TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_start
+#endif
+@
+@ /* For debug purpose, execute the timer interrupt processing here. In
+@ a real system, some kind of status indication would have to be checked
+@ before the timer interrupt handler could be called. */
+@
+ BL _tx_timer_interrupt @ Timer interrupt handler
+@
+@
+@ /* If interrupt nesting was started earlier, the end of interrupt nesting
+@ service must be called before returning to _tx_thread_context_restore.
+@ This routine returns in processing in IRQ mode with interrupts disabled. */
+#ifdef TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_end
+#endif
+@
+@ /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+@
+@
+@ /* This is an example of a vectored IRQ handler. */
+@
+@ .global __tx_example_vectored_irq_handler
+@__tx_example_vectored_irq_handler:
+@
+@
+@ /* Save initial context and call context save to prepare for
+@ vectored ISR execution. */
+@
+@ STMDB sp!, {r0-r3} @ Save some scratch registers
+@ MRS r0, SPSR @ Pickup saved SPSR
+@ SUB lr, lr, #4 @ Adjust point of interrupt
+@ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
+@ BL _tx_thread_vectored_context_save @ Vectored context save
+@
+@ /* At this point execution is still in the IRQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. In
+@ addition, IRQ interrupts may be re-enabled - with certain restrictions -
+@ if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+@ small code sequences where lr is saved before enabling interrupts and
+@ restored after interrupts are again disabled. */
+@
+@
+@ /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+@ from IRQ mode with interrupts disabled. This routine switches to the
+@ system mode and returns with IRQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all IRQ interrupts are cleared
+@ prior to enabling nested IRQ interrupts. */
+@#ifdef TX_ENABLE_IRQ_NESTING
+@ BL _tx_thread_irq_nesting_start
+@#endif
+@
+@ /* Application IRQ handlers can be called here! */
+@
+@ /* If interrupt nesting was started earlier, the end of interrupt nesting
+@ service must be called before returning to _tx_thread_context_restore.
+@ This routine returns in processing in IRQ mode with interrupts disabled. */
+@#ifdef TX_ENABLE_IRQ_NESTING
+@ BL _tx_thread_irq_nesting_end
+@#endif
+@
+@ /* Jump to context restore to restore system context. */
+@ B _tx_thread_context_restore
+@
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ .global __tx_fiq_handler
+ .global __tx_fiq_processing_return
+__tx_fiq_handler:
+@
+@ /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+@
+@ /* At this point execution is still in the FIQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. */
+@
+@ /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+@ from FIQ mode with interrupts disabled. This routine switches to the
+@ system mode and returns with FIQ interrupts enabled.
+@
+@ NOTE: It is very important to ensure all FIQ interrupts are cleared
+@ prior to enabling nested FIQ interrupts. */
+#ifdef TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_start
+#endif
+@
+@ /* Application FIQ handlers can be called here! */
+@
+@ /* If interrupt nesting was started earlier, the end of interrupt nesting
+@ service must be called before returning to _tx_thread_fiq_context_restore. */
+#ifdef TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_end
+#endif
+@
+@ /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+@
+@
+#else
+ .global __tx_fiq_handler
+__tx_fiq_handler:
+ B __tx_fiq_handler @ FIQ interrupt handler
+#endif
+@
+@
+BUILD_OPTIONS:
+ .word _tx_build_options @ Reference to bring in
+VERSION_ID:
+ .word _tx_version_id @ Reference to bring in
+
+
+
diff --git a/ports/arm11/gnu/inc/tx_port.h b/ports/arm11/gnu/inc/tx_port.h
new file mode 100644
index 00000000..3b8e85bf
--- /dev/null
+++ b/ports/arm11/gnu/inc/tx_port.h
@@ -0,0 +1,316 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) Microsoft Corporation. All rights reserved. */
+/* */
+/* This software is licensed under the Microsoft Software License */
+/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+/* and in the root directory of this software. */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/GNU */
+/* 6.0.1 */
+/* */
+/* AUTHOR */
+/* */
+/* William E. Lamie, Microsoft Corporation */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+/* */
+/**************************************************************************/
+
+#ifndef TX_PORT_H
+#define TX_PORT_H
+
+
+/* Determine if the optional ThreadX user define file should be used. */
+
+#ifdef TX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in tx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "tx_user.h"
+#endif
+
+
+/* Define compiler library include files. */
+
+#include <stdlib.h>
+#include <string.h>
+
+
+/* Define ThreadX basic types for this port. */
+
+#define VOID void
+typedef char CHAR;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef short SHORT;
+typedef unsigned short USHORT;
+
+
+/* Define the priority levels for ThreadX. Legal values range
+ from 32 to 1024 and MUST be evenly divisible by 32. */
+
+#ifndef TX_MAX_PRIORITIES
+#define TX_MAX_PRIORITIES 32
+#endif
+
+
+/* Define the minimum stack for a ThreadX thread on this processor. If the size supplied during
+ thread creation is less than this value, the thread create call will return an error. */
+
+#ifndef TX_MINIMUM_STACK
+#define TX_MINIMUM_STACK 200 /* Minimum stack size for this port */
+#endif
+
+
+/* Define the system timer thread's default stack size and priority. These are only applicable
+ if TX_TIMER_PROCESS_IN_ISR is not defined. */
+
+#ifndef TX_TIMER_THREAD_STACK_SIZE
+#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
+#endif
+
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#endif
+
+
+/* Define various constants for the ThreadX ARM port. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
+#else
+#define TX_INT_DISABLE 0x80 /* Disable IRQ interrupts */
+#endif
+#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
+
+
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ source constants would be:
+
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
+#define TX_TRACE_TIME_MASK 0x0000FFFFUL
+
+*/
+
+#ifndef TX_TRACE_TIME_SOURCE
+#define TX_TRACE_TIME_SOURCE ++_tx_trace_simulated_time
+#endif
+#ifndef TX_TRACE_TIME_MASK
+#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
+#endif
+
+
+/* Define the port specific options for the _tx_build_options variable. This variable indicates
+ how the ThreadX library was built. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_FIQ_ENABLED 1
+#else
+#define TX_FIQ_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_IRQ_NESTING
+#define TX_IRQ_NESTING_ENABLED 2
+#else
+#define TX_IRQ_NESTING_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_FIQ_NESTING
+#define TX_FIQ_NESTING_ENABLED 4
+#else
+#define TX_FIQ_NESTING_ENABLED 0
+#endif
+
+#define TX_PORT_SPECIFIC_BUILD_OPTIONS TX_FIQ_ENABLED | TX_IRQ_NESTING_ENABLED | TX_FIQ_NESTING_ENABLED
+
+
+/* Define the in-line initialization constant so that modules with in-line
+ initialization capabilities can prevent their initialization from being
+ a function call. */
+
+#define TX_INLINE_INITIALIZATION
+
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+#ifdef TX_ENABLE_STACK_CHECKING
+#undef TX_DISABLE_STACK_FILLING
+#endif
+
+
+/* Define the TX_THREAD control block extensions for this port. The main reason
+ for the multiple macros is so that backward compatibility can be maintained with
+ existing ThreadX kernel awareness modules. */
+
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#define TX_THREAD_EXTENSION_2
+#define TX_THREAD_EXTENSION_3
+
+
+/* Define the port extensions of the remaining ThreadX objects. */
+
+#define TX_BLOCK_POOL_EXTENSION
+#define TX_BYTE_POOL_EXTENSION
+#define TX_EVENT_FLAGS_GROUP_EXTENSION
+#define TX_MUTEX_EXTENSION
+#define TX_QUEUE_EXTENSION
+#define TX_SEMAPHORE_EXTENSION
+#define TX_TIMER_EXTENSION
+
+
+/* Define the user extension field of the thread control block. Nothing
+ additional is needed for this port so it is defined as white space. */
+
+#ifndef TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
+#endif
+
+
+/* Define the macros for processing extensions in tx_thread_create, tx_thread_delete,
+ tx_thread_shell_entry, and tx_thread_terminate. */
+
+
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+
+
+/* Define the ThreadX object creation extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_CREATE_EXTENSION(group_ptr)
+#define TX_MUTEX_CREATE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_CREATE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_CREATE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_CREATE_EXTENSION(timer_ptr)
+
+
+/* Define the ThreadX object deletion extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_DELETE_EXTENSION(group_ptr)
+#define TX_MUTEX_DELETE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_DELETE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_DELETE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
+
+
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
+ lowest bit set. */
+
+#if __TARGET_ARCH_ARM > 4
+
+#ifndef __thumb__
+
+#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
+ asm volatile (" CLZ %0,%1 ": "=r" (b) : "r" (m) ); \
+ b = 31 - b;
+#endif
+#endif
+
+
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
+ present prior to the disable macro. In most cases, the save area macro
+ is used to define a local function save area for the disable and restore
+ macros. */
+
+#ifdef __thumb__
+
+unsigned int _tx_thread_interrupt_disable(void);
+unsigned int _tx_thread_interrupt_restore(UINT old_posture);
+
+
+#define TX_INTERRUPT_SAVE_AREA unsigned int interrupt_save;
+
+#define TX_DISABLE interrupt_save = _tx_thread_interrupt_disable();
+#define TX_RESTORE _tx_thread_interrupt_restore(interrupt_save);
+
+#else
+
+#define TX_INTERRUPT_SAVE_AREA unsigned int interrupt_save, tx_temp;
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_DISABLE asm volatile (" MRS %0,CPSR; ORR %1,%0,#0xC0; MSR CPSR_cxsf,%1 ": "=r" (interrupt_save), "=r" (tx_temp) );
+#else
+#define TX_DISABLE asm volatile (" MRS %0,CPSR; ORR %1,%0,#0x80; MSR CPSR_cxsf,%1 ": "=r" (interrupt_save), "=r" (tx_temp) );
+#endif
+
+#define TX_RESTORE asm volatile (" MSR CPSR_cxsf,%0 "::"r" (interrupt_save) );
+
+#endif
+
+
+/* Define the interrupt lockout macros for each ThreadX object. */
+
+#define TX_BLOCK_POOL_DISABLE TX_DISABLE
+#define TX_BYTE_POOL_DISABLE TX_DISABLE
+#define TX_EVENT_FLAGS_GROUP_DISABLE TX_DISABLE
+#define TX_MUTEX_DISABLE TX_DISABLE
+#define TX_QUEUE_DISABLE TX_DISABLE
+#define TX_SEMAPHORE_DISABLE TX_DISABLE
+
+
+/* Define the version ID of ThreadX. This may be utilized by the application. */
+
+#ifdef TX_THREAD_INIT
+CHAR _tx_version_id[] =
+ "Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/GNU Version 6.0.1 *";
+#else
+extern CHAR _tx_version_id[];
+#endif
+
+
+#endif
+
diff --git a/ports/arm11/gnu/readme_threadx.txt b/ports/arm11/gnu/readme_threadx.txt
new file mode 100644
index 00000000..5f36d8ed
--- /dev/null
+++ b/ports/arm11/gnu/readme_threadx.txt
@@ -0,0 +1,496 @@
+ Microsoft's Azure RTOS ThreadX for ARM11
+
+ Using the GNU Tools
+
+1. Building the ThreadX run-time Library
+
+First make sure you are in the "example_build" directory. Also, make sure that
+you have setup your path and other environment variables necessary for the GNU
+development environment.
+
+At this point you may run the build_threadx.bat batch file. This will build the
+ThreadX run-time environment in the "example_build" directory.
+
+You should observe assembly and compilation of a series of ThreadX source
+files. At the end of the batch file, they are all combined into the
+run-time library file: tx.a. This file must be linked with your
+application in order to use ThreadX.
+
+
+2. Demonstration System
+
+Building the demonstration is easy; simply execute the build_threadx_sample.bat
+batch file while inside the "example_build" directory.
+
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with TX.A. The resulting file DEMO is a binary file
+that can be downloaded and executed.
+
+
+3. System Initialization
+
+The entry point in ThreadX for the ARM11 using GNU tools is at label _start.
+This is defined within the modified version of the GNU startup code - crt0.S.
+
+The ThreadX tx_initialize_low_level.S file is responsible for setting up various
+system data structures, the interrupt vectors, and a periodic timer interrupt source.
+By default, the vector area is defined to be located at the "__vectors" label,
+which is defined in reset.S. This area is typically located at 0. In situations
+where this is impossible, the vectors at the "__vectors" label should be copied
+to address 0.
+
+This is also where initialization of a periodic timer interrupt source should take
+place.
+
+In addition, _tx_initialize_low_level defines the first available address
+for use by the application, which is supplied as the sole input parameter
+to your application definition function, tx_application_define.
+
+
+4. Assembler / Compiler Switches
+
+The following are compiler switches used in building the demonstration
+system:
+
+Compiler/Assembler Meaning
+ Switches
+
+ -g Specifies debug information
+ -c Specifies object code generation
+ -mcpu=arm1136j-s Specifies target cpu
+
+Linker Switch Meaning
+
+ -o sample_threadx.out Specifies output file
+ -M > sample_threadx.map Specifies demo map file
+ -A arm1136j-s Specifies target architecture
+ -T sample_threadx.ld Specifies the loader control file
+
+Application Defines ( -D option)
+
+ TX_ENABLE_FIQ_SUPPORT This assembler define enables FIQ
+ interrupt handling support in the
+ ThreadX assembly files. If used,
+ it should be used on all assembly
+ files and the generic C source of
+ ThreadX should be compiled with
+ TX_ENABLE_FIQ_SUPPORT defined as well.
+
+ TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
+ nested support. If IRQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.S.
+
+ TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
+ nested support. If FIQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.S. In addition,
+ IRQ nesting should also be enabled.
+
+ TX_ENABLE_FIQ_SUPPORT This compiler define enables FIQ
+ interrupt handling in the ThreadX
+ generic C source. This define
+ should also be used in conjunction
+ with the corresponding assembler
+ define.
+
+ TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
+ this define causes basic ThreadX error
+ checking to be disabled. Please see
+ Chapter 2 in the "ThreadX User Guide"
+ for more details.
+
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
+ default, this value is set to 32 priority levels.
+
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
+ in tx_port.h.
+
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
+ value is port-specific and is found in tx_port.h.
+
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
+ in tx_port.h.
+
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
+ By default, this option is not defined.
+
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
+ By default, this option is not defined.
+
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
+ not defined.
+
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
+ By default, this option is not defined.
+
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
+ By default, this option is not defined.
+
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
+ By default, this option is not defined.
+
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
+ and improves performance.
+
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
+ not defined.
+
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
+ not defined.
+
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
+ is not defined.
+
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
+ not defined.
+
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
+ not defined.
+
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
+ not defined.
+
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
+ not defined.
+
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
+ not defined.
+
+ TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
+ feature. The trace buffer is supplied at a later time
+ via an application call to tx_trace_enable.
+
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
+ built with TX_ENABLE_EVENT_TRACE defined.
+
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ library is built with TX_ENABLE_EVENT_TRACE defined.
+
+
+5. Register Usage and Stack Frames
+
+The GNU compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are scratch
+registers for each function. All other registers used by a C function must
+be preserved by the function. ThreadX takes advantage of this in situations
+where a context switch happens as a result of making a ThreadX service call
+(which is itself a C function). In such cases, the saved context of a thread
+is only the non-scratch registers.
+
+The following defines the saved context stack frames for context switches
+that occur as a result of interrupt handling or from thread-level API calls.
+All suspended threads have one of these two types of stack frames. The top
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+associated thread control block TX_THREAD.
+
+
+
+ Offset Interrupted Stack Frame Non-Interrupt Stack Frame
+
+ 0x00 1 0
+ 0x04 CPSR CPSR
+ 0x08 r0 (a1) r4 (v1)
+ 0x0C r1 (a2) r5 (v2)
+ 0x10 r2 (a3) r6 (v3)
+ 0x14 r3 (a4) r7 (v4)
+ 0x18 r4 (v1) r8 (v5)
+ 0x1C r5 (v2) r9 (v6)
+ 0x20 r6 (v3) r10 (v7)
+ 0x24 r7 (v4) r11 (fp)
+ 0x28 r8 (v5) r14 (lr)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
+ 0x3C r14 (lr)
+ 0x40 PC
+
+
+6. Improving Performance
+
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
+
+
+7. Interrupt Handling
+
+ThreadX provides complete and high-performance interrupt handling for ARM11
+targets. There are a certain set of requirements that are defined in the
+following sub-sections:
+
+
+7.1 Vector Area
+
+The ARM11 vectors start at address zero. The demonstration system startup
+reset.S file contains the vectors and is loaded at address zero. On actual
+hardware platforms, this area might have to be copied to address 0.
+
+
+7.2 IRQ ISRs
+
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports
+nested IRQ interrupts. The following sub-sections define the IRQ capabilities.
+
+
+7.2.1 Standard IRQ ISRs
+
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+is the default IRQ handler defined in tx_initialize_low_level.S:
+
+ .global __tx_irq_handler
+ .global __tx_irq_processing_return
+__tx_irq_handler:
+@
+@ /* Jump to context save to save system context. */
+ B _tx_thread_context_save @ Jump to the context save
+__tx_irq_processing_return:
+@
+@ /* At this point execution is still in the IRQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. Note
+@ that IRQ interrupts are still disabled upon return from the context
+@ save function. */
+@
+@ /* Application ISR call(s) go here! */
+@
+@ /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.2 Vectored IRQ ISRs
+
+The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
+by the particular implementation. The following is an example IRQ handler defined in
+tx_initialize_low_level.S:
+
+ .global __tx_irq_example_handler
+__tx_irq_example_handler:
+@
+@ /* Call context save to save system context. */
+
+ STMDB sp!, {r0-r3} @ Save some scratch registers
+ MRS r0, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} @ Store other scratch registers
+ BL _tx_thread_vectored_context_save @ Call the vectored IRQ context save
+@
+@ /* At this point execution is still in the IRQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. Note
+@ that IRQ interrupts are still disabled upon return from the context
+@ save function. */
+@
+@ /* Application ISR call goes here! */
+@
+@ /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.3 Nested IRQ Support
+
+By default, nested IRQ interrupt support is not enabled. To enable nested
+IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
+defined. With this defined, two new IRQ interrupt management services are
+available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
+These function should be called between the IRQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
+preparation for the IRQ context restore service.
+
+The following is an example of enabling IRQ nested interrupts in a standard
+IRQ handler:
+
+ .global __tx_irq_handler
+ .global __tx_irq_processing_return
+__tx_irq_handler:
+@
+@ /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return:
+@
+@ /* Enable nested IRQ interrupts. NOTE: Since this service returns
+@ with IRQ interrupts enabled, all IRQ interrupt sources must be
+@ cleared prior to calling this service. */
+ BL _tx_thread_irq_nesting_start
+@
+@ /* Application ISR call(s) go here! */
+@
+@ /* Disable nested IRQ interrupts. The mode is switched back to
+@ IRQ mode and IRQ interrupts are disable upon return. */
+ BL _tx_thread_irq_nesting_end
+@
+@ /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.3 FIQ Interrupts
+
+By default, ARM7 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
+from default FIQ ISRs, which is located in tx_initialize_low_level.S.
+
+
+7.3.1 Managed FIQ Interrupts
+
+Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
+are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
+this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
+handlers defined previously. The following is default FIQ handler
+defined in tx_initialize_low_level.S:
+
+
+ .global __tx_fiq_handler
+ .global __tx_fiq_processing_return
+__tx_fiq_handler:
+@
+@ /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+@
+@ /* At this point execution is still in the FIQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. */
+@
+@ /* Application FIQ handlers can be called here! */
+@
+@ /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+7.3.1.1 Nested FIQ Support
+
+By default, nested FIQ interrupt support is not enabled. To enable nested
+FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
+defined. With this defined, two new FIQ interrupt management services are
+available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
+These function should be called between the FIQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.S. When nested FIQ interrupts are no longer required,
+calling the _tx_thread_fiq_nesting_end service disables nesting by disabling
+FIQ interrupts and switching back to FIQ mode in preparation for the FIQ
+context restore service.
+
+The following is an example of enabling FIQ nested interrupts in the
+typical FIQ handler:
+
+
+ .global __tx_fiq_handler
+ .global __tx_fiq_processing_return
+__tx_fiq_handler:
+@
+@ /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+@
+@ /* At this point execution is still in the FIQ mode. The CPSR, point of
+@ interrupt, and all C scratch registers are available for use. */
+@
+@ /* Enable nested FIQ interrupts. NOTE: Since this service returns
+@ with FIQ interrupts enabled, all FIQ interrupt sources must be
+@ cleared prior to calling this service. */
+ BL _tx_thread_fiq_nesting_start
+@
+@ /* Application FIQ handlers can be called here! */
+@
+@ /* Disable nested FIQ interrupts. The mode is switched back to
+@ FIQ mode and FIQ interrupts are disable upon return. */
+ BL _tx_thread_fiq_nesting_end
+@
+@ /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+8. ThreadX Timer Interrupt
+
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional but the remainder of
+ThreadX will still run.
+
+To add the timer interrupt processing, simply make a call to
+_tx_timer_interrupt in the IRQ processing. An example of this can be
+found in the file tx_initialize_low_level.S for the demonstration system.
+
+
+9. Revision History
+
+For generic code revision information, please refer to the readme_threadx_generic.txt
+file, which is included in your distribution. The following details the revision
+information associated with this specific port of ThreadX:
+
+06/30/2020 Initial ThreadX 6.0.1 version for ARM11 using GNU tools.
+
+
+Copyright(c) 1996-2020 Microsoft Corporation
+
+
+https://azure.com/rtos
+
diff --git a/ports/arm11/gnu/src/tx_thread_context_restore.S b/ports/arm11/gnu/src/tx_thread_context_restore.S
new file mode 100644
index 00000000..9e116197
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_context_restore.S
@@ -0,0 +1,241 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+ .arm
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+SVC_MODE = 0xD3 @ Disable IRQ/FIQ, SVC mode
+IRQ_MODE = 0xD2 @ Disable IRQ/FIQ, IRQ mode
+#else
+SVC_MODE = 0x93 @ Disable IRQ, SVC mode
+IRQ_MODE = 0x92 @ Disable IRQ, IRQ mode
+#endif
+@
+ .global _tx_thread_system_state
+ .global _tx_thread_current_ptr
+ .global _tx_thread_execute_ptr
+ .global _tx_timer_time_slice
+ .global _tx_thread_schedule
+ .global _tx_thread_preempt_disable
+ .global _tx_execution_isr_exit
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_restore
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_restore ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function restores the interrupt context if it is processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs Interrupt Service Routines */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_context_restore(VOID)
+@{
+ .global _tx_thread_context_restore
+ .type _tx_thread_context_restore,function
+_tx_thread_context_restore:
+@
+@ /* Lockout interrupts. */
+@
+ MOV r0, #IRQ_MODE @ Build disable interrupts CPSR
+ MSR CPSR, r0 @ Lockout interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR exit function to indicate an ISR is complete. */
+@
+ BL _tx_execution_isr_exit @ Call the ISR exit function
+#endif
+@
+@ /* Determine if interrupts are nested. */
+@ if (--_tx_thread_system_state)
+@ {
+@
+ LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
+ LDR r2, [r3] @ Pickup system state
+ SUB r2, r2, #1 @ Decrement the counter
+ STR r2, [r3] @ Store the counter
+ CMP r2, #0 @ Was this the first interrupt?
+ BEQ __tx_thread_not_nested_restore @ If so, not a nested restore
+@
+@ /* Interrupts are nested. */
+@
+@ /* Just recover the saved registers and return to the point of
+@ interrupt. */
+@
+ LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
+ MSR SPSR, r0 @ Put SPSR back
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOVS pc, lr @ Return to point of interrupt
+@
+@ }
+__tx_thread_not_nested_restore:
+@
+@ /* Determine if a thread was interrupted and no preemption is required. */
+@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+@ || (_tx_thread_preempt_disable))
+@ {
+@
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup actual current thread pointer
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_idle_system_restore @ Yes, idle system was interrupted
+@
+ LDR r3, =_tx_thread_preempt_disable @ Pickup preempt disable address
+ LDR r2, [r3] @ Pickup actual preempt disable flag
+ CMP r2, #0 @ Is it set?
+ BNE __tx_thread_no_preempt_restore @ Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr @ Pickup address of execute thread ptr
+ LDR r2, [r3] @ Pickup actual execute thread pointer
+ CMP r0, r2 @ Is the same thread highest priority?
+ BNE __tx_thread_preempt_restore @ No, preemption needs to happen
+@
+@
+__tx_thread_no_preempt_restore:
+@
+@ /* Restore interrupted thread or ISR. */
+@
+@ /* Pickup the saved stack pointer. */
+@ tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+@
+@ /* Recover the saved context and return to the point of interrupt. */
+@
+ LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
+ MSR SPSR, r0 @ Put SPSR back
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOVS pc, lr @ Return to point of interrupt
+@
+@ }
+@ else
+@ {
+__tx_thread_preempt_restore:
+@
+ LDMIA sp!, {r3, r10, r12, lr} @ Recover temporarily saved registers
+ MOV r1, lr @ Save lr (point of interrupt)
+ MOV r2, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR, r2 @ Enter SVC mode
+ STR r1, [sp, #-4]! @ Save point of interrupt
+ STMDB sp!, {r4-r12, lr} @ Save upper half of registers
+ MOV r4, r3 @ Save SPSR in r4
+ MOV r2, #IRQ_MODE @ Build IRQ mode CPSR
+ MSR CPSR, r2 @ Enter IRQ mode
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOV r5, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR, r5 @ Enter SVC mode
+ STMDB sp!, {r0-r3} @ Save r0-r3 on thread's stack
+ MOV r3, #1 @ Build interrupt stack type
+ STMDB sp!, {r3, r4} @ Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup current thread pointer
+ STR sp, [r0, #8] @ Save stack pointer in thread control
+ @ block
+@
+@ /* Save the remaining time-slice and disable it. */
+@ if (_tx_timer_time_slice)
+@ {
+@
+ LDR r3, =_tx_timer_time_slice @ Pickup time-slice variable address
+ LDR r2, [r3] @ Pickup time-slice
+ CMP r2, #0 @ Is it active?
+ BEQ __tx_thread_dont_save_ts @ No, don't save it
+@
+@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+@ _tx_timer_time_slice = 0;
+@
+ STR r2, [r0, #24] @ Save thread's time-slice
+ MOV r2, #0 @ Clear value
+ STR r2, [r3] @ Disable global time-slice flag
+@
+@ }
+__tx_thread_dont_save_ts:
+@
+@
+@ /* Clear the current task pointer. */
+@ _tx_thread_current_ptr = TX_NULL;
+@
+ MOV r0, #0 @ NULL value
+ STR r0, [r1] @ Clear current thread pointer
+@
+@ /* Return to the scheduler. */
+@ _tx_thread_schedule();
+@
+ B _tx_thread_schedule @ Return to scheduler
+@ }
+@
+__tx_thread_idle_system_restore:
+@
+@ /* Just return back to the scheduler! */
+@
+ MOV r0, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR, r0 @ Enter SVC mode
+ B _tx_thread_schedule @ Return to scheduler
+@}
+
+
+
diff --git a/ports/arm11/gnu/src/tx_thread_context_save.S b/ports/arm11/gnu/src/tx_thread_context_save.S
new file mode 100644
index 00000000..8a072cf5
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_context_save.S
@@ -0,0 +1,210 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS = 0x80 @ IRQ interrupts disabled
+#endif
+@
+ .global _tx_thread_system_state
+ .global _tx_thread_current_ptr
+ .global _tx_irq_processing_return
+ .global _tx_execution_isr_enter
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_context_save
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_context_save ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_context_save(VOID)
+@{
+ .global _tx_thread_context_save
+ .type _tx_thread_context_save,function
+_tx_thread_context_save:
+@
+@ /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+@ out, we are in IRQ mode, and all registers are intact. */
+@
+@ /* Check for a nested interrupt condition. */
+@ if (_tx_thread_system_state++)
+@ {
+@
+ STMDB sp!, {r0-r3} @ Save some working registers
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR @ Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS @ Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 @ Disable interrupts
+#endif
+ LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
+ LDR r2, [r3] @ Pickup system state
+ CMP r2, #0 @ Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save @ Yes, not a nested context save
+@
+@ /* Nested interrupt condition. */
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3] @ Store it back in the variable
+@
+@ /* Save the rest of the scratch registers on the stack and return to the
+@ calling ISR. */
+@
+ MRS r0, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} @ Store other registers
+@
+@ /* Return to the ISR. */
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ B __tx_irq_processing_return @ Continue IRQ processing
+@
+__tx_thread_not_nested_save:
+@ }
+@
+@ /* Otherwise, not nested, check to see if a thread was running. */
+@ else if (_tx_thread_current_ptr)
+@ {
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3] @ Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup current thread pointer
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ @ scheduling loop - nothing needs saving!
+@
+@ /* Save minimal context of interrupted thread. */
+@
+ MRS r2, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r2, r10, r12, lr} @ Store other registers
+@
+@ /* Save the current stack pointer in the thread's control block. */
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@
+@ /* Switch to the system stack. */
+@ sp = _tx_thread_system_stack_ptr@
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ B __tx_irq_processing_return @ Continue IRQ processing
+@
+@ }
+@ else
+@ {
+@
+__tx_thread_idle_system_save:
+@
+@ /* Interrupt occurred in the scheduling loop. */
+@
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ processing. */
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ ADD sp, sp, #16 @ Recover saved registers
+ B __tx_irq_processing_return @ Continue IRQ processing
+@
+@ }
+@}
+
+
+
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S b/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S
new file mode 100644
index 00000000..44acd526
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_fiq_context_restore.S
@@ -0,0 +1,256 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+@
+SVC_MODE = 0xD3 @ SVC mode
+FIQ_MODE = 0xD1 @ FIQ mode
+DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
+MODE_MASK = 0x1F @ Mode mask
+THUMB_MASK = 0x20 @ Thumb bit mask
+IRQ_MODE_BITS = 0x12 @ IRQ mode bits
+SVC_MODE_BITS = 0x13 @ SVC mode value
+@
+@
+ .global _tx_thread_system_state
+ .global _tx_thread_current_ptr
+ .global _tx_thread_system_stack_ptr
+ .global _tx_thread_execute_ptr
+ .global _tx_timer_time_slice
+ .global _tx_thread_schedule
+ .global _tx_thread_preempt_disable
+ .global _tx_execution_isr_exit
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_fiq_context_restore
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_restore ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function restores the fiq interrupt context when processing a */
+@/* nested interrupt. If not, it returns to the interrupt thread if no */
+@/* preemption is necessary. Otherwise, if preemption is necessary or */
+@/* if no thread was running, the function returns to the scheduler. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling routine */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* FIQ ISR Interrupt Service Routines */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_fiq_context_restore(VOID)
+@{
+ .global _tx_thread_fiq_context_restore
+ .type _tx_thread_fiq_context_restore,function
+_tx_thread_fiq_context_restore:
+@
+@ /* Lockout interrupts. */
+@
+ MRS r3, CPSR @ Pickup current CPSR
+ ORR r0, r3, #DISABLE_INTS @ Build interrupt disable value
+ MSR CPSR_cxsf, r0 @ Lockout interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR exit function to indicate an ISR is complete. */
+@
+ BL _tx_execution_isr_exit @ Call the ISR exit function
+#endif
+@
+@ /* Determine if interrupts are nested. */
+@ if (--_tx_thread_system_state)
+@ {
+@
+ LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
+ LDR r2, [r3] @ Pickup system state
+ SUB r2, r2, #1 @ Decrement the counter
+ STR r2, [r3] @ Store the counter
+ CMP r2, #0 @ Was this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_restore @ If so, not a nested restore
+@
+@ /* Interrupts are nested. */
+@
+@ /* Just recover the saved registers and return to the point of
+@ interrupt. */
+@
+ LDMIA sp!, {r0, r10, r12, lr} @ Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 @ Put SPSR back
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOVS pc, lr @ Return to point of interrupt
+@
+@ }
+__tx_thread_fiq_not_nested_restore:
+@
+@ /* Determine if a thread was interrupted and no preemption is required. */
+@ else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+@ || (_tx_thread_preempt_disable))
+@ {
+@
+ LDR r1, [sp] @ Pickup the saved SPSR
+ MOV r2, #MODE_MASK @ Build mask to isolate the interrupted mode
+ AND r1, r1, r2 @ Isolate mode bits
+ CMP r1, #IRQ_MODE_BITS @ Was an interrupt taken in IRQ mode before we
+ @ got to context save? */
+ BEQ __tx_thread_fiq_no_preempt_restore @ Yes, just go back to point of interrupt
+
+
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup actual current thread pointer
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_restore @ Yes, idle system was interrupted
+
+ LDR r3, =_tx_thread_preempt_disable @ Pickup preempt disable address
+ LDR r2, [r3] @ Pickup actual preempt disable flag
+ CMP r2, #0 @ Is it set?
+ BNE __tx_thread_fiq_no_preempt_restore @ Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr @ Pickup address of execute thread ptr
+ LDR r2, [r3] @ Pickup actual execute thread pointer
+ CMP r0, r2 @ Is the same thread highest priority?
+ BNE __tx_thread_fiq_preempt_restore @ No, preemption needs to happen
+
+
+__tx_thread_fiq_no_preempt_restore:
+@
+@ /* Restore interrupted thread or ISR. */
+@
+@ /* Pickup the saved stack pointer. */
+@ tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+@
+@ /* Recover the saved context and return to the point of interrupt. */
+@
+ LDMIA sp!, {r0, lr} @ Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 @ Put SPSR back
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOVS pc, lr @ Return to point of interrupt
+@
+@ }
+@ else
+@ {
+__tx_thread_fiq_preempt_restore:
+@
+ LDMIA sp!, {r3, lr} @ Recover temporarily saved registers
+ MOV r1, lr @ Save lr (point of interrupt)
+ MOV r2, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR_cxsf, r2 @ Enter SVC mode
+ STR r1, [sp, #-4]! @ Save point of interrupt
+ STMDB sp!, {r4-r12, lr} @ Save upper half of registers
+ MOV r4, r3 @ Save SPSR in r4
+ MOV r2, #FIQ_MODE @ Build FIQ mode CPSR
+ MSR CPSR_cxsf, r2 @ Reenter FIQ mode
+ LDMIA sp!, {r0-r3} @ Recover r0-r3
+ MOV r5, #SVC_MODE @ Build SVC mode CPSR
+ MSR CPSR_cxsf, r5 @ Enter SVC mode
+ STMDB sp!, {r0-r3} @ Save r0-r3 on thread's stack
+ MOV r3, #1 @ Build interrupt stack type
+ STMDB sp!, {r3, r4} @ Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup current thread pointer
+ STR sp, [r0, #8] @ Save stack pointer in thread control
+ @ block */
+ BIC r4, r4, #THUMB_MASK @ Clear the Thumb bit of CPSR
+ ORR r3, r4, #DISABLE_INTS @ Or-in interrupt lockout bit(s)
+ MSR CPSR_cxsf, r3 @ Lockout interrupts
+@
+@ /* Save the remaining time-slice and disable it. */
+@ if (_tx_timer_time_slice)
+@ {
+@
+ LDR r3, =_tx_timer_time_slice @ Pickup time-slice variable address
+ LDR r2, [r3] @ Pickup time-slice
+ CMP r2, #0 @ Is it active?
+ BEQ __tx_thread_fiq_dont_save_ts @ No, don't save it
+@
+@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+@ _tx_timer_time_slice = 0;
+@
+ STR r2, [r0, #24] @ Save thread's time-slice
+ MOV r2, #0 @ Clear value
+ STR r2, [r3] @ Disable global time-slice flag
+@
+@ }
+__tx_thread_fiq_dont_save_ts:
+@
+@
+@ /* Clear the current task pointer. */
+@ _tx_thread_current_ptr = TX_NULL;
+@
+ MOV r0, #0 @ NULL value
+ STR r0, [r1] @ Clear current thread pointer
+@
+@ /* Return to the scheduler. */
+@ _tx_thread_schedule();
+@
+ B _tx_thread_schedule @ Return to scheduler
+@ }
+@
+__tx_thread_fiq_idle_system_restore:
+@
+@ /* Just return back to the scheduler! */
+@
+ ADD sp, sp, #24 @ Recover FIQ stack space
+ MRS r3, CPSR @ Pickup current CPSR
+ BIC r3, r3, #MODE_MASK @ Clear the mode portion of the CPSR
+ ORR r3, r3, #SVC_MODE_BITS @ Or-in new interrupt lockout bit
+ MSR CPSR_cxsf, r3 @ Lockout interrupts
+ B _tx_thread_schedule @ Return to scheduler
+@
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_context_save.S b/ports/arm11/gnu/src/tx_thread_fiq_context_save.S
new file mode 100644
index 00000000..53b12f9b
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_fiq_context_save.S
@@ -0,0 +1,204 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+ .global _tx_thread_system_state
+ .global _tx_thread_current_ptr
+ .global __tx_fiq_processing_return
+ .global _tx_execution_isr_enter
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_fiq_context_save
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_context_save ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@ VOID _tx_thread_fiq_context_save(VOID)
+@{
+ .global _tx_thread_fiq_context_save
+ .type _tx_thread_fiq_context_save,function
+_tx_thread_fiq_context_save:
+@
+@ /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+@ out, we are in IRQ mode, and all registers are intact. */
+@
+@ /* Check for a nested interrupt condition. */
+@ if (_tx_thread_system_state++)
+@ {
+@
+ STMDB sp!, {r0-r3} @ Save some working registers
+ LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
+ LDR r2, [r3] @ Pickup system state
+ CMP r2, #0 @ Is this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_save @ Yes, not a nested context save
+@
+@ /* Nested interrupt condition. */
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3] @ Store it back in the variable
+@
+@ /* Save the rest of the scratch registers on the stack and return to the
+@ calling ISR. */
+@
+ MRS r0, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} @ Store other registers
+@
+@ /* Return to the ISR. */
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ B __tx_fiq_processing_return @ Continue FIQ processing
+@
+__tx_thread_fiq_not_nested_save:
+@ }
+@
+@ /* Otherwise, not nested, check to see if a thread was running. */
+@ else if (_tx_thread_current_ptr)
+@ {
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3] @ Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1] @ Pickup current thread pointer
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_save @ If so, interrupt occurred in
+@ @ scheduling loop - nothing needs saving!
+@
+@ /* Save minimal context of interrupted thread. */
+@
+ MRS r2, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r2, lr} @ Store other registers, Note that we don't
+@ @ need to save sl and ip since FIQ has
+@ @ copies of these registers. Nested
+@ @ interrupt processing does need to save
+@ @ these registers.
+@
+@ /* Save the current stack pointer in the thread's control block. */
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@
+@ /* Switch to the system stack. */
+@ sp = _tx_thread_system_stack_ptr;
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ B __tx_fiq_processing_return @ Continue FIQ processing
+@
+@ }
+@ else
+@ {
+@
+__tx_thread_fiq_idle_system_save:
+@
+@ /* Interrupt occurred in the scheduling loop. */
+@
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+@
+@ /* Not much to do here, save the current SPSR and LR for possible
+@ use in IRQ interrupted in idle system conditions, and return to
+@ FIQ interrupt processing. */
+@
+ MRS r0, SPSR @ Pickup saved SPSR
+ SUB lr, lr, #4 @ Adjust point of interrupt
+ STMDB sp!, {r0, lr} @ Store other registers that will get used
+@ @ or stripped off the stack in context
+@ @ restore
+ B __tx_fiq_processing_return @ Continue FIQ processing
+@
+@ }
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S b/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S
new file mode 100644
index 00000000..cc0d4991
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_fiq_nesting_end.S
@@ -0,0 +1,111 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
+#else
+DISABLE_INTS = 0x80 @ Disable IRQ interrupts
+#endif
+MODE_MASK = 0x1F @ Mode mask
+FIQ_MODE_BITS = 0x11 @ FIQ mode bits
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_fiq_nesting_end
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_end ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+@/* processing from system mode back to FIQ mode prior to the ISR */
+@/* calling _tx_thread_fiq_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_fiq_nesting_end(VOID)
+@{
+ .global _tx_thread_fiq_nesting_end
+ .type _tx_thread_fiq_nesting_end,function
+_tx_thread_fiq_nesting_end:
+ MOV r3,lr @ Save ISR return address
+ MRS r0, CPSR @ Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
+ MSR CPSR_cxsf, r0 @ Disable interrupts
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ @ 8-byte alignment logic)
+ BIC r0, r0, #MODE_MASK @ Clear mode bits
+ ORR r0, r0, #FIQ_MODE_BITS @ Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 @ Reenter IRQ mode
+ MOV pc, r3 @ Return to caller
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S b/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S
new file mode 100644
index 00000000..b9dda19e
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_fiq_nesting_start.S
@@ -0,0 +1,104 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+FIQ_DISABLE = 0x40 @ FIQ disable bit
+MODE_MASK = 0x1F @ Mode mask
+SYS_MODE_BITS = 0x1F @ System mode bits
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_fiq_nesting_start
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_fiq_nesting_start ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is called by the application from FIQ mode after */
+@/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+@/* processing to the system mode so nested FIQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with FIQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_fiq_nesting_start(VOID)
+@{
+ .global _tx_thread_fiq_nesting_start
+ .type _tx_thread_fiq_nesting_start,function
+_tx_thread_fiq_nesting_start:
+ MOV r3,lr @ Save ISR return address
+ MRS r0, CPSR @ Pickup the CPSR
+ BIC r0, r0, #MODE_MASK @ Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS @ Build system mode CPSR
+ MSR CPSR_cxsf, r0 @ Enter system mode
+ STMDB sp!, {r1, lr} @ Push the system mode lr on the system mode stack
+ @ and push r1 just to keep 8-byte alignment
+ BIC r0, r0, #FIQ_DISABLE @ Build enable FIQ CPSR
+ MSR CPSR_cxsf, r0 @ Enter system mode
+ MOV pc, r3 @ Return to caller
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_control.S b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
new file mode 100644
index 00000000..4cf397c9
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_control.S
@@ -0,0 +1,115 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h" */
+@
+
+INT_MASK = 0x03F
+
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_control for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_interrupt_control
+$_tx_thread_interrupt_control:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_interrupt_control @ Call _tx_thread_interrupt_control function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_control ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for changing the interrupt lockout */
+@/* posture of the system. */
+@/* */
+@/* INPUT */
+@/* */
+@/* new_posture New interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@UINT _tx_thread_interrupt_control(UINT new_posture)
+@{
+ .global _tx_thread_interrupt_control
+ .type _tx_thread_interrupt_control,function
+_tx_thread_interrupt_control:
+@
+@ /* Pickup current interrupt lockout posture. */
+@
+ MRS r3, CPSR @ Pickup current CPSR
+ MOV r2, #INT_MASK @ Build interrupt mask
+ AND r1, r3, r2 @ Clear interrupt lockout bits
+ ORR r1, r1, r0 @ Or-in new interrupt lockout bits
+@
+@ /* Apply the new interrupt posture. */
+@
+ MSR CPSR, r1 @ Setup new CPSR
+ BIC r0, r3, r2 @ Return previous interrupt mask
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_disable.S b/ports/arm11/gnu/src/tx_thread_interrupt_disable.S
new file mode 100644
index 00000000..9d460e24
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_disable.S
@@ -0,0 +1,116 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS = 0x80 @ IRQ interrupts disabled
+#endif
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_disable for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_interrupt_disable
+$_tx_thread_interrupt_disable:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_interrupt_disable @ Call _tx_thread_interrupt_disable function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_disable ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for disabling interrupts */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@UINT _tx_thread_interrupt_disable(void)
+@{
+ .global _tx_thread_interrupt_disable
+ .type _tx_thread_interrupt_disable,function
+_tx_thread_interrupt_disable:
+@
+@ /* Pickup current interrupt lockout posture. */
+@
+ MRS r0, CPSR @ Pickup current CPSR
+@
+@ /* Mask interrupts. */
+@
+ ORR r1, r0, #DISABLE_INTS @ Mask interrupts
+ MSR CPSR_cxsf, r1 @ Setup new CPSR
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+
+
diff --git a/ports/arm11/gnu/src/tx_thread_interrupt_restore.S b/ports/arm11/gnu/src/tx_thread_interrupt_restore.S
new file mode 100644
index 00000000..0a06d5ea
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_interrupt_restore.S
@@ -0,0 +1,104 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_interrupt_restore for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_interrupt_restore
+$_tx_thread_interrupt_restore:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_interrupt_restore @ Call _tx_thread_interrupt_restore function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_interrupt_restore ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is responsible for restoring interrupts to the state */
+@/* returned by a previous _tx_thread_interrupt_disable call. */
+@/* */
+@/* INPUT */
+@/* */
+@/* old_posture Old interrupt lockout posture */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* Application Code */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@UINT _tx_thread_interrupt_restore(UINT old_posture)
+@{
+ .global _tx_thread_interrupt_restore
+ .type _tx_thread_interrupt_restore,function
+_tx_thread_interrupt_restore:
+@
+@ /* Apply the new interrupt posture. */
+@
+ MSR CPSR_cxsf, r0 @ Setup new CPSR
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S b/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S
new file mode 100644
index 00000000..3fda4dae
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_irq_nesting_end.S
@@ -0,0 +1,111 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ Disable IRQ/FIQ interrupts
+#else
+DISABLE_INTS = 0x80 @ Disable IRQ interrupts
+#endif
+MODE_MASK = 0x1F @ Mode mask
+IRQ_MODE_BITS = 0x12 @ IRQ mode bits
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_irq_nesting_end
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_end ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+@/* processing from system mode back to IRQ mode prior to the ISR */
+@/* calling _tx_thread_context_restore. Note that this function */
+@/* assumes the system stack pointer is in the same position after */
+@/* nesting start function was called. */
+@/* */
+@/* This function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts disabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_irq_nesting_end(VOID)
+@{
+ .global _tx_thread_irq_nesting_end
+ .type _tx_thread_irq_nesting_end,function
+_tx_thread_irq_nesting_end:
+ MOV r3,lr @ Save ISR return address
+ MRS r0, CPSR @ Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS @ Build disable interrupt value
+ MSR CPSR_cxsf, r0 @ Disable interrupts
+ LDMIA sp!, {r1, lr} @ Pickup saved lr (and r1 throw-away for
+ @ 8-byte alignment logic)
+ BIC r0, r0, #MODE_MASK @ Clear mode bits
+ ORR r0, r0, #IRQ_MODE_BITS @ Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 @ Reenter IRQ mode
+ MOV pc, r3 @ Return to caller
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S b/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S
new file mode 100644
index 00000000..f8e4a134
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_irq_nesting_start.S
@@ -0,0 +1,104 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+IRQ_DISABLE = 0x80 @ IRQ disable bit
+MODE_MASK = 0x1F @ Mode mask
+SYS_MODE_BITS = 0x1F @ System mode bits
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_irq_nesting_start
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_irq_nesting_start ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is called by the application from IRQ mode after */
+@/* _tx_thread_context_save has been called and switches the IRQ */
+@/* processing to the system mode so nested IRQ interrupt processing */
+@/* is possible (system mode has its own "lr" register). Note that */
+@/* this function assumes that the system mode stack pointer was setup */
+@/* during low-level initialization (tx_initialize_low_level.s). */
+@/* */
+@/* This function returns with IRQ interrupts enabled. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_irq_nesting_start(VOID)
+@{
+ .global _tx_thread_irq_nesting_start
+ .type _tx_thread_irq_nesting_start,function
+_tx_thread_irq_nesting_start:
+ MOV r3,lr @ Save ISR return address
+ MRS r0, CPSR @ Pickup the CPSR
+ BIC r0, r0, #MODE_MASK @ Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS @ Build system mode CPSR
+ MSR CPSR_cxsf, r0 @ Enter system mode
+ STMDB sp!, {r1, lr} @ Push the system mode lr on the system mode stack
+ @ and push r1 just to keep 8-byte alignment
+ BIC r0, r0, #IRQ_DISABLE @ Build enable IRQ CPSR
+ MSR CPSR_cxsf, r0 @ Enter system mode
+ MOV pc, r3 @ Return to caller
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_schedule.S b/ports/arm11/gnu/src/tx_thread_schedule.S
new file mode 100644
index 00000000..09692e98
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_schedule.S
@@ -0,0 +1,187 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ENABLE_INTS = 0xC0 @ IRQ & FIQ Interrupts enabled mask
+#else
+ENABLE_INTS = 0x80 @ IRQ Interrupts enabled mask
+#endif
+@
+@
+ .global _tx_thread_execute_ptr
+ .global _tx_thread_current_ptr
+ .global _tx_timer_time_slice
+ .global _tx_execution_thread_enter
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_schedule for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_schedule
+ .type $_tx_thread_schedule,function
+$_tx_thread_schedule:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_schedule @ Call _tx_thread_schedule function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_schedule ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function waits for a thread control block pointer to appear in */
+@/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+@/* in the variable, the corresponding thread is resumed. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_initialize_kernel_enter ThreadX entry function */
+@/* _tx_thread_system_return Return to system from thread */
+@/* _tx_thread_context_restore Restore thread's context */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_schedule(VOID)
+@{
+ .global _tx_thread_schedule
+ .type _tx_thread_schedule,function
+_tx_thread_schedule:
+@
+@ /* Enable interrupts. */
+@
+ MRS r2, CPSR @ Pickup CPSR
+ BIC r0, r2, #ENABLE_INTS @ Clear the disable bit(s)
+ MSR CPSR_cxsf, r0 @ Enable interrupts
+@
+@ /* Wait for a thread to execute. */
+@ do
+@ {
+ LDR r1, =_tx_thread_execute_ptr @ Address of thread execute ptr
+@
+__tx_thread_schedule_loop:
+@
+ LDR r0, [r1] @ Pickup next thread to execute
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_schedule_loop @ If so, keep looking for a thread
+@
+@ }
+@ while(_tx_thread_execute_ptr == TX_NULL);
+@
+@ /* Yes! We have a thread to execute. Lockout interrupts and
+@ transfer control to it. */
+@
+ MSR CPSR_cxsf, r2 @ Disable interrupts
+@
+@ /* Setup the current thread pointer. */
+@ _tx_thread_current_ptr = _tx_thread_execute_ptr;
+@
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread
+ STR r0, [r1] @ Setup current thread pointer
+@
+@ /* Increment the run count for this thread. */
+@ _tx_thread_current_ptr -> tx_thread_run_count++;
+@
+ LDR r2, [r0, #4] @ Pickup run counter
+ LDR r3, [r0, #24] @ Pickup time-slice for this thread
+ ADD r2, r2, #1 @ Increment thread run-counter
+ STR r2, [r0, #4] @ Store the new run counter
+@
+@ /* Setup time-slice, if present. */
+@ _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
+@
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time-slice
+ @ variable
+ LDR sp, [r0, #8] @ Switch stack pointers
+ STR r3, [r2] @ Setup time-slice
+@
+@ /* Switch to the thread's stack. */
+@ sp = _tx_thread_execute_ptr -> tx_thread_stack_ptr;
+@
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the thread entry function to indicate the thread is executing. */
+@
+ BL _tx_execution_thread_enter @ Call the thread execution enter function
+#endif
+@
+@ /* Determine if an interrupt frame or a synchronous task suspension frame
+@ is present. */
+@
+ LDMIA sp!, {r0, r1} @ Pickup the stack type and saved CPSR
+ CMP r0, #0 @ Check for synchronous context switch
+ MSRNE SPSR_cxsf, r1 @ Setup SPSR for return
+ LDMNEIA sp!, {r0-r12, lr, pc}^ @ Return to point of thread interrupt
+ LDMIA sp!, {r4-r11, lr} @ Return to thread synchronously
+ MSR CPSR_cxsf, r1 @ Recover CPSR
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@
+@}
+@
+
diff --git a/ports/arm11/gnu/src/tx_thread_stack_build.S b/ports/arm11/gnu/src/tx_thread_stack_build.S
new file mode 100644
index 00000000..ea34e6c2
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_stack_build.S
@@ -0,0 +1,178 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+ .arm
+
+SVC_MODE = 0x13 @ SVC mode
+#ifdef TX_ENABLE_FIQ_SUPPORT
+CPSR_MASK = 0xDF @ Mask initial CPSR, IRQ & FIQ interrupts enabled
+#else
+CPSR_MASK = 0x9F @ Mask initial CPSR, IRQ interrupts enabled
+#endif
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_stack_build for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .thumb
+ .global $_tx_thread_stack_build
+ .type $_tx_thread_stack_build,function
+$_tx_thread_stack_build:
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_stack_build @ Call _tx_thread_stack_build function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_stack_build ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function builds a stack frame on the supplied thread's stack. */
+@/* The stack frame results in a fake interrupt return to the supplied */
+@/* function pointer. */
+@/* */
+@/* INPUT */
+@/* */
+@/* thread_ptr Pointer to thread control blk */
+@/* function_ptr Pointer to return function */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* _tx_thread_create Create thread service */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
+@{
+ .global _tx_thread_stack_build
+ .type _tx_thread_stack_build,function
+_tx_thread_stack_build:
+@
+@
+@ /* Build a fake interrupt frame. The form of the fake interrupt stack
+@ on theARM11 should look like the following after it is built:
+@
+@ Stack Top: 1 Interrupt stack frame type
+@ CPSR Initial value for CPSR
+@ a1 (r0) Initial value for a1
+@ a2 (r1) Initial value for a2
+@ a3 (r2) Initial value for a3
+@ a4 (r3) Initial value for a4
+@ v1 (r4) Initial value for v1
+@ v2 (r5) Initial value for v2
+@ v3 (r6) Initial value for v3
+@ v4 (r7) Initial value for v4
+@ v5 (r8) Initial value for v5
+@ sb (r9) Initial value for sb
+@ sl (r10) Initial value for sl
+@ fp (r11) Initial value for fp
+@ ip (r12) Initial value for ip
+@ lr (r14) Initial value for lr
+@ pc (r15) Initial value for pc
+@ 0 For stack backtracing
+@
+@ Stack Bottom: (higher memory address) */
+@
+ LDR r2, [r0, #16] @ Pickup end of stack area
+ BIC r2, r2, #7 @ Ensure 8-byte alignment
+ SUB r2, r2, #76 @ Allocate space for the stack frame
+@
+@ /* Actually build the stack frame. */
+@
+ MOV r3, #1 @ Build interrupt stack type
+ STR r3, [r2, #0] @ Store stack type
+ MOV r3, #0 @ Build initial register value
+ STR r3, [r2, #8] @ Store initial r0
+ STR r3, [r2, #12] @ Store initial r1
+ STR r3, [r2, #16] @ Store initial r2
+ STR r3, [r2, #20] @ Store initial r3
+ STR r3, [r2, #24] @ Store initial r4
+ STR r3, [r2, #28] @ Store initial r5
+ STR r3, [r2, #32] @ Store initial r6
+ STR r3, [r2, #36] @ Store initial r7
+ STR r3, [r2, #40] @ Store initial r8
+ STR r3, [r2, #44] @ Store initial r9
+ LDR r3, [r0, #12] @ Pickup stack starting address
+ STR r3, [r2, #48] @ Store initial r10 (sl)
+ LDR r3,=_tx_thread_schedule @ Pickup address of _tx_thread_schedule for GDB backtrace
+ STR r3, [r2, #60] @ Store initial r14 (lr)
+ MOV r3, #0 @ Build initial register value
+ STR r3, [r2, #52] @ Store initial r11
+ STR r3, [r2, #56] @ Store initial r12
+ STR r1, [r2, #64] @ Store initial pc
+ STR r3, [r2, #68] @ 0 for back-trace
+ MRS r1, CPSR @ Pickup CPSR
+ BIC r1, r1, #CPSR_MASK @ Mask mode bits of CPSR
+ ORR r3, r1, #SVC_MODE @ Build CPSR, SVC mode, interrupts enabled
+ STR r3, [r2, #4] @ Store initial CPSR
+@
+@ /* Setup stack pointer. */
+@ thread_ptr -> tx_thread_stack_ptr = r2;
+@
+ STR r2, [r0, #8] @ Save stack pointer in thread's
+ @ control block
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@}
+
+
diff --git a/ports/arm11/gnu/src/tx_thread_system_return.S b/ports/arm11/gnu/src/tx_thread_system_return.S
new file mode 100644
index 00000000..87bef5aa
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_system_return.S
@@ -0,0 +1,167 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@#include "tx_timer.h"
+@
+ .arm
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS = 0x80 @ IRQ interrupts disabled
+#endif
+@
+@
+ .global _tx_thread_current_ptr
+ .global _tx_timer_time_slice
+ .global _tx_thread_schedule
+ .global _tx_execution_thread_exit
+@
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_thread_system_return for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .global $_tx_thread_system_return
+ .type $_tx_thread_system_return,function
+$_tx_thread_system_return:
+ .thumb
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_thread_system_return @ Call _tx_thread_system_return function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_system_return ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function is target processor specific. It is used to transfer */
+@/* control from a thread back to the ThreadX system. Only a */
+@/* minimal context is saved since the compiler assumes temp registers */
+@/* are going to get slicked by a function call anyway. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_schedule Thread scheduling loop */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ThreadX components */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_system_return(VOID)
+@{
+ .global _tx_thread_system_return
+ .type _tx_thread_system_return,function
+_tx_thread_system_return:
+@
+@ /* Save minimal context on the stack. */
+@
+ MOV r0, #0 @ Build a solicited stack type
+ MRS r1, CPSR @ Pickup the CPSR
+ STMDB sp!, {r0-r1, r4-r11, lr} @ Save minimal context
+@
+@ /* Lockout interrupts. */
+@
+ ORR r2, r1, #DISABLE_INTS @ Build disable interrupt CPSR
+ MSR CPSR_cxsf, r2 @ Disable interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the thread exit function to indicate the thread is no longer executing. */
+@
+ BL _tx_execution_thread_exit @ Call the thread exit function
+#endif
+ LDR r3, =_tx_thread_current_ptr @ Pickup address of current ptr
+ LDR r0, [r3] @ Pickup current thread pointer
+ LDR r2, =_tx_timer_time_slice @ Pickup address of time slice
+ LDR r1, [r2] @ Pickup current time slice
+@
+@ /* Save current stack and switch to system stack. */
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@ sp = _tx_thread_system_stack_ptr;
+@
+ STR sp, [r0, #8] @ Save thread stack pointer
+@
+@ /* Determine if the time-slice is active. */
+@ if (_tx_timer_time_slice)
+@ {
+@
+ MOV r4, #0 @ Build clear value
+ CMP r1, #0 @ Is a time-slice active?
+ BEQ __tx_thread_dont_save_ts @ No, don't save the time-slice
+@
+@ /* Save time-slice for the thread and clear the current time-slice. */
+@ _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+@ _tx_timer_time_slice = 0;
+@
+ STR r4, [r2] @ Clear time-slice
+ STR r1, [r0, #24] @ Save current time-slice
+@
+@ }
+__tx_thread_dont_save_ts:
+@
+@ /* Clear the current thread pointer. */
+@ _tx_thread_current_ptr = TX_NULL;
+@
+ STR r4, [r3] @ Clear current thread pointer
+ B _tx_thread_schedule @ Jump to scheduler!
+@
+@}
+
diff --git a/ports/arm11/gnu/src/tx_thread_vectored_context_save.S b/ports/arm11/gnu/src/tx_thread_vectored_context_save.S
new file mode 100644
index 00000000..3ac517ac
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_thread_vectored_context_save.S
@@ -0,0 +1,199 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Thread */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_thread.h"
+@
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS = 0xC0 @ IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS = 0x80 @ IRQ interrupts disabled
+#endif
+@
+@
+ .global _tx_thread_system_state
+ .global _tx_thread_current_ptr
+ .global _tx_execution_isr_enter
+@
+@
+@
+@/* No 16-bit Thumb mode veneer code is needed for _tx_thread_vectored_context_save
+@ since it will never be called 16-bit mode. */
+@
+ .arm
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_thread_vectored_context_save ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function saves the context of an executing thread in the */
+@/* beginning of interrupt processing. The function also ensures that */
+@/* the system stack is used upon return to the calling ISR. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* None */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* ISRs */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_thread_vectored_context_save(VOID)
+@{
+ .global _tx_thread_vectored_context_save
+ .type _tx_thread_vectored_context_save,function
+_tx_thread_vectored_context_save:
+@
+@ /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+@ out, we are in IRQ mode, and all registers are intact. */
+@
+@ /* Check for a nested interrupt condition. */
+@ if (_tx_thread_system_state++)
+@ {
+@
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR @ Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS @ Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 @ Disable interrupts
+#endif
+ LDR r3, =_tx_thread_system_state @ Pickup address of system state variable
+ LDR r2, [r3, #0] @ Pickup system state
+ CMP r2, #0 @ Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save @ Yes, not a nested context save
+@
+@ /* Nested interrupt condition. */
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3, #0] @ Store it back in the variable
+@
+@ /* Note: Minimal context of interrupted thread is already saved. */
+@
+@ /* Return to the ISR. */
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ MOV pc, lr @ Return to caller
+@
+__tx_thread_not_nested_save:
+@ }
+@
+@ /* Otherwise, not nested, check to see if a thread was running. */
+@ else if (_tx_thread_current_ptr)
+@ {
+@
+ ADD r2, r2, #1 @ Increment the interrupt counter
+ STR r2, [r3, #0] @ Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr @ Pickup address of current thread ptr
+ LDR r0, [r1, #0] @ Pickup current thread pointer
+ CMP r0, #0 @ Is it NULL?
+ BEQ __tx_thread_idle_system_save @ If so, interrupt occurred in
+ @ scheduling loop - nothing needs saving!
+@
+@ /* Note: Minimal context of interrupted thread is already saved. */
+@
+@ /* Save the current stack pointer in the thread's control block. */
+@ _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+@
+@ /* Switch to the system stack. */
+@ sp = _tx_thread_system_stack_ptr;
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ MOV pc, lr @ Return to caller
+@
+@ }
+@ else
+@ {
+@
+__tx_thread_idle_system_save:
+@
+@ /* Interrupt occurred in the scheduling loop. */
+@
+@ /* Not much to do here, just adjust the stack pointer, and return to IRQ
+@ processing. */
+@
+ MOV r10, #0 @ Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+@
+@ /* Call the ISR enter function to indicate an ISR is executing. */
+@
+ PUSH {lr} @ Save ISR lr
+ BL _tx_execution_isr_enter @ Call the ISR enter function
+ POP {lr} @ Recover ISR lr
+#endif
+
+ ADD sp, sp, #32 @ Recover saved registers
+ MOV pc, lr @ Return to caller
+@
+@ }
+@}
+
diff --git a/ports/arm11/gnu/src/tx_timer_interrupt.S b/ports/arm11/gnu/src/tx_timer_interrupt.S
new file mode 100644
index 00000000..60632a32
--- /dev/null
+++ b/ports/arm11/gnu/src/tx_timer_interrupt.S
@@ -0,0 +1,279 @@
+@/**************************************************************************/
+@/* */
+@/* Copyright (c) Microsoft Corporation. All rights reserved. */
+@/* */
+@/* This software is licensed under the Microsoft Software License */
+@/* Terms for Microsoft Azure RTOS. Full text of the license can be */
+@/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
+@/* and in the root directory of this software. */
+@/* */
+@/**************************************************************************/
+@
+@
+@/**************************************************************************/
+@/**************************************************************************/
+@/** */
+@/** ThreadX Component */
+@/** */
+@/** Timer */
+@/** */
+@/**************************************************************************/
+@/**************************************************************************/
+@
+@#define TX_SOURCE_CODE
+@
+@
+@/* Include necessary system files. */
+@
+@#include "tx_api.h"
+@#include "tx_timer.h"
+@#include "tx_thread.h"
+@
+@
+ .arm
+
+@
+@/* Define Assembly language external references... */
+@
+ .global _tx_timer_time_slice
+ .global _tx_timer_system_clock
+ .global _tx_timer_current_ptr
+ .global _tx_timer_list_start
+ .global _tx_timer_list_end
+ .global _tx_timer_expired_time_slice
+ .global _tx_timer_expired
+ .global _tx_thread_time_slice
+@
+@
+@
+@/* Define the 16-bit Thumb mode veneer for _tx_timer_interrupt for
+@ applications calling this function from to 16-bit Thumb mode. */
+@
+ .text
+ .align 2
+ .thumb
+ .global $_tx_timer_interrupt
+ .type $_tx_timer_interrupt,function
+$_tx_timer_interrupt:
+ BX pc @ Switch to 32-bit mode
+ NOP @
+ .arm
+ STMFD sp!, {lr} @ Save return address
+ BL _tx_timer_interrupt @ Call _tx_timer_interrupt function
+ LDMFD sp!, {lr} @ Recover saved return address
+ BX lr @ Return to 16-bit caller
+@
+@
+ .text
+ .align 2
+@/**************************************************************************/
+@/* */
+@/* FUNCTION RELEASE */
+@/* */
+@/* _tx_timer_interrupt ARM11/GNU */
+@/* 6.0.1 */
+@/* AUTHOR */
+@/* */
+@/* William E. Lamie, Microsoft Corporation */
+@/* */
+@/* DESCRIPTION */
+@/* */
+@/* This function processes the hardware timer interrupt. This */
+@/* processing includes incrementing the system clock and checking for */
+@/* time slice and/or timer expiration. If either is found, the */
+@/* interrupt context save/restore functions are called along with the */
+@/* expiration functions. */
+@/* */
+@/* INPUT */
+@/* */
+@/* None */
+@/* */
+@/* OUTPUT */
+@/* */
+@/* None */
+@/* */
+@/* CALLS */
+@/* */
+@/* _tx_thread_time_slice Time slice interrupted thread */
+@/* _tx_timer_expiration_process Timer expiration processing */
+@/* */
+@/* CALLED BY */
+@/* */
+@/* interrupt vector */
+@/* */
+@/* RELEASE HISTORY */
+@/* */
+@/* DATE NAME DESCRIPTION */
+@/* */
+@/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+@/* */
+@/**************************************************************************/
+@VOID _tx_timer_interrupt(VOID)
+@{
+ .global _tx_timer_interrupt
+ .type _tx_timer_interrupt,function
+_tx_timer_interrupt:
+@
+@ /* Upon entry to this routine, it is assumed that context save has already
+@ been called, and therefore the compiler scratch registers are available
+@ for use. */
+@
+@ /* Increment the system clock. */
+@ _tx_timer_system_clock++;
+@
+ LDR r1, =_tx_timer_system_clock @ Pickup address of system clock
+ LDR r0, [r1] @ Pickup system clock
+ ADD r0, r0, #1 @ Increment system clock
+ STR r0, [r1] @ Store new system clock
+@
+@ /* Test for time-slice expiration. */
+@ if (_tx_timer_time_slice)
+@ {
+@
+ LDR r3, =_tx_timer_time_slice @ Pickup address of time-slice
+ LDR r2, [r3] @ Pickup time-slice
+ CMP r2, #0 @ Is it non-active?
+ BEQ __tx_timer_no_time_slice @ Yes, skip time-slice processing
+@
+@ /* Decrement the time_slice. */
+@ _tx_timer_time_slice--;
+@
+ SUB r2, r2, #1 @ Decrement the time-slice
+ STR r2, [r3] @ Store new time-slice value
+@
+@ /* Check for expiration. */
+@ if (__tx_timer_time_slice == 0)
+@
+ CMP r2, #0 @ Has it expired?
+ BNE __tx_timer_no_time_slice @ No, skip expiration processing
+@
+@ /* Set the time-slice expired flag. */
+@ _tx_timer_expired_time_slice = TX_TRUE;
+@
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of expired flag
+ MOV r0, #1 @ Build expired value
+ STR r0, [r3] @ Set time-slice expiration flag
+@
+@ }
+@
+__tx_timer_no_time_slice:
+@
+@ /* Test for timer expiration. */
+@ if (*_tx_timer_current_ptr)
+@ {
+@
+ LDR r1, =_tx_timer_current_ptr @ Pickup current timer pointer address
+ LDR r0, [r1] @ Pickup current timer
+ LDR r2, [r0] @ Pickup timer list entry
+ CMP r2, #0 @ Is there anything in the list?
+ BEQ __tx_timer_no_timer @ No, just increment the timer
+@
+@ /* Set expiration flag. */
+@ _tx_timer_expired = TX_TRUE;
+@
+ LDR r3, =_tx_timer_expired @ Pickup expiration flag address
+ MOV r2, #1 @ Build expired value
+ STR r2, [r3] @ Set expired flag
+ B __tx_timer_done @ Finished timer processing
+@
+@ }
+@ else
+@ {
+__tx_timer_no_timer:
+@
+@ /* No timer expired, increment the timer pointer. */
+@ _tx_timer_current_ptr++;
+@
+ ADD r0, r0, #4 @ Move to next timer
+@
+@ /* Check for wraparound. */
+@ if (_tx_timer_current_ptr == _tx_timer_list_end)
+@
+ LDR r3, =_tx_timer_list_end @ Pickup address of timer list end
+ LDR r2, [r3] @ Pickup list end
+ CMP r0, r2 @ Are we at list end?
+ BNE __tx_timer_skip_wrap @ No, skip wraparound logic
+@
+@ /* Wrap to beginning of list. */
+@ _tx_timer_current_ptr = _tx_timer_list_start;
+@
+ LDR r3, =_tx_timer_list_start @ Pickup address of timer list start
+ LDR r0, [r3] @ Set current pointer to list start
+@
+__tx_timer_skip_wrap:
+@
+ STR r0, [r1] @ Store new current timer pointer
+@ }
+@
+__tx_timer_done:
+@
+@
+@ /* See if anything has expired. */
+@ if ((_tx_timer_expired_time_slice) || (_tx_timer_expired))
+@ {
+@
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of expired flag
+ LDR r2, [r3] @ Pickup time-slice expired flag
+ CMP r2, #0 @ Did a time-slice expire?
+ BNE __tx_something_expired @ If non-zero, time-slice expired
+ LDR r1, =_tx_timer_expired @ Pickup address of other expired flag
+ LDR r0, [r1] @ Pickup timer expired flag
+ CMP r0, #0 @ Did a timer expire?
+ BEQ __tx_timer_nothing_expired @ No, nothing expired
+@
+__tx_something_expired:
+@
+@
+ STMDB sp!, {r0, lr} @ Save the lr register on the stack
+ @ and save r0 just to keep 8-byte alignment
+@
+@ /* Did a timer expire? */
+@ if (_tx_timer_expired)
+@ {
+@
+ LDR r1, =_tx_timer_expired @ Pickup address of expired flag
+ LDR r0, [r1] @ Pickup timer expired flag
+ CMP r0, #0 @ Check for timer expiration
+ BEQ __tx_timer_dont_activate @ If not set, skip timer activation
+@
+@ /* Process timer expiration. */
+@ _tx_timer_expiration_process();
+@
+ BL _tx_timer_expiration_process @ Call the timer expiration handling routine
+@
+@ }
+__tx_timer_dont_activate:
+@
+@ /* Did time slice expire? */
+@ if (_tx_timer_expired_time_slice)
+@ {
+@
+ LDR r3, =_tx_timer_expired_time_slice @ Pickup address of time-slice expired
+ LDR r2, [r3] @ Pickup the actual flag
+ CMP r2, #0 @ See if the flag is set
+ BEQ __tx_timer_not_ts_expiration @ No, skip time-slice processing
+@
+@ /* Time slice interrupted thread. */
+@ _tx_thread_time_slice();
+@
+ BL _tx_thread_time_slice @ Call time-slice processing
+@
+@ }
+@
+__tx_timer_not_ts_expiration:
+@
+ LDMIA sp!, {r0, lr} @ Recover lr register (r0 is just there for
+ @ the 8-byte stack alignment
+@
+@ }
+@
+__tx_timer_nothing_expired:
+@
+#ifdef __THUMB_INTERWORK
+ BX lr @ Return to caller
+#else
+ MOV pc, lr @ Return to caller
+#endif
+@
+@}
+
diff --git a/ports/arm11/iar/example_build/azure_rtos.eww b/ports/arm11/iar/example_build/azure_rtos.eww
new file mode 100644
index 00000000..17e0d329
--- /dev/null
+++ b/ports/arm11/iar/example_build/azure_rtos.eww
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<workspace>
+ <project>
+ <path>$WS_DIR$\sample_threadx.ewp</path>
+ </project>
+ <project>
+ <path>$WS_DIR$\tx.ewp</path>
+ </project>
+ <batchBuild/>
+</workspace>
+
+
diff --git a/ports/arm11/iar/example_build/cstartup.s b/ports/arm11/iar/example_build/cstartup.s
new file mode 100644
index 00000000..b95efc0e
--- /dev/null
+++ b/ports/arm11/iar/example_build/cstartup.s
@@ -0,0 +1,161 @@
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; Part one of the system initialization code,
+;; contains low-level
+;; initialization.
+;;
+;; Copyright 2007 IAR Systems. All rights reserved.
+;;
+;; $Revision: 14520 $
+;;
+
+ MODULE ?cstartup
+
+ ;; Forward declaration of sections.
+ SECTION IRQ_STACK:DATA:NOROOT(3)
+ SECTION FIQ_STACK:DATA:NOROOT(3)
+ SECTION CSTACK:DATA:NOROOT(3)
+
+;
+; The module in this file are included in the libraries, and may be
+; replaced by any user-defined modules that define the PUBLIC symbol
+; __iar_program_start or a user defined start symbol.
+;
+; To override the cstartup defined in the library, simply add your
+; modified version to the workbench project.
+
+ SECTION .intvec:CODE:NOROOT(2)
+
+ PUBLIC __vector
+ PUBLIC __vector_0x14
+ PUBLIC __iar_program_start
+ EXTERN __tx_undefined
+ EXTERN __tx_swi_interrupt
+ EXTERN __tx_prefetch_handler
+ EXTERN __tx_abort_handler
+ EXTERN __tx_irq_handler
+ EXTERN __tx_fiq_handler
+
+ ARM
+__vector:
+ ; All default exception handlers (except reset) are
+ ; defined as weak symbol definitions.
+ ; If a handler is defined by the application it will take precedence.
+ LDR PC,Reset_Addr ; Reset
+ LDR PC,Undefined_Addr ; Undefined instructions
+ LDR PC,SWI_Addr ; Software interrupt (SWI/SVC)
+ LDR PC,Prefetch_Addr ; Prefetch abort
+ LDR PC,Abort_Addr ; Data abort
+__vector_0x14:
+ DCD 0 ; RESERVED
+ LDR PC,IRQ_Addr ; IRQ
+ LDR PC,FIQ_Addr ; FIQ
+
+Reset_Addr: DCD __iar_program_start
+Undefined_Addr: DCD __tx_undefined
+SWI_Addr: DCD __tx_swi_interrupt
+Prefetch_Addr: DCD __tx_prefetch_handler
+Abort_Addr: DCD __tx_abort_handler
+IRQ_Addr: DCD __tx_irq_handler
+FIQ_Addr: DCD __tx_fiq_handler
+
+; --------------------------------------------------
+; ?cstartup -- low-level system initialization code.
+;
+; After a reser execution starts here, the mode is ARM, supervisor
+; with interrupts disabled.
+;
+
+
+
+ SECTION .text:CODE:NOROOT(2)
+
+; PUBLIC ?cstartup
+ EXTERN ?main
+ REQUIRE __vector
+
+ ARM
+
+__iar_program_start:
+?cstartup:
+
+;
+; Add initialization needed before setup of stackpointers here.
+;
+
+;
+; Initialize the stack pointers.
+; The pattern below can be used for any of the exception stacks:
+; FIQ, IRQ, SVC, ABT, UND, SYS.
+; The USR mode uses the same stack as SYS.
+; The stack segments must be defined in the linker command file,
+; and be declared above.
+;
+
+
+; --------------------
+; Mode, correspords to bits 0-5 in CPSR
+
+MODE_MSK DEFINE 0x1F ; Bit mask for mode bits in CPSR
+
+USR_MODE DEFINE 0x10 ; User mode
+FIQ_MODE DEFINE 0x11 ; Fast Interrupt Request mode
+IRQ_MODE DEFINE 0x12 ; Interrupt Request mode
+SVC_MODE DEFINE 0x13 ; Supervisor mode
+ABT_MODE DEFINE 0x17 ; Abort mode
+UND_MODE DEFINE 0x1B ; Undefined Instruction mode
+SYS_MODE DEFINE 0x1F ; System mode
+
+
+ MRS r0, cpsr ; Original PSR value
+
+ ;; Set up the interrupt stack pointer.
+
+ BIC r0, r0, #MODE_MSK ; Clear the mode bits
+ ORR r0, r0, #IRQ_MODE ; Set IRQ mode bits
+ MSR cpsr_c, r0 ; Change the mode
+ LDR sp, =SFE(IRQ_STACK) ; End of IRQ_STACK
+
+ ;; Set up the fast interrupt stack pointer.
+
+ BIC r0, r0, #MODE_MSK ; Clear the mode bits
+ ORR r0, r0, #FIQ_MODE ; Set FIR mode bits
+ MSR cpsr_c, r0 ; Change the mode
+ LDR sp, =SFE(FIQ_STACK) ; End of FIQ_STACK
+
+ ;; Set up the normal stack pointer.
+
+ BIC r0 ,r0, #MODE_MSK ; Clear the mode bits
+ ORR r0 ,r0, #SYS_MODE ; Set System mode bits
+ MSR cpsr_c, r0 ; Change the mode
+ LDR sp, =SFE(CSTACK) ; End of CSTACK
+
+#ifdef __ARMVFP__
+ ;; Enable the VFP coprocessor.
+
+ MOV r0, #0x40000000 ; Set EN bit in VFP
+ FMXR fpexc, r0 ; FPEXC, clear others.
+
+;
+; Disable underflow exceptions by setting flush to zero mode.
+; For full IEEE 754 underflow compliance this code should be removed
+; and the appropriate exception handler installed.
+;
+
+ MOV r0, #0x01000000 ; Set FZ bit in VFP
+ FMXR fpscr, r0 ; FPSCR, clear others.
+#endif
+
+;
+; Add more initialization here
+;
+
+; Continue to ?main for C-level initialization.
+
+ B ?main
+
+ END
+
+
+
diff --git a/ports/arm11/iar/example_build/sample_threadx.c b/ports/arm11/iar/example_build/sample_threadx.c
new file mode 100644
index 00000000..a57d908d
--- /dev/null
+++ b/ports/arm11/iar/example_build/sample_threadx.c
@@ -0,0 +1,374 @@
+/* This is a small demo of the high-performance ThreadX kernel. It includes examples of eight
+ threads of different priorities, using a message queue, semaphore, mutex, event flags group,
+ byte pool, and block pool. */
+
+#include "tx_api.h"
+
+#define DEMO_STACK_SIZE 1024
+#define DEMO_BYTE_POOL_SIZE 9120
+#define DEMO_BLOCK_POOL_SIZE 100
+#define DEMO_QUEUE_SIZE 100
+
+
+/* Define the ThreadX object control blocks... */
+
+TX_THREAD thread_0;
+TX_THREAD thread_1;
+TX_THREAD thread_2;
+TX_THREAD thread_3;
+TX_THREAD thread_4;
+TX_THREAD thread_5;
+TX_THREAD thread_6;
+TX_THREAD thread_7;
+TX_QUEUE queue_0;
+TX_SEMAPHORE semaphore_0;
+TX_MUTEX mutex_0;
+TX_EVENT_FLAGS_GROUP event_flags_0;
+TX_BYTE_POOL byte_pool_0;
+TX_BLOCK_POOL block_pool_0;
+
+
+/* Define byte pool memory. */
+
+UCHAR byte_pool_memory[DEMO_BYTE_POOL_SIZE];
+
+
+/* Define the counters used in the demo application... */
+
+ULONG thread_0_counter;
+ULONG thread_1_counter;
+ULONG thread_1_messages_sent;
+ULONG thread_2_counter;
+ULONG thread_2_messages_received;
+ULONG thread_3_counter;
+ULONG thread_4_counter;
+ULONG thread_5_counter;
+ULONG thread_6_counter;
+ULONG thread_7_counter;
+
+
+/* Define thread prototypes. */
+
+void thread_0_entry(ULONG thread_input);
+void thread_1_entry(ULONG thread_input);
+void thread_2_entry(ULONG thread_input);
+void thread_3_and_4_entry(ULONG thread_input);
+void thread_5_entry(ULONG thread_input);
+void thread_6_and_7_entry(ULONG thread_input);
+
+
+/* Define main entry point. */
+
+int main()
+{
+
+ /* Enter the ThreadX kernel. */
+ tx_kernel_enter();
+}
+
+
+/* Define what the initial system looks like. */
+
+void tx_application_define(void *first_unused_memory)
+{
+
+CHAR *pointer;
+
+
+ /* Create a byte memory pool from which to allocate the thread stacks. */
+ tx_byte_pool_create(&byte_pool_0, "byte pool 0", byte_pool_memory, DEMO_BYTE_POOL_SIZE);
+
+ /* Put system definition stuff in here, e.g. thread creates and other assorted
+ create information. */
+
+ /* Allocate the stack for thread 0. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create the main thread. */
+ tx_thread_create(&thread_0, "thread 0", thread_0_entry, 0,
+ pointer, DEMO_STACK_SIZE,
+ 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+
+ /* Allocate the stack for thread 1. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 1 and 2. These threads pass information through a ThreadX
+ message queue. It is also interesting to note that these threads have a time
+ slice. */
+ tx_thread_create(&thread_1, "thread 1", thread_1_entry, 1,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 2. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_2, "thread 2", thread_2_entry, 2,
+ pointer, DEMO_STACK_SIZE,
+ 16, 16, 4, TX_AUTO_START);
+
+ /* Allocate the stack for thread 3. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 3 and 4. These threads compete for a ThreadX counting semaphore.
+ An interesting thing here is that both threads share the same instruction area. */
+ tx_thread_create(&thread_3, "thread 3", thread_3_and_4_entry, 3,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 4. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_4, "thread 4", thread_3_and_4_entry, 4,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 5. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create thread 5. This thread simply pends on an event flag which will be set
+ by thread_0. */
+ tx_thread_create(&thread_5, "thread 5", thread_5_entry, 5,
+ pointer, DEMO_STACK_SIZE,
+ 4, 4, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 6. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ /* Create threads 6 and 7. These threads compete for a ThreadX mutex. */
+ tx_thread_create(&thread_6, "thread 6", thread_6_and_7_entry, 6,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the stack for thread 7. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_STACK_SIZE, TX_NO_WAIT);
+
+ tx_thread_create(&thread_7, "thread 7", thread_6_and_7_entry, 7,
+ pointer, DEMO_STACK_SIZE,
+ 8, 8, TX_NO_TIME_SLICE, TX_AUTO_START);
+
+ /* Allocate the message queue. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_QUEUE_SIZE*sizeof(ULONG), TX_NO_WAIT);
+
+ /* Create the message queue shared by threads 1 and 2. */
+ tx_queue_create(&queue_0, "queue 0", TX_1_ULONG, pointer, DEMO_QUEUE_SIZE*sizeof(ULONG));
+
+ /* Create the semaphore used by threads 3 and 4. */
+ tx_semaphore_create(&semaphore_0, "semaphore 0", 1);
+
+ /* Create the event flags group used by threads 1 and 5. */
+ tx_event_flags_create(&event_flags_0, "event flags 0");
+
+ /* Create the mutex used by thread 6 and 7 without priority inheritance. */
+ tx_mutex_create(&mutex_0, "mutex 0", TX_NO_INHERIT);
+
+ /* Allocate the memory for a small block pool. */
+ tx_byte_allocate(&byte_pool_0, (VOID **) &pointer, DEMO_BLOCK_POOL_SIZE, TX_NO_WAIT);
+
+ /* Create a block memory pool to allocate a message buffer from. */
+ tx_block_pool_create(&block_pool_0, "block pool 0", sizeof(ULONG), pointer, DEMO_BLOCK_POOL_SIZE);
+
+ /* Allocate a block and release the block memory. */
+ tx_block_allocate(&block_pool_0, (VOID **) &pointer, TX_NO_WAIT);
+
+ /* Release the block back to the pool. */
+ tx_block_release(pointer);
+}
+
+
+
+/* Define the test threads. */
+
+void thread_0_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sits in while-forever-sleep loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_0_counter++;
+
+ /* Sleep for 10 ticks. */
+ tx_thread_sleep(10);
+
+ /* Set event flag 0 to wakeup thread 5. */
+ status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_1_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This thread simply sends messages to a queue shared by thread 2. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_1_counter++;
+
+ /* Send message to queue 0. */
+ status = tx_queue_send(&queue_0, &thread_1_messages_sent, TX_WAIT_FOREVER);
+
+ /* Check completion status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Increment the message sent. */
+ thread_1_messages_sent++;
+ }
+}
+
+
+void thread_2_entry(ULONG thread_input)
+{
+
+ULONG received_message;
+UINT status;
+
+ /* This thread retrieves messages placed on the queue by thread 1. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_2_counter++;
+
+ /* Retrieve a message from the queue. */
+ status = tx_queue_receive(&queue_0, &received_message, TX_WAIT_FOREVER);
+
+ /* Check completion status and make sure the message is what we
+ expected. */
+ if ((status != TX_SUCCESS) || (received_message != thread_2_messages_received))
+ break;
+
+ /* Otherwise, all is okay. Increment the received message count. */
+ thread_2_messages_received++;
+ }
+}
+
+
+void thread_3_and_4_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 3 and thread 4. As the loop
+ below shows, these function compete for ownership of semaphore_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 3)
+ thread_3_counter++;
+ else
+ thread_4_counter++;
+
+ /* Get the semaphore with suspension. */
+ status = tx_semaphore_get(&semaphore_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the semaphore. */
+ tx_thread_sleep(2);
+
+ /* Release the semaphore. */
+ status = tx_semaphore_put(&semaphore_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
+
+
+void thread_5_entry(ULONG thread_input)
+{
+
+UINT status;
+ULONG actual_flags;
+
+
+ /* This thread simply waits for an event in a forever loop. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ thread_5_counter++;
+
+ /* Wait for event flag 0. */
+ status = tx_event_flags_get(&event_flags_0, 0x1, TX_OR_CLEAR,
+ &actual_flags, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if ((status != TX_SUCCESS) || (actual_flags != 0x1))
+ break;
+ }
+}
+
+
+void thread_6_and_7_entry(ULONG thread_input)
+{
+
+UINT status;
+
+
+ /* This function is executed from thread 6 and thread 7. As the loop
+ below shows, these function compete for ownership of mutex_0. */
+ while(1)
+ {
+
+ /* Increment the thread counter. */
+ if (thread_input == 6)
+ thread_6_counter++;
+ else
+ thread_7_counter++;
+
+ /* Get the mutex with suspension. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Get the mutex again with suspension. This shows
+ that an owning thread may retrieve the mutex it
+ owns multiple times. */
+ status = tx_mutex_get(&mutex_0, TX_WAIT_FOREVER);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Sleep for 2 ticks to hold the mutex. */
+ tx_thread_sleep(2);
+
+ /* Release the mutex. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+
+ /* Release the mutex again. This will actually
+ release ownership since it was obtained twice. */
+ status = tx_mutex_put(&mutex_0);
+
+ /* Check status. */
+ if (status != TX_SUCCESS)
+ break;
+ }
+}
diff --git a/ports/arm11/iar/example_build/sample_threadx.ewd b/ports/arm11/iar/example_build/sample_threadx.ewd
new file mode 100644
index 00000000..572d1f45
--- /dev/null
+++ b/ports/arm11/iar/example_build/sample_threadx.ewd
@@ -0,0 +1,2974 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>32</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>ARMSIM_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>8.50.1.24770</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCoresSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreAMPConfigType</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreSessionFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCTpiuBaseOption</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>JLinkSpeed</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>NULINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>7</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUseServerSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkProbeList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>Browse to your third-party driver</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVccEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>OCXDSDigitalStatesConfigFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8b.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8bBE.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>1</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>32</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>ARMSIM_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state></state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCoresSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreAMPConfigType</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreSessionFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCTpiuBaseOption</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>JLinkSpeed</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>NULINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>7</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUseServerSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkProbeList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>Browse to your third-party driver</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVccEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>OCXDSDigitalStatesConfigFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8b.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8bBE.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/ports/arm11/iar/example_build/sample_threadx.ewp b/ports/arm11/iar/example_build/sample_threadx.ewp
new file mode 100644
index 00000000..40280bd5
--- /dev/null
+++ b/ports/arm11/iar/example_build/sample_threadx.ewp
@@ -0,0 +1,2136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>31</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Debug\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Debug\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Debug\List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting, without multibyte support.</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting, without multibyte support.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.50.1.24770</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>LPC2106 Philips LPC2106</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>LPC2106 Philips LPC2106</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZoneModes</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>36</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>00000000</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$\..\inc</state>
+ <state>$PROJ_DIR$\..\..\..\..\common\inc</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OICompilerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCStackProtection</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state>sample_threadx.srec</state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>sample_threadx.out</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>$PROJ_DIR$\sample_threadx.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state>__iar_program_start</state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkTrustzoneImportLibraryOut</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>OILinkExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>31</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Release\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Release\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Release\List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state></state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.11.2.13604</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>LPC2106 Philips LPC2106</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>LPC2106 Philips LPC2106</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZoneModes</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>36</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>11111100</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OICompilerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCStackProtection</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>AOutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>lnk0t.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkTrustzoneImportLibraryOut</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>OILinkExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <group>
+ <name>Common sources</name>
+ <file>
+ <name>$PROJ_DIR$\cstartup.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\sample_threadx.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\Debug\Exe\tx.a</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_api.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_initialize_low_level.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_port.h</name>
+ </file>
+ </group>
+</project>
diff --git a/ports/arm11/iar/example_build/sample_threadx.ewt b/ports/arm11/iar/example_build/sample_threadx.ewt
new file mode 100644
index 00000000..a30fa4d3
--- /dev/null
+++ b/ports/arm11/iar/example_build/sample_threadx.ewt
@@ -0,0 +1,2797 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-STAT</name>
+ <archiveVersion>263</archiveVersion>
+ <data>
+ <version>263</version>
+ <cstatargs>
+ <useExtraArgs>0</useExtraArgs>
+ <extraArgs></extraArgs>
+ <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+ <analyzeTimeout>600</analyzeTimeout>
+ <enableParallel>0</enableParallel>
+ <parallelThreads>2</parallelThreads>
+ <enableFalsePositives>0</enableFalsePositives>
+ <messagesLimitEnabled>1</messagesLimitEnabled>
+ <messagesLimit>100</messagesLimit>
+ </cstatargs>
+ <cstat_settings>
+ <cstat_version>1.7.0</cstat_version>
+ <checks_tree>
+ <package enabled="true" name="STDCHECKS">
+ <group enabled="true" name="ARR">
+ <check enabled="true" name="ARR-inv-index-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr" />
+ <check enabled="true" name="ARR-inv-index" />
+ <check enabled="true" name="ARR-neg-index" />
+ <check enabled="true" name="ARR-uninit-index" />
+ </group>
+ <group enabled="true" name="ATH">
+ <check enabled="true" name="ATH-cmp-float" />
+ <check enabled="true" name="ATH-cmp-unsign-neg" />
+ <check enabled="true" name="ATH-cmp-unsign-pos" />
+ <check enabled="true" name="ATH-div-0-assign" />
+ <check enabled="false" name="ATH-div-0-cmp-aft" />
+ <check enabled="true" name="ATH-div-0-cmp-bef" />
+ <check enabled="true" name="ATH-div-0-interval" />
+ <check enabled="true" name="ATH-div-0-pos" />
+ <check enabled="true" name="ATH-div-0-unchk-global" />
+ <check enabled="true" name="ATH-div-0-unchk-local" />
+ <check enabled="true" name="ATH-div-0-unchk-param" />
+ <check enabled="true" name="ATH-div-0" />
+ <check enabled="true" name="ATH-inc-bool" />
+ <check enabled="true" name="ATH-malloc-overrun" />
+ <check enabled="true" name="ATH-neg-check-nonneg" />
+ <check enabled="true" name="ATH-neg-check-pos" />
+ <check enabled="true" name="ATH-new-overrun" />
+ <check enabled="false" name="ATH-overflow-cast" />
+ <check enabled="true" name="ATH-overflow" />
+ <check enabled="true" name="ATH-shift-bounds" />
+ <check enabled="true" name="ATH-shift-neg" />
+ <check enabled="true" name="ATH-sizeof-by-sizeof" />
+ </group>
+ <group enabled="true" name="CAST">
+ <check enabled="false" name="CAST-old-style" />
+ </group>
+ <group enabled="true" name="CATCH">
+ <check enabled="true" name="CATCH-object-slicing" />
+ <check enabled="false" name="CATCH-xtor-bad-member" />
+ </group>
+ <group enabled="true" name="COMMA">
+ <check enabled="false" name="COMMA-overload" />
+ </group>
+ <group enabled="true" name="COMMENT">
+ <check enabled="true" name="COMMENT-nested" />
+ </group>
+ <group enabled="true" name="CONST">
+ <check enabled="true" name="CONST-member-ret" />
+ </group>
+ <group enabled="true" name="COP">
+ <check enabled="false" name="COP-alloc-ctor" />
+ <check enabled="true" name="COP-assign-op-ret" />
+ <check enabled="true" name="COP-assign-op-self" />
+ <check enabled="true" name="COP-assign-op" />
+ <check enabled="true" name="COP-copy-ctor" />
+ <check enabled="false" name="COP-dealloc-dtor" />
+ <check enabled="true" name="COP-dtor-throw" />
+ <check enabled="true" name="COP-dtor" />
+ <check enabled="true" name="COP-init-order" />
+ <check enabled="true" name="COP-init-uninit" />
+ <check enabled="true" name="COP-member-uninit" />
+ </group>
+ <group enabled="true" name="CPU">
+ <check enabled="true" name="CPU-ctor-call-virt" />
+ <check enabled="false" name="CPU-ctor-implicit" />
+ <check enabled="true" name="CPU-delete-throw" />
+ <check enabled="true" name="CPU-delete-void" />
+ <check enabled="true" name="CPU-dtor-call-virt" />
+ <check enabled="true" name="CPU-malloc-class" />
+ <check enabled="true" name="CPU-nonvirt-dtor" />
+ <check enabled="true" name="CPU-return-ref-to-class-data" />
+ </group>
+ <group enabled="true" name="DECL">
+ <check enabled="false" name="DECL-implicit-int" />
+ </group>
+ <group enabled="true" name="DEFINE">
+ <check enabled="true" name="DEFINE-hash-multiple" />
+ </group>
+ <group enabled="true" name="ENUM">
+ <check enabled="false" name="ENUM-bounds" />
+ </group>
+ <group enabled="true" name="EXP">
+ <check enabled="true" name="EXP-cond-assign" />
+ <check enabled="true" name="EXP-dangling-else" />
+ <check enabled="true" name="EXP-loop-exit" />
+ <check enabled="false" name="EXP-main-ret-int" />
+ <check enabled="false" name="EXP-null-stmt" />
+ <check enabled="false" name="EXP-stray-semicolon" />
+ </group>
+ <group enabled="true" name="EXPR">
+ <check enabled="true" name="EXPR-const-overflow" />
+ </group>
+ <group enabled="true" name="FPT">
+ <check enabled="true" name="FPT-cmp-null" />
+ <check enabled="false" name="FPT-literal" />
+ <check enabled="true" name="FPT-misuse" />
+ </group>
+ <group enabled="true" name="FUNC">
+ <check enabled="false" name="FUNC-implicit-decl" />
+ <check enabled="false" name="FUNC-unprototyped-all" />
+ <check enabled="true" name="FUNC-unprototyped-used" />
+ </group>
+ <group enabled="true" name="INCLUDE">
+ <check enabled="false" name="INCLUDE-c-file" />
+ </group>
+ <group enabled="true" name="INT">
+ <check enabled="false" name="INT-use-signed-as-unsigned-pos" />
+ <check enabled="true" name="INT-use-signed-as-unsigned" />
+ </group>
+ <group enabled="true" name="ITR">
+ <check enabled="true" name="ITR-end-cmp-aft" />
+ <check enabled="true" name="ITR-end-cmp-bef" />
+ <check enabled="true" name="ITR-invalidated" />
+ <check enabled="false" name="ITR-mismatch-alg" />
+ <check enabled="false" name="ITR-store" />
+ <check enabled="true" name="ITR-uninit" />
+ </group>
+ <group enabled="true" name="LIB">
+ <check enabled="false" name="LIB-bsearch-overrun-pos" />
+ <check enabled="false" name="LIB-bsearch-overrun" />
+ <check enabled="false" name="LIB-fn-unsafe" />
+ <check enabled="false" name="LIB-fread-overrun-pos" />
+ <check enabled="true" name="LIB-fread-overrun" />
+ <check enabled="false" name="LIB-memchr-overrun-pos" />
+ <check enabled="true" name="LIB-memchr-overrun" />
+ <check enabled="false" name="LIB-memcpy-overrun-pos" />
+ <check enabled="true" name="LIB-memcpy-overrun" />
+ <check enabled="false" name="LIB-memset-overrun-pos" />
+ <check enabled="true" name="LIB-memset-overrun" />
+ <check enabled="false" name="LIB-putenv" />
+ <check enabled="false" name="LIB-qsort-overrun-pos" />
+ <check enabled="false" name="LIB-qsort-overrun" />
+ <check enabled="true" name="LIB-return-const" />
+ <check enabled="true" name="LIB-return-error" />
+ <check enabled="true" name="LIB-return-leak" />
+ <check enabled="true" name="LIB-return-neg" />
+ <check enabled="true" name="LIB-return-null" />
+ <check enabled="false" name="LIB-sprintf-overrun" />
+ <check enabled="false" name="LIB-std-sort-overrun-pos" />
+ <check enabled="true" name="LIB-std-sort-overrun" />
+ <check enabled="false" name="LIB-strcat-overrun-pos" />
+ <check enabled="true" name="LIB-strcat-overrun" />
+ <check enabled="false" name="LIB-strcpy-overrun-pos" />
+ <check enabled="true" name="LIB-strcpy-overrun" />
+ <check enabled="false" name="LIB-strncat-overrun-pos" />
+ <check enabled="true" name="LIB-strncat-overrun" />
+ <check enabled="false" name="LIB-strncmp-overrun-pos" />
+ <check enabled="true" name="LIB-strncmp-overrun" />
+ <check enabled="false" name="LIB-strncpy-overrun-pos" />
+ <check enabled="true" name="LIB-strncpy-overrun" />
+ </group>
+ <group enabled="true" name="LOGIC">
+ <check enabled="false" name="LOGIC-overload" />
+ </group>
+ <group enabled="true" name="MEM">
+ <check enabled="true" name="MEM-delete-array-op" />
+ <check enabled="true" name="MEM-delete-op" />
+ <check enabled="true" name="MEM-double-free-alias" />
+ <check enabled="true" name="MEM-double-free-some" />
+ <check enabled="true" name="MEM-double-free" />
+ <check enabled="true" name="MEM-free-field" />
+ <check enabled="true" name="MEM-free-fptr" />
+ <check enabled="false" name="MEM-free-no-alloc-struct" />
+ <check enabled="false" name="MEM-free-no-alloc" />
+ <check enabled="true" name="MEM-free-no-use" />
+ <check enabled="true" name="MEM-free-op" />
+ <check enabled="true" name="MEM-free-struct-field" />
+ <check enabled="true" name="MEM-free-variable-alias" />
+ <check enabled="true" name="MEM-free-variable" />
+ <check enabled="true" name="MEM-leak-alias" />
+ <check enabled="false" name="MEM-leak" />
+ <check enabled="false" name="MEM-malloc-arith" />
+ <check enabled="true" name="MEM-malloc-diff-type" />
+ <check enabled="true" name="MEM-malloc-sizeof-ptr" />
+ <check enabled="true" name="MEM-malloc-sizeof" />
+ <check enabled="false" name="MEM-malloc-strlen" />
+ <check enabled="true" name="MEM-realloc-diff-type" />
+ <check enabled="true" name="MEM-return-free" />
+ <check enabled="true" name="MEM-return-no-assign" />
+ <check enabled="true" name="MEM-stack-global-field" />
+ <check enabled="true" name="MEM-stack-global" />
+ <check enabled="true" name="MEM-stack-param-ref" />
+ <check enabled="true" name="MEM-stack-param" />
+ <check enabled="true" name="MEM-stack-pos" />
+ <check enabled="true" name="MEM-stack-ref" />
+ <check enabled="true" name="MEM-stack" />
+ <check enabled="true" name="MEM-use-free-all" />
+ <check enabled="true" name="MEM-use-free-some" />
+ </group>
+ <group enabled="true" name="PTR">
+ <check enabled="true" name="PTR-arith-field" />
+ <check enabled="true" name="PTR-arith-stack" />
+ <check enabled="true" name="PTR-arith-var" />
+ <check enabled="true" name="PTR-cmp-str-lit" />
+ <check enabled="false" name="PTR-null-assign-fun-pos" />
+ <check enabled="false" name="PTR-null-assign-pos" />
+ <check enabled="true" name="PTR-null-assign" />
+ <check enabled="true" name="PTR-null-cmp-aft" />
+ <check enabled="true" name="PTR-null-cmp-bef-fun" />
+ <check enabled="true" name="PTR-null-cmp-bef" />
+ <check enabled="true" name="PTR-null-fun-pos" />
+ <check enabled="false" name="PTR-null-literal-pos" />
+ <check enabled="false" name="PTR-overload" />
+ <check enabled="false" name="PTR-singleton-arith-pos" />
+ <check enabled="true" name="PTR-singleton-arith" />
+ <check enabled="true" name="PTR-unchk-param-some" />
+ <check enabled="false" name="PTR-unchk-param" />
+ <check enabled="false" name="PTR-uninit-pos" />
+ <check enabled="true" name="PTR-uninit" />
+ </group>
+ <group enabled="true" name="RED">
+ <check enabled="false" name="RED-alloc-zero-bytes" />
+ <check enabled="false" name="RED-case-reach" />
+ <check enabled="false" name="RED-cmp-always" />
+ <check enabled="false" name="RED-cmp-never" />
+ <check enabled="false" name="RED-cond-always" />
+ <check enabled="true" name="RED-cond-const-assign" />
+ <check enabled="false" name="RED-cond-const-expr" />
+ <check enabled="false" name="RED-cond-const" />
+ <check enabled="false" name="RED-cond-never" />
+ <check enabled="true" name="RED-dead" />
+ <check enabled="false" name="RED-expr" />
+ <check enabled="false" name="RED-func-no-effect" />
+ <check enabled="true" name="RED-local-hides-global" />
+ <check enabled="false" name="RED-local-hides-local" />
+ <check enabled="false" name="RED-local-hides-member" />
+ <check enabled="true" name="RED-local-hides-param" />
+ <check enabled="false" name="RED-no-effect" />
+ <check enabled="true" name="RED-self-assign" />
+ <check enabled="true" name="RED-unused-assign" />
+ <check enabled="false" name="RED-unused-param" />
+ <check enabled="false" name="RED-unused-return-val" />
+ <check enabled="false" name="RED-unused-val" />
+ <check enabled="true" name="RED-unused-var-all" />
+ </group>
+ <group enabled="true" name="RESOURCE">
+ <check enabled="false" name="RESOURCE-deref-file" />
+ <check enabled="true" name="RESOURCE-double-close" />
+ <check enabled="true" name="RESOURCE-file-no-close-all" />
+ <check enabled="false" name="RESOURCE-file-pos-neg" />
+ <check enabled="true" name="RESOURCE-file-use-after-close" />
+ <check enabled="false" name="RESOURCE-implicit-deref-file" />
+ <check enabled="true" name="RESOURCE-write-ronly-file" />
+ </group>
+ <group enabled="true" name="SIZEOF">
+ <check enabled="true" name="SIZEOF-side-effect" />
+ </group>
+ <group enabled="true" name="SPC">
+ <check enabled="true" name="SPC-order" />
+ <check enabled="false" name="SPC-uninit-arr-all" />
+ <check enabled="true" name="SPC-uninit-struct-field-heap" />
+ <check enabled="false" name="SPC-uninit-struct-field" />
+ <check enabled="true" name="SPC-uninit-struct" />
+ <check enabled="true" name="SPC-uninit-var-all" />
+ <check enabled="true" name="SPC-uninit-var-some" />
+ <check enabled="false" name="SPC-volatile-reads" />
+ <check enabled="false" name="SPC-volatile-writes" />
+ </group>
+ <group enabled="true" name="STRUCT">
+ <check enabled="false" name="STRUCT-signed-bit" />
+ </group>
+ <group enabled="true" name="SWITCH">
+ <check enabled="true" name="SWITCH-fall-through" />
+ </group>
+ <group enabled="true" name="THROW">
+ <check enabled="false" name="THROW-empty" />
+ <check enabled="false" name="THROW-main" />
+ <check enabled="true" name="THROW-null" />
+ <check enabled="true" name="THROW-ptr" />
+ <check enabled="true" name="THROW-static" />
+ <check enabled="true" name="THROW-unhandled" />
+ </group>
+ <group enabled="true" name="UNION">
+ <check enabled="true" name="UNION-overlap-assign" />
+ <check enabled="true" name="UNION-type-punning" />
+ </group>
+ </package>
+ <package enabled="false" name="CERT">
+ <group enabled="true" name="CERT-ARR">
+ <check enabled="true" name="CERT-ARR30-C_a" />
+ <check enabled="true" name="CERT-ARR30-C_b" />
+ <check enabled="true" name="CERT-ARR30-C_c" />
+ <check enabled="true" name="CERT-ARR30-C_d" />
+ <check enabled="true" name="CERT-ARR30-C_e" />
+ <check enabled="true" name="CERT-ARR30-C_f" />
+ <check enabled="true" name="CERT-ARR30-C_g" />
+ <check enabled="true" name="CERT-ARR30-C_h" />
+ <check enabled="true" name="CERT-ARR30-C_i" />
+ <check enabled="true" name="CERT-ARR30-C_j" />
+ <check enabled="true" name="CERT-ARR32-C" />
+ <check enabled="true" name="CERT-ARR36-C_a" />
+ <check enabled="true" name="CERT-ARR36-C_b" />
+ <check enabled="true" name="CERT-ARR37-C" />
+ <check enabled="true" name="CERT-ARR38-C_a" />
+ <check enabled="true" name="CERT-ARR38-C_b" />
+ <check enabled="true" name="CERT-ARR38-C_c" />
+ <check enabled="true" name="CERT-ARR38-C_d" />
+ <check enabled="true" name="CERT-ARR38-C_e" />
+ <check enabled="true" name="CERT-ARR38-C_f" />
+ <check enabled="true" name="CERT-ARR39-C" />
+ </group>
+ <group enabled="true" name="CERT-DCL">
+ <check enabled="true" name="CERT-DCL30-C_a" />
+ <check enabled="true" name="CERT-DCL30-C_b" />
+ <check enabled="true" name="CERT-DCL30-C_c" />
+ <check enabled="true" name="CERT-DCL30-C_d" />
+ <check enabled="true" name="CERT-DCL30-C_e" />
+ <check enabled="true" name="CERT-DCL31-C" />
+ <check enabled="true" name="CERT-DCL36-C" />
+ <check enabled="true" name="CERT-DCL37-C_a" />
+ <check enabled="true" name="CERT-DCL37-C_b" />
+ <check enabled="false" name="CERT-DCL37-C_c" />
+ <check enabled="true" name="CERT-DCL38-C" />
+ <check enabled="true" name="CERT-DCL39-C" />
+ <check enabled="true" name="CERT-DCL40-C" />
+ <check enabled="true" name="CERT-DCL41-C" />
+ </group>
+ <group enabled="true" name="CERT-ENV">
+ <check enabled="true" name="CERT-ENV30-C" />
+ <check enabled="true" name="CERT-ENV31-C" />
+ <check enabled="true" name="CERT-ENV32-C" />
+ <check enabled="true" name="CERT-ENV33-C" />
+ <check enabled="true" name="CERT-ENV34-C" />
+ </group>
+ <group enabled="true" name="CERT-ERR">
+ <check enabled="true" name="CERT-ERR30-C_a" />
+ <check enabled="true" name="CERT-ERR30-C_b" />
+ <check enabled="true" name="CERT-ERR30-C_c" />
+ <check enabled="true" name="CERT-ERR30-C_d" />
+ <check enabled="true" name="CERT-ERR32-C" />
+ <check enabled="true" name="CERT-ERR33-C_a" />
+ <check enabled="true" name="CERT-ERR33-C_b" />
+ <check enabled="true" name="CERT-ERR33-C_c" />
+ <check enabled="true" name="CERT-ERR33-C_d" />
+ <check enabled="true" name="CERT-ERR34-C_a" />
+ <check enabled="true" name="CERT-ERR34-C_b" />
+ </group>
+ <group enabled="true" name="CERT-EXP">
+ <check enabled="true" name="CERT-EXP19-C" />
+ <check enabled="true" name="CERT-EXP30-C_a" />
+ <check enabled="true" name="CERT-EXP30-C_b" />
+ <check enabled="true" name="CERT-EXP32-C" />
+ <check enabled="true" name="CERT-EXP33-C_a" />
+ <check enabled="true" name="CERT-EXP33-C_b" />
+ <check enabled="true" name="CERT-EXP33-C_c" />
+ <check enabled="true" name="CERT-EXP33-C_d" />
+ <check enabled="true" name="CERT-EXP33-C_e" />
+ <check enabled="true" name="CERT-EXP33-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_a" />
+ <check enabled="true" name="CERT-EXP34-C_b" />
+ <check enabled="true" name="CERT-EXP34-C_c" />
+ <check enabled="true" name="CERT-EXP34-C_d" />
+ <check enabled="true" name="CERT-EXP34-C_e" />
+ <check enabled="true" name="CERT-EXP34-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_g" />
+ <check enabled="true" name="CERT-EXP35-C" />
+ <check enabled="true" name="CERT-EXP36-C_a" />
+ <check enabled="true" name="CERT-EXP36-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_a" />
+ <check enabled="true" name="CERT-EXP37-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_a" />
+ <check enabled="true" name="CERT-EXP39-C_b" />
+ <check enabled="true" name="CERT-EXP39-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_d" />
+ <check enabled="true" name="CERT-EXP39-C_e" />
+ <check enabled="true" name="CERT-EXP40-C_a" />
+ <check enabled="true" name="CERT-EXP40-C_b" />
+ <check enabled="true" name="CERT-EXP42-C" />
+ <check enabled="true" name="CERT-EXP43-C_a" />
+ <check enabled="true" name="CERT-EXP43-C_b" />
+ <check enabled="true" name="CERT-EXP43-C_c" />
+ <check enabled="true" name="CERT-EXP43-C_d" />
+ <check enabled="true" name="CERT-EXP44-C" />
+ <check enabled="true" name="CERT-EXP45-C" />
+ <check enabled="true" name="CERT-EXP46-C" />
+ <check enabled="true" name="CERT-EXP47-C_a" />
+ <check enabled="true" name="CERT-EXP47-C_b" />
+ </group>
+ <group enabled="true" name="CERT-FIO">
+ <check enabled="true" name="CERT-FIO30-C" />
+ <check enabled="true" name="CERT-FIO32-C" />
+ <check enabled="true" name="CERT-FIO34-C" />
+ <check enabled="true" name="CERT-FIO37-C" />
+ <check enabled="true" name="CERT-FIO38-C" />
+ <check enabled="true" name="CERT-FIO39-C" />
+ <check enabled="true" name="CERT-FIO40-C" />
+ <check enabled="true" name="CERT-FIO41-C" />
+ <check enabled="true" name="CERT-FIO42-C_a" />
+ <check enabled="false" name="CERT-FIO42-C_b" />
+ <check enabled="true" name="CERT-FIO44-C" />
+ <check enabled="true" name="CERT-FIO45-C" />
+ <check enabled="true" name="CERT-FIO46-C_a" />
+ <check enabled="true" name="CERT-FIO46-C_b" />
+ <check enabled="true" name="CERT-FIO46-C_c" />
+ <check enabled="true" name="CERT-FIO47-C_a" />
+ <check enabled="true" name="CERT-FIO47-C_b" />
+ <check enabled="true" name="CERT-FIO47-C_c" />
+ </group>
+ <group enabled="true" name="CERT-FLP">
+ <check enabled="true" name="CERT-FLP30-C_a" />
+ <check enabled="true" name="CERT-FLP30-C_b" />
+ <check enabled="true" name="CERT-FLP32-C_a" />
+ <check enabled="true" name="CERT-FLP32-C_b" />
+ <check enabled="true" name="CERT-FLP34-C" />
+ <check enabled="true" name="CERT-FLP36-C" />
+ <check enabled="true" name="CERT-FLP37-C" />
+ </group>
+ <group enabled="true" name="CERT-INT">
+ <check enabled="true" name="CERT-INT30-C_a" />
+ <check enabled="false" name="CERT-INT30-C_b" />
+ <check enabled="true" name="CERT-INT31-C_a" />
+ <check enabled="true" name="CERT-INT31-C_b" />
+ <check enabled="true" name="CERT-INT31-C_c" />
+ <check enabled="true" name="CERT-INT32-C_a" />
+ <check enabled="false" name="CERT-INT32-C_b" />
+ <check enabled="true" name="CERT-INT33-C_a" />
+ <check enabled="true" name="CERT-INT33-C_b" />
+ <check enabled="true" name="CERT-INT33-C_c" />
+ <check enabled="true" name="CERT-INT33-C_d" />
+ <check enabled="true" name="CERT-INT33-C_e" />
+ <check enabled="true" name="CERT-INT33-C_f" />
+ <check enabled="true" name="CERT-INT33-C_g" />
+ <check enabled="true" name="CERT-INT33-C_h" />
+ <check enabled="true" name="CERT-INT33-C_i" />
+ <check enabled="true" name="CERT-INT34-C_a" />
+ <check enabled="true" name="CERT-INT34-C_b" />
+ <check enabled="true" name="CERT-INT34-C_c" />
+ <check enabled="true" name="CERT-INT35-C" />
+ <check enabled="true" name="CERT-INT36-C" />
+ </group>
+ <group enabled="true" name="CERT-MEM">
+ <check enabled="true" name="CERT-MEM30-C_a" />
+ <check enabled="true" name="CERT-MEM30-C_b" />
+ <check enabled="true" name="CERT-MEM30-C_c" />
+ <check enabled="true" name="CERT-MEM31-C" />
+ <check enabled="true" name="CERT-MEM33-C_a" />
+ <check enabled="true" name="CERT-MEM33-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_a" />
+ <check enabled="true" name="CERT-MEM34-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_c" />
+ <check enabled="true" name="CERT-MEM35-C_a" />
+ <check enabled="true" name="CERT-MEM35-C_b" />
+ <check enabled="true" name="CERT-MEM35-C_c" />
+ <check enabled="true" name="CERT-MEM36-C" />
+ </group>
+ <group enabled="true" name="CERT-MSC">
+ <check enabled="true" name="CERT-MSC30-C" />
+ <check enabled="true" name="CERT-MSC32-C" />
+ <check enabled="false" name="CERT-MSC33-C" />
+ <check enabled="true" name="CERT-MSC37-C" />
+ <check enabled="true" name="CERT-MSC38-C" />
+ <check enabled="true" name="CERT-MSC39-C" />
+ <check enabled="true" name="CERT-MSC40-C_a" />
+ <check enabled="true" name="CERT-MSC40-C_b" />
+ <check enabled="true" name="CERT-MSC40-C_c" />
+ <check enabled="true" name="CERT-MSC40-C_d" />
+ <check enabled="false" name="CERT-MSC40-C_e" />
+ <check enabled="true" name="CERT-MSC41-C_a" />
+ <check enabled="true" name="CERT-MSC41-C_b" />
+ <check enabled="true" name="CERT-MSC41-C_c" />
+ </group>
+ <group enabled="true" name="CERT-PRE">
+ <check enabled="true" name="CERT-PRE31-C" />
+ <check enabled="true" name="CERT-PRE32-C_a" />
+ <check enabled="true" name="CERT-PRE32-C_b" />
+ </group>
+ <group enabled="true" name="CERT-SIG">
+ <check enabled="true" name="CERT-SIG30-C" />
+ <check enabled="true" name="CERT-SIG31-C" />
+ <check enabled="true" name="CERT-SIG34-C" />
+ <check enabled="true" name="CERT-SIG35-C" />
+ </group>
+ <group enabled="true" name="CERT-STR">
+ <check enabled="true" name="CERT-STR30-C" />
+ <check enabled="true" name="CERT-STR31-C_a" />
+ <check enabled="true" name="CERT-STR31-C_b" />
+ <check enabled="true" name="CERT-STR31-C_c" />
+ <check enabled="true" name="CERT-STR31-C_d" />
+ <check enabled="true" name="CERT-STR31-C_e" />
+ <check enabled="true" name="CERT-STR31-C_f" />
+ <check enabled="true" name="CERT-STR31-C_g" />
+ <check enabled="true" name="CERT-STR31-C_h" />
+ <check enabled="true" name="CERT-STR32-C" />
+ <check enabled="true" name="CERT-STR34-C" />
+ <check enabled="true" name="CERT-STR37-C" />
+ </group>
+ </package>
+ <package enabled="false" name="SECURITY">
+ <group enabled="true" name="SEC-BUFFER">
+ <check enabled="true" name="SEC-BUFFER-memory-leak-alias" />
+ <check enabled="false" name="SEC-BUFFER-memory-leak" />
+ <check enabled="false" name="SEC-BUFFER-memset-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-memset-overrun" />
+ <check enabled="false" name="SEC-BUFFER-qsort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-qsort-overrun" />
+ <check enabled="true" name="SEC-BUFFER-sprintf-overrun" />
+ <check enabled="false" name="SEC-BUFFER-std-sort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-std-sort-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcpy-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncmp-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncmp-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncpy-overrun" />
+ <check enabled="true" name="SEC-BUFFER-tainted-alloc-size" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy-length" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy" />
+ <check enabled="true" name="SEC-BUFFER-tainted-index" />
+ <check enabled="true" name="SEC-BUFFER-tainted-offset" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-all" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-some" />
+ </group>
+ <group enabled="true" name="SEC-DIV-0">
+ <check enabled="true" name="SEC-DIV-0-compare-after" />
+ <check enabled="true" name="SEC-DIV-0-compare-before" />
+ <check enabled="true" name="SEC-DIV-0-tainted" />
+ </group>
+ <group enabled="true" name="SEC-FILEOP">
+ <check enabled="true" name="SEC-FILEOP-open-no-close" />
+ <check enabled="false" name="SEC-FILEOP-path-traversal" />
+ <check enabled="true" name="SEC-FILEOP-use-after-close" />
+ </group>
+ <group enabled="true" name="SEC-INJECTION">
+ <check enabled="false" name="SEC-INJECTION-sql" />
+ <check enabled="false" name="SEC-INJECTION-xpath" />
+ </group>
+ <group enabled="true" name="SEC-LOOP">
+ <check enabled="true" name="SEC-LOOP-tainted-bound" />
+ </group>
+ <group enabled="true" name="SEC-NULL">
+ <check enabled="false" name="SEC-NULL-assignment-fun-pos" />
+ <check enabled="true" name="SEC-NULL-assignment" />
+ <check enabled="true" name="SEC-NULL-cmp-aft" />
+ <check enabled="true" name="SEC-NULL-cmp-bef-fun" />
+ <check enabled="true" name="SEC-NULL-cmp-bef" />
+ <check enabled="false" name="SEC-NULL-literal-pos" />
+ </group>
+ <group enabled="true" name="SEC-STRING">
+ <check enabled="true" name="SEC-STRING-format-string" />
+ <check enabled="false" name="SEC-STRING-hard-coded-credentials" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2004">
+ <group enabled="true" name="MISRAC2004-1">
+ <check enabled="true" name="MISRAC2004-1.1" />
+ <check enabled="true" name="MISRAC2004-1.2_a" />
+ <check enabled="true" name="MISRAC2004-1.2_b" />
+ <check enabled="true" name="MISRAC2004-1.2_c" />
+ <check enabled="true" name="MISRAC2004-1.2_d" />
+ <check enabled="true" name="MISRAC2004-1.2_e" />
+ <check enabled="true" name="MISRAC2004-1.2_f" />
+ <check enabled="true" name="MISRAC2004-1.2_g" />
+ <check enabled="true" name="MISRAC2004-1.2_h" />
+ <check enabled="true" name="MISRAC2004-1.2_i" />
+ <check enabled="true" name="MISRAC2004-1.2_j" />
+ </group>
+ <group enabled="true" name="MISRAC2004-2">
+ <check enabled="true" name="MISRAC2004-2.1" />
+ <check enabled="true" name="MISRAC2004-2.2" />
+ <check enabled="true" name="MISRAC2004-2.3" />
+ <check enabled="false" name="MISRAC2004-2.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-5">
+ <check enabled="true" name="MISRAC2004-5.1" />
+ <check enabled="true" name="MISRAC2004-5.2" />
+ <check enabled="true" name="MISRAC2004-5.3" />
+ <check enabled="true" name="MISRAC2004-5.4" />
+ <check enabled="false" name="MISRAC2004-5.5" />
+ <check enabled="false" name="MISRAC2004-5.6" />
+ <check enabled="false" name="MISRAC2004-5.7" />
+ </group>
+ <group enabled="true" name="MISRAC2004-6">
+ <check enabled="true" name="MISRAC2004-6.1" />
+ <check enabled="true" name="MISRAC2004-6.2" />
+ <check enabled="false" name="MISRAC2004-6.3" />
+ <check enabled="true" name="MISRAC2004-6.4" />
+ <check enabled="true" name="MISRAC2004-6.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-7">
+ <check enabled="true" name="MISRAC2004-7.1" />
+ </group>
+ <group enabled="true" name="MISRAC2004-8">
+ <check enabled="true" name="MISRAC2004-8.1" />
+ <check enabled="true" name="MISRAC2004-8.2" />
+ <check enabled="true" name="MISRAC2004-8.3" />
+ <check enabled="true" name="MISRAC2004-8.5_a" />
+ <check enabled="true" name="MISRAC2004-8.5_b" />
+ <check enabled="true" name="MISRAC2004-8.6" />
+ <check enabled="true" name="MISRAC2004-8.7" />
+ <check enabled="true" name="MISRAC2004-8.8_a" />
+ <check enabled="true" name="MISRAC2004-8.8_b" />
+ <check enabled="true" name="MISRAC2004-8.10" />
+ <check enabled="true" name="MISRAC2004-8.12" />
+ </group>
+ <group enabled="true" name="MISRAC2004-9">
+ <check enabled="true" name="MISRAC2004-9.1_a" />
+ <check enabled="true" name="MISRAC2004-9.1_b" />
+ <check enabled="true" name="MISRAC2004-9.1_c" />
+ <check enabled="true" name="MISRAC2004-9.2" />
+ <check enabled="true" name="MISRAC2004-9.3" />
+ </group>
+ <group enabled="true" name="MISRAC2004-10">
+ <check enabled="true" name="MISRAC2004-10.1_a" />
+ <check enabled="true" name="MISRAC2004-10.1_b" />
+ <check enabled="true" name="MISRAC2004-10.1_c" />
+ <check enabled="true" name="MISRAC2004-10.1_d" />
+ <check enabled="true" name="MISRAC2004-10.2_a" />
+ <check enabled="true" name="MISRAC2004-10.2_b" />
+ <check enabled="true" name="MISRAC2004-10.2_c" />
+ <check enabled="true" name="MISRAC2004-10.2_d" />
+ <check enabled="true" name="MISRAC2004-10.3" />
+ <check enabled="true" name="MISRAC2004-10.4" />
+ <check enabled="true" name="MISRAC2004-10.5" />
+ <check enabled="true" name="MISRAC2004-10.6" />
+ </group>
+ <group enabled="true" name="MISRAC2004-11">
+ <check enabled="true" name="MISRAC2004-11.1" />
+ <check enabled="false" name="MISRAC2004-11.3" />
+ <check enabled="false" name="MISRAC2004-11.4" />
+ <check enabled="true" name="MISRAC2004-11.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-12">
+ <check enabled="false" name="MISRAC2004-12.1" />
+ <check enabled="true" name="MISRAC2004-12.2_a" />
+ <check enabled="true" name="MISRAC2004-12.2_b" />
+ <check enabled="true" name="MISRAC2004-12.2_c" />
+ <check enabled="true" name="MISRAC2004-12.3" />
+ <check enabled="true" name="MISRAC2004-12.4" />
+ <check enabled="true" name="MISRAC2004-12.5" />
+ <check enabled="false" name="MISRAC2004-12.6_a" />
+ <check enabled="false" name="MISRAC2004-12.6_b" />
+ <check enabled="true" name="MISRAC2004-12.7" />
+ <check enabled="true" name="MISRAC2004-12.8" />
+ <check enabled="true" name="MISRAC2004-12.9" />
+ <check enabled="true" name="MISRAC2004-12.10" />
+ <check enabled="false" name="MISRAC2004-12.11" />
+ <check enabled="true" name="MISRAC2004-12.12_a" />
+ <check enabled="true" name="MISRAC2004-12.12_b" />
+ <check enabled="false" name="MISRAC2004-12.13" />
+ </group>
+ <group enabled="true" name="MISRAC2004-13">
+ <check enabled="true" name="MISRAC2004-13.1" />
+ <check enabled="false" name="MISRAC2004-13.2_a" />
+ <check enabled="false" name="MISRAC2004-13.2_b" />
+ <check enabled="false" name="MISRAC2004-13.2_c" />
+ <check enabled="false" name="MISRAC2004-13.2_d" />
+ <check enabled="false" name="MISRAC2004-13.2_e" />
+ <check enabled="true" name="MISRAC2004-13.3" />
+ <check enabled="true" name="MISRAC2004-13.4" />
+ <check enabled="true" name="MISRAC2004-13.5" />
+ <check enabled="true" name="MISRAC2004-13.6" />
+ <check enabled="true" name="MISRAC2004-13.7_a" />
+ <check enabled="true" name="MISRAC2004-13.7_b" />
+ </group>
+ <group enabled="true" name="MISRAC2004-14">
+ <check enabled="true" name="MISRAC2004-14.1" />
+ <check enabled="true" name="MISRAC2004-14.2" />
+ <check enabled="true" name="MISRAC2004-14.3" />
+ <check enabled="true" name="MISRAC2004-14.4" />
+ <check enabled="true" name="MISRAC2004-14.5" />
+ <check enabled="true" name="MISRAC2004-14.6" />
+ <check enabled="true" name="MISRAC2004-14.7" />
+ <check enabled="true" name="MISRAC2004-14.8_a" />
+ <check enabled="true" name="MISRAC2004-14.8_b" />
+ <check enabled="true" name="MISRAC2004-14.8_c" />
+ <check enabled="true" name="MISRAC2004-14.8_d" />
+ <check enabled="true" name="MISRAC2004-14.9" />
+ <check enabled="true" name="MISRAC2004-14.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-15">
+ <check enabled="true" name="MISRAC2004-15.0" />
+ <check enabled="true" name="MISRAC2004-15.1" />
+ <check enabled="true" name="MISRAC2004-15.2" />
+ <check enabled="true" name="MISRAC2004-15.3" />
+ <check enabled="true" name="MISRAC2004-15.4" />
+ <check enabled="true" name="MISRAC2004-15.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-16">
+ <check enabled="true" name="MISRAC2004-16.1" />
+ <check enabled="true" name="MISRAC2004-16.2_a" />
+ <check enabled="true" name="MISRAC2004-16.2_b" />
+ <check enabled="true" name="MISRAC2004-16.3" />
+ <check enabled="true" name="MISRAC2004-16.4" />
+ <check enabled="true" name="MISRAC2004-16.5" />
+ <check enabled="true" name="MISRAC2004-16.7" />
+ <check enabled="true" name="MISRAC2004-16.8" />
+ <check enabled="true" name="MISRAC2004-16.9" />
+ <check enabled="true" name="MISRAC2004-16.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-17">
+ <check enabled="true" name="MISRAC2004-17.1_a" />
+ <check enabled="true" name="MISRAC2004-17.1_b" />
+ <check enabled="true" name="MISRAC2004-17.1_c" />
+ <check enabled="true" name="MISRAC2004-17.2" />
+ <check enabled="true" name="MISRAC2004-17.3" />
+ <check enabled="true" name="MISRAC2004-17.4_a" />
+ <check enabled="true" name="MISRAC2004-17.4_b" />
+ <check enabled="true" name="MISRAC2004-17.5" />
+ <check enabled="true" name="MISRAC2004-17.6_a" />
+ <check enabled="true" name="MISRAC2004-17.6_b" />
+ <check enabled="true" name="MISRAC2004-17.6_c" />
+ <check enabled="true" name="MISRAC2004-17.6_d" />
+ </group>
+ <group enabled="true" name="MISRAC2004-18">
+ <check enabled="true" name="MISRAC2004-18.1" />
+ <check enabled="true" name="MISRAC2004-18.2" />
+ <check enabled="true" name="MISRAC2004-18.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-19">
+ <check enabled="false" name="MISRAC2004-19.1" />
+ <check enabled="false" name="MISRAC2004-19.2" />
+ <check enabled="true" name="MISRAC2004-19.4" />
+ <check enabled="true" name="MISRAC2004-19.5" />
+ <check enabled="true" name="MISRAC2004-19.6" />
+ <check enabled="false" name="MISRAC2004-19.7" />
+ <check enabled="true" name="MISRAC2004-19.10" />
+ <check enabled="true" name="MISRAC2004-19.12" />
+ <check enabled="false" name="MISRAC2004-19.13" />
+ <check enabled="true" name="MISRAC2004-19.15" />
+ </group>
+ <group enabled="true" name="MISRAC2004-20">
+ <check enabled="true" name="MISRAC2004-20.1" />
+ <check enabled="true" name="MISRAC2004-20.2" />
+ <check enabled="true" name="MISRAC2004-20.3_a" />
+ <check enabled="true" name="MISRAC2004-20.3_b" />
+ <check enabled="true" name="MISRAC2004-20.3_c" />
+ <check enabled="true" name="MISRAC2004-20.3_d" />
+ <check enabled="true" name="MISRAC2004-20.3_e" />
+ <check enabled="true" name="MISRAC2004-20.3_f" />
+ <check enabled="true" name="MISRAC2004-20.3_g" />
+ <check enabled="true" name="MISRAC2004-20.3_h" />
+ <check enabled="true" name="MISRAC2004-20.3_i" />
+ <check enabled="true" name="MISRAC2004-20.4" />
+ <check enabled="true" name="MISRAC2004-20.5" />
+ <check enabled="true" name="MISRAC2004-20.6" />
+ <check enabled="true" name="MISRAC2004-20.7" />
+ <check enabled="true" name="MISRAC2004-20.8" />
+ <check enabled="true" name="MISRAC2004-20.9" />
+ <check enabled="true" name="MISRAC2004-20.10" />
+ <check enabled="true" name="MISRAC2004-20.11" />
+ <check enabled="true" name="MISRAC2004-20.12" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2012">
+ <group enabled="true" name="MISRAC2012-Dir-4">
+ <check enabled="true" name="MISRAC2012-Dir-4.3" />
+ <check enabled="false" name="MISRAC2012-Dir-4.4" />
+ <check enabled="false" name="MISRAC2012-Dir-4.5" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.8" />
+ <check enabled="false" name="MISRAC2012-Dir-4.9" />
+ <check enabled="true" name="MISRAC2012-Dir-4.10" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_d" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_e" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_f" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_h" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_i" />
+ <check enabled="false" name="MISRAC2012-Dir-4.12" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_b" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_c" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_d" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_e" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_f" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.13_h" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-1">
+ <check enabled="true" name="MISRAC2012-Rule-1.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_c" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_d" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_e" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_f" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_g" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_h" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_i" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_j" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_k" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_m" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_n" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_o" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_p" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_q" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_r" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_s" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_t" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_u" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_v" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_w" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-2">
+ <check enabled="true" name="MISRAC2012-Rule-2.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-2.3" />
+ <check enabled="false" name="MISRAC2012-Rule-2.4" />
+ <check enabled="false" name="MISRAC2012-Rule-2.5" />
+ <check enabled="false" name="MISRAC2012-Rule-2.6" />
+ <check enabled="false" name="MISRAC2012-Rule-2.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-3">
+ <check enabled="true" name="MISRAC2012-Rule-3.1" />
+ <check enabled="true" name="MISRAC2012-Rule-3.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-5">
+ <check enabled="true" name="MISRAC2012-Rule-5.1" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.6" />
+ <check enabled="true" name="MISRAC2012-Rule-5.7" />
+ <check enabled="true" name="MISRAC2012-Rule-5.8" />
+ <check enabled="false" name="MISRAC2012-Rule-5.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-6">
+ <check enabled="true" name="MISRAC2012-Rule-6.1" />
+ <check enabled="true" name="MISRAC2012-Rule-6.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-7">
+ <check enabled="true" name="MISRAC2012-Rule-7.1" />
+ <check enabled="true" name="MISRAC2012-Rule-7.2" />
+ <check enabled="true" name="MISRAC2012-Rule-7.3" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-8">
+ <check enabled="true" name="MISRAC2012-Rule-8.1" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.3" />
+ <check enabled="true" name="MISRAC2012-Rule-8.4" />
+ <check enabled="false" name="MISRAC2012-Rule-8.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.5_b" />
+ <check enabled="false" name="MISRAC2012-Rule-8.7" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_a" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.10" />
+ <check enabled="false" name="MISRAC2012-Rule-8.11" />
+ <check enabled="true" name="MISRAC2012-Rule-8.12" />
+ <check enabled="false" name="MISRAC2012-Rule-8.13" />
+ <check enabled="true" name="MISRAC2012-Rule-8.14" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-9">
+ <check enabled="true" name="MISRAC2012-Rule-9.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_e" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_f" />
+ <check enabled="true" name="MISRAC2012-Rule-9.2" />
+ <check enabled="true" name="MISRAC2012-Rule-9.3" />
+ <check enabled="true" name="MISRAC2012-Rule-9.4" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-10">
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R4" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
+ <check enabled="true" name="MISRAC2012-Rule-10.2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_b" />
+ <check enabled="false" name="MISRAC2012-Rule-10.5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-11">
+ <check enabled="true" name="MISRAC2012-Rule-11.1" />
+ <check enabled="true" name="MISRAC2012-Rule-11.2" />
+ <check enabled="true" name="MISRAC2012-Rule-11.3" />
+ <check enabled="false" name="MISRAC2012-Rule-11.4" />
+ <check enabled="false" name="MISRAC2012-Rule-11.5" />
+ <check enabled="true" name="MISRAC2012-Rule-11.6" />
+ <check enabled="true" name="MISRAC2012-Rule-11.7" />
+ <check enabled="true" name="MISRAC2012-Rule-11.8" />
+ <check enabled="true" name="MISRAC2012-Rule-11.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-12">
+ <check enabled="false" name="MISRAC2012-Rule-12.1" />
+ <check enabled="true" name="MISRAC2012-Rule-12.2" />
+ <check enabled="false" name="MISRAC2012-Rule-12.3" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-13">
+ <check enabled="true" name="MISRAC2012-Rule-13.1" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-13.3" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_a" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.5" />
+ <check enabled="true" name="MISRAC2012-Rule-13.6" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-14">
+ <check enabled="true" name="MISRAC2012-Rule-14.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.2" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_c" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_d" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-15">
+ <check enabled="false" name="MISRAC2012-Rule-15.1" />
+ <check enabled="true" name="MISRAC2012-Rule-15.2" />
+ <check enabled="true" name="MISRAC2012-Rule-15.3" />
+ <check enabled="false" name="MISRAC2012-Rule-15.4" />
+ <check enabled="false" name="MISRAC2012-Rule-15.5" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_e" />
+ <check enabled="true" name="MISRAC2012-Rule-15.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-16">
+ <check enabled="true" name="MISRAC2012-Rule-16.1" />
+ <check enabled="true" name="MISRAC2012-Rule-16.2" />
+ <check enabled="true" name="MISRAC2012-Rule-16.3" />
+ <check enabled="true" name="MISRAC2012-Rule-16.4" />
+ <check enabled="true" name="MISRAC2012-Rule-16.5" />
+ <check enabled="true" name="MISRAC2012-Rule-16.6" />
+ <check enabled="true" name="MISRAC2012-Rule-16.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-17">
+ <check enabled="true" name="MISRAC2012-Rule-17.1" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-17.3" />
+ <check enabled="true" name="MISRAC2012-Rule-17.4" />
+ <check enabled="false" name="MISRAC2012-Rule-17.5" />
+ <check enabled="true" name="MISRAC2012-Rule-17.6" />
+ <check enabled="true" name="MISRAC2012-Rule-17.7" />
+ <check enabled="false" name="MISRAC2012-Rule-17.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-18">
+ <check enabled="true" name="MISRAC2012-Rule-18.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.2" />
+ <check enabled="true" name="MISRAC2012-Rule-18.3" />
+ <check enabled="true" name="MISRAC2012-Rule-18.4" />
+ <check enabled="false" name="MISRAC2012-Rule-18.5" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.7" />
+ <check enabled="true" name="MISRAC2012-Rule-18.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-19">
+ <check enabled="true" name="MISRAC2012-Rule-19.1" />
+ <check enabled="false" name="MISRAC2012-Rule-19.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-20">
+ <check enabled="false" name="MISRAC2012-Rule-20.1" />
+ <check enabled="true" name="MISRAC2012-Rule-20.2" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c99" />
+ <check enabled="false" name="MISRAC2012-Rule-20.5" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-20.7" />
+ <check enabled="false" name="MISRAC2012-Rule-20.10" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-21">
+ <check enabled="true" name="MISRAC2012-Rule-21.1" />
+ <check enabled="true" name="MISRAC2012-Rule-21.2" />
+ <check enabled="true" name="MISRAC2012-Rule-21.3" />
+ <check enabled="true" name="MISRAC2012-Rule-21.4" />
+ <check enabled="true" name="MISRAC2012-Rule-21.5" />
+ <check enabled="true" name="MISRAC2012-Rule-21.6" />
+ <check enabled="true" name="MISRAC2012-Rule-21.7" />
+ <check enabled="true" name="MISRAC2012-Rule-21.8" />
+ <check enabled="true" name="MISRAC2012-Rule-21.9" />
+ <check enabled="true" name="MISRAC2012-Rule-21.10" />
+ <check enabled="true" name="MISRAC2012-Rule-21.11" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_a" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-22">
+ <check enabled="true" name="MISRAC2012-Rule-22.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_c" />
+ <check enabled="true" name="MISRAC2012-Rule-22.3" />
+ <check enabled="true" name="MISRAC2012-Rule-22.4" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.6" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC++2008">
+ <group enabled="true" name="MISRAC++2008-0-1">
+ <check enabled="true" name="MISRAC++2008-0-1-1" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_c" />
+ <check enabled="true" name="MISRAC++2008-0-1-3" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-6" />
+ <check enabled="true" name="MISRAC++2008-0-1-7" />
+ <check enabled="false" name="MISRAC++2008-0-1-8" />
+ <check enabled="true" name="MISRAC++2008-0-1-9" />
+ <check enabled="true" name="MISRAC++2008-0-1-11" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-2">
+ <check enabled="true" name="MISRAC++2008-0-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-3">
+ <check enabled="true" name="MISRAC++2008-0-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-7">
+ <check enabled="true" name="MISRAC++2008-2-7-1" />
+ <check enabled="true" name="MISRAC++2008-2-7-2" />
+ <check enabled="false" name="MISRAC++2008-2-7-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-10">
+ <check enabled="true" name="MISRAC++2008-2-10-1" />
+ <check enabled="true" name="MISRAC++2008-2-10-2" />
+ <check enabled="true" name="MISRAC++2008-2-10-3" />
+ <check enabled="true" name="MISRAC++2008-2-10-4" />
+ <check enabled="false" name="MISRAC++2008-2-10-5" />
+ <check enabled="true" name="MISRAC++2008-2-10-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-13">
+ <check enabled="true" name="MISRAC++2008-2-13-2" />
+ <check enabled="true" name="MISRAC++2008-2-13-3" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_a" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-1">
+ <check enabled="true" name="MISRAC++2008-3-1-1" />
+ <check enabled="true" name="MISRAC++2008-3-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-9">
+ <check enabled="false" name="MISRAC++2008-3-9-2" />
+ <check enabled="true" name="MISRAC++2008-3-9-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-4-5">
+ <check enabled="true" name="MISRAC++2008-4-5-1" />
+ <check enabled="true" name="MISRAC++2008-4-5-2" />
+ <check enabled="true" name="MISRAC++2008-4-5-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-0">
+ <check enabled="true" name="MISRAC++2008-5-0-1_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_c" />
+ <check enabled="false" name="MISRAC++2008-5-0-2" />
+ <check enabled="true" name="MISRAC++2008-5-0-3" />
+ <check enabled="true" name="MISRAC++2008-5-0-4" />
+ <check enabled="true" name="MISRAC++2008-5-0-5" />
+ <check enabled="true" name="MISRAC++2008-5-0-6" />
+ <check enabled="true" name="MISRAC++2008-5-0-7" />
+ <check enabled="true" name="MISRAC++2008-5-0-8" />
+ <check enabled="true" name="MISRAC++2008-5-0-9" />
+ <check enabled="true" name="MISRAC++2008-5-0-10" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-14" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_e" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_f" />
+ <check enabled="true" name="MISRAC++2008-5-0-19" />
+ <check enabled="true" name="MISRAC++2008-5-0-21" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-2">
+ <check enabled="true" name="MISRAC++2008-5-2-4" />
+ <check enabled="true" name="MISRAC++2008-5-2-5" />
+ <check enabled="true" name="MISRAC++2008-5-2-6" />
+ <check enabled="true" name="MISRAC++2008-5-2-7" />
+ <check enabled="false" name="MISRAC++2008-5-2-9" />
+ <check enabled="false" name="MISRAC++2008-5-2-10" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_a" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-3">
+ <check enabled="true" name="MISRAC++2008-5-3-1" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_a" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_b" />
+ <check enabled="true" name="MISRAC++2008-5-3-3" />
+ <check enabled="true" name="MISRAC++2008-5-3-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-8">
+ <check enabled="true" name="MISRAC++2008-5-8-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-14">
+ <check enabled="true" name="MISRAC++2008-5-14-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-18">
+ <check enabled="true" name="MISRAC++2008-5-18-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-19">
+ <check enabled="false" name="MISRAC++2008-5-19-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-2">
+ <check enabled="true" name="MISRAC++2008-6-2-1" />
+ <check enabled="true" name="MISRAC++2008-6-2-2" />
+ <check enabled="false" name="MISRAC++2008-6-2-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-3">
+ <check enabled="true" name="MISRAC++2008-6-3-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_c" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_d" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-4">
+ <check enabled="true" name="MISRAC++2008-6-4-1" />
+ <check enabled="true" name="MISRAC++2008-6-4-2" />
+ <check enabled="true" name="MISRAC++2008-6-4-3" />
+ <check enabled="true" name="MISRAC++2008-6-4-4" />
+ <check enabled="true" name="MISRAC++2008-6-4-5" />
+ <check enabled="true" name="MISRAC++2008-6-4-6" />
+ <check enabled="true" name="MISRAC++2008-6-4-7" />
+ <check enabled="true" name="MISRAC++2008-6-4-8" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-5">
+ <check enabled="true" name="MISRAC++2008-6-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-5-2" />
+ <check enabled="true" name="MISRAC++2008-6-5-3" />
+ <check enabled="true" name="MISRAC++2008-6-5-4" />
+ <check enabled="true" name="MISRAC++2008-6-5-5" />
+ <check enabled="true" name="MISRAC++2008-6-5-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-6">
+ <check enabled="true" name="MISRAC++2008-6-6-1" />
+ <check enabled="true" name="MISRAC++2008-6-6-2" />
+ <check enabled="true" name="MISRAC++2008-6-6-4" />
+ <check enabled="true" name="MISRAC++2008-6-6-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-1">
+ <check enabled="true" name="MISRAC++2008-7-1-1" />
+ <check enabled="true" name="MISRAC++2008-7-1-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-2">
+ <check enabled="true" name="MISRAC++2008-7-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-4">
+ <check enabled="true" name="MISRAC++2008-7-4-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-5">
+ <check enabled="true" name="MISRAC++2008-7-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_c" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_d" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_a" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-0">
+ <check enabled="true" name="MISRAC++2008-8-0-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-4">
+ <check enabled="true" name="MISRAC++2008-8-4-1" />
+ <check enabled="true" name="MISRAC++2008-8-4-3" />
+ <check enabled="true" name="MISRAC++2008-8-4-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-5">
+ <check enabled="true" name="MISRAC++2008-8-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_c" />
+ <check enabled="true" name="MISRAC++2008-8-5-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-3">
+ <check enabled="true" name="MISRAC++2008-9-3-1" />
+ <check enabled="true" name="MISRAC++2008-9-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-5">
+ <check enabled="true" name="MISRAC++2008-9-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-6">
+ <check enabled="true" name="MISRAC++2008-9-6-2" />
+ <check enabled="true" name="MISRAC++2008-9-6-3" />
+ <check enabled="true" name="MISRAC++2008-9-6-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-12-1">
+ <check enabled="true" name="MISRAC++2008-12-1-1_a" />
+ <check enabled="true" name="MISRAC++2008-12-1-1_b" />
+ <check enabled="true" name="MISRAC++2008-12-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-0">
+ <check enabled="false" name="MISRAC++2008-15-0-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-1">
+ <check enabled="true" name="MISRAC++2008-15-1-2" />
+ <check enabled="true" name="MISRAC++2008-15-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-3">
+ <check enabled="true" name="MISRAC++2008-15-3-1" />
+ <check enabled="false" name="MISRAC++2008-15-3-2" />
+ <check enabled="true" name="MISRAC++2008-15-3-3" />
+ <check enabled="true" name="MISRAC++2008-15-3-4" />
+ <check enabled="true" name="MISRAC++2008-15-3-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-5">
+ <check enabled="true" name="MISRAC++2008-15-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-0">
+ <check enabled="true" name="MISRAC++2008-16-0-3" />
+ <check enabled="true" name="MISRAC++2008-16-0-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-2">
+ <check enabled="true" name="MISRAC++2008-16-2-2" />
+ <check enabled="true" name="MISRAC++2008-16-2-3" />
+ <check enabled="true" name="MISRAC++2008-16-2-4" />
+ <check enabled="false" name="MISRAC++2008-16-2-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-3">
+ <check enabled="true" name="MISRAC++2008-16-3-1" />
+ <check enabled="false" name="MISRAC++2008-16-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-17-0">
+ <check enabled="true" name="MISRAC++2008-17-0-1" />
+ <check enabled="true" name="MISRAC++2008-17-0-3" />
+ <check enabled="true" name="MISRAC++2008-17-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-0">
+ <check enabled="true" name="MISRAC++2008-18-0-1" />
+ <check enabled="true" name="MISRAC++2008-18-0-2" />
+ <check enabled="true" name="MISRAC++2008-18-0-3" />
+ <check enabled="true" name="MISRAC++2008-18-0-4" />
+ <check enabled="true" name="MISRAC++2008-18-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-2">
+ <check enabled="true" name="MISRAC++2008-18-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-4">
+ <check enabled="true" name="MISRAC++2008-18-4-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-7">
+ <check enabled="true" name="MISRAC++2008-18-7-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-19-3">
+ <check enabled="true" name="MISRAC++2008-19-3-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-27-0">
+ <check enabled="true" name="MISRAC++2008-27-0-1" />
+ </group>
+ </package>
+ </checks_tree>
+ </cstat_settings>
+ </data>
+ </settings>
+ <settings>
+ <name>RuntimeChecking</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>GenRtcDebugHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnableBoundsChecking</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrMem</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcTrackPointerBounds</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcCheckAccesses</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcGenerateEntries</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcNrTrackedPointers</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>GenRtcIntOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIncUnsigned</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntConversion</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclExplicit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclUnsignedShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcUnhandledCase</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcDivByZero</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrFunc</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-STAT</name>
+ <archiveVersion>263</archiveVersion>
+ <data>
+ <version>263</version>
+ <cstatargs>
+ <useExtraArgs>0</useExtraArgs>
+ <extraArgs></extraArgs>
+ <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+ <analyzeTimeout>600</analyzeTimeout>
+ <enableParallel>0</enableParallel>
+ <parallelThreads>2</parallelThreads>
+ <enableFalsePositives>0</enableFalsePositives>
+ <messagesLimitEnabled>1</messagesLimitEnabled>
+ <messagesLimit>100</messagesLimit>
+ </cstatargs>
+ <cstat_settings>
+ <cstat_version>1.7.0</cstat_version>
+ <checks_tree>
+ <package enabled="true" name="STDCHECKS">
+ <group enabled="true" name="ARR">
+ <check enabled="true" name="ARR-inv-index-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr" />
+ <check enabled="true" name="ARR-inv-index" />
+ <check enabled="true" name="ARR-neg-index" />
+ <check enabled="true" name="ARR-uninit-index" />
+ </group>
+ <group enabled="true" name="ATH">
+ <check enabled="true" name="ATH-cmp-float" />
+ <check enabled="true" name="ATH-cmp-unsign-neg" />
+ <check enabled="true" name="ATH-cmp-unsign-pos" />
+ <check enabled="true" name="ATH-div-0-assign" />
+ <check enabled="false" name="ATH-div-0-cmp-aft" />
+ <check enabled="true" name="ATH-div-0-cmp-bef" />
+ <check enabled="true" name="ATH-div-0-interval" />
+ <check enabled="true" name="ATH-div-0-pos" />
+ <check enabled="true" name="ATH-div-0-unchk-global" />
+ <check enabled="true" name="ATH-div-0-unchk-local" />
+ <check enabled="true" name="ATH-div-0-unchk-param" />
+ <check enabled="true" name="ATH-div-0" />
+ <check enabled="true" name="ATH-inc-bool" />
+ <check enabled="true" name="ATH-malloc-overrun" />
+ <check enabled="true" name="ATH-neg-check-nonneg" />
+ <check enabled="true" name="ATH-neg-check-pos" />
+ <check enabled="true" name="ATH-new-overrun" />
+ <check enabled="false" name="ATH-overflow-cast" />
+ <check enabled="true" name="ATH-overflow" />
+ <check enabled="true" name="ATH-shift-bounds" />
+ <check enabled="true" name="ATH-shift-neg" />
+ <check enabled="true" name="ATH-sizeof-by-sizeof" />
+ </group>
+ <group enabled="true" name="CAST">
+ <check enabled="false" name="CAST-old-style" />
+ </group>
+ <group enabled="true" name="CATCH">
+ <check enabled="true" name="CATCH-object-slicing" />
+ <check enabled="false" name="CATCH-xtor-bad-member" />
+ </group>
+ <group enabled="true" name="COMMA">
+ <check enabled="false" name="COMMA-overload" />
+ </group>
+ <group enabled="true" name="COMMENT">
+ <check enabled="true" name="COMMENT-nested" />
+ </group>
+ <group enabled="true" name="CONST">
+ <check enabled="true" name="CONST-member-ret" />
+ </group>
+ <group enabled="true" name="COP">
+ <check enabled="false" name="COP-alloc-ctor" />
+ <check enabled="true" name="COP-assign-op-ret" />
+ <check enabled="true" name="COP-assign-op-self" />
+ <check enabled="true" name="COP-assign-op" />
+ <check enabled="true" name="COP-copy-ctor" />
+ <check enabled="false" name="COP-dealloc-dtor" />
+ <check enabled="true" name="COP-dtor-throw" />
+ <check enabled="true" name="COP-dtor" />
+ <check enabled="true" name="COP-init-order" />
+ <check enabled="true" name="COP-init-uninit" />
+ <check enabled="true" name="COP-member-uninit" />
+ </group>
+ <group enabled="true" name="CPU">
+ <check enabled="true" name="CPU-ctor-call-virt" />
+ <check enabled="false" name="CPU-ctor-implicit" />
+ <check enabled="true" name="CPU-delete-throw" />
+ <check enabled="true" name="CPU-delete-void" />
+ <check enabled="true" name="CPU-dtor-call-virt" />
+ <check enabled="true" name="CPU-malloc-class" />
+ <check enabled="true" name="CPU-nonvirt-dtor" />
+ <check enabled="true" name="CPU-return-ref-to-class-data" />
+ </group>
+ <group enabled="true" name="DECL">
+ <check enabled="false" name="DECL-implicit-int" />
+ </group>
+ <group enabled="true" name="DEFINE">
+ <check enabled="true" name="DEFINE-hash-multiple" />
+ </group>
+ <group enabled="true" name="ENUM">
+ <check enabled="false" name="ENUM-bounds" />
+ </group>
+ <group enabled="true" name="EXP">
+ <check enabled="true" name="EXP-cond-assign" />
+ <check enabled="true" name="EXP-dangling-else" />
+ <check enabled="true" name="EXP-loop-exit" />
+ <check enabled="false" name="EXP-main-ret-int" />
+ <check enabled="false" name="EXP-null-stmt" />
+ <check enabled="false" name="EXP-stray-semicolon" />
+ </group>
+ <group enabled="true" name="EXPR">
+ <check enabled="true" name="EXPR-const-overflow" />
+ </group>
+ <group enabled="true" name="FPT">
+ <check enabled="true" name="FPT-cmp-null" />
+ <check enabled="false" name="FPT-literal" />
+ <check enabled="true" name="FPT-misuse" />
+ </group>
+ <group enabled="true" name="FUNC">
+ <check enabled="false" name="FUNC-implicit-decl" />
+ <check enabled="false" name="FUNC-unprototyped-all" />
+ <check enabled="true" name="FUNC-unprototyped-used" />
+ </group>
+ <group enabled="true" name="INCLUDE">
+ <check enabled="false" name="INCLUDE-c-file" />
+ </group>
+ <group enabled="true" name="INT">
+ <check enabled="false" name="INT-use-signed-as-unsigned-pos" />
+ <check enabled="true" name="INT-use-signed-as-unsigned" />
+ </group>
+ <group enabled="true" name="ITR">
+ <check enabled="true" name="ITR-end-cmp-aft" />
+ <check enabled="true" name="ITR-end-cmp-bef" />
+ <check enabled="true" name="ITR-invalidated" />
+ <check enabled="false" name="ITR-mismatch-alg" />
+ <check enabled="false" name="ITR-store" />
+ <check enabled="true" name="ITR-uninit" />
+ </group>
+ <group enabled="true" name="LIB">
+ <check enabled="false" name="LIB-bsearch-overrun-pos" />
+ <check enabled="false" name="LIB-bsearch-overrun" />
+ <check enabled="false" name="LIB-fn-unsafe" />
+ <check enabled="false" name="LIB-fread-overrun-pos" />
+ <check enabled="true" name="LIB-fread-overrun" />
+ <check enabled="false" name="LIB-memchr-overrun-pos" />
+ <check enabled="true" name="LIB-memchr-overrun" />
+ <check enabled="false" name="LIB-memcpy-overrun-pos" />
+ <check enabled="true" name="LIB-memcpy-overrun" />
+ <check enabled="false" name="LIB-memset-overrun-pos" />
+ <check enabled="true" name="LIB-memset-overrun" />
+ <check enabled="false" name="LIB-putenv" />
+ <check enabled="false" name="LIB-qsort-overrun-pos" />
+ <check enabled="false" name="LIB-qsort-overrun" />
+ <check enabled="true" name="LIB-return-const" />
+ <check enabled="true" name="LIB-return-error" />
+ <check enabled="true" name="LIB-return-leak" />
+ <check enabled="true" name="LIB-return-neg" />
+ <check enabled="true" name="LIB-return-null" />
+ <check enabled="false" name="LIB-sprintf-overrun" />
+ <check enabled="false" name="LIB-std-sort-overrun-pos" />
+ <check enabled="true" name="LIB-std-sort-overrun" />
+ <check enabled="false" name="LIB-strcat-overrun-pos" />
+ <check enabled="true" name="LIB-strcat-overrun" />
+ <check enabled="false" name="LIB-strcpy-overrun-pos" />
+ <check enabled="true" name="LIB-strcpy-overrun" />
+ <check enabled="false" name="LIB-strncat-overrun-pos" />
+ <check enabled="true" name="LIB-strncat-overrun" />
+ <check enabled="false" name="LIB-strncmp-overrun-pos" />
+ <check enabled="true" name="LIB-strncmp-overrun" />
+ <check enabled="false" name="LIB-strncpy-overrun-pos" />
+ <check enabled="true" name="LIB-strncpy-overrun" />
+ </group>
+ <group enabled="true" name="LOGIC">
+ <check enabled="false" name="LOGIC-overload" />
+ </group>
+ <group enabled="true" name="MEM">
+ <check enabled="true" name="MEM-delete-array-op" />
+ <check enabled="true" name="MEM-delete-op" />
+ <check enabled="true" name="MEM-double-free-alias" />
+ <check enabled="true" name="MEM-double-free-some" />
+ <check enabled="true" name="MEM-double-free" />
+ <check enabled="true" name="MEM-free-field" />
+ <check enabled="true" name="MEM-free-fptr" />
+ <check enabled="false" name="MEM-free-no-alloc-struct" />
+ <check enabled="false" name="MEM-free-no-alloc" />
+ <check enabled="true" name="MEM-free-no-use" />
+ <check enabled="true" name="MEM-free-op" />
+ <check enabled="true" name="MEM-free-struct-field" />
+ <check enabled="true" name="MEM-free-variable-alias" />
+ <check enabled="true" name="MEM-free-variable" />
+ <check enabled="true" name="MEM-leak-alias" />
+ <check enabled="false" name="MEM-leak" />
+ <check enabled="false" name="MEM-malloc-arith" />
+ <check enabled="true" name="MEM-malloc-diff-type" />
+ <check enabled="true" name="MEM-malloc-sizeof-ptr" />
+ <check enabled="true" name="MEM-malloc-sizeof" />
+ <check enabled="false" name="MEM-malloc-strlen" />
+ <check enabled="true" name="MEM-realloc-diff-type" />
+ <check enabled="true" name="MEM-return-free" />
+ <check enabled="true" name="MEM-return-no-assign" />
+ <check enabled="true" name="MEM-stack-global-field" />
+ <check enabled="true" name="MEM-stack-global" />
+ <check enabled="true" name="MEM-stack-param-ref" />
+ <check enabled="true" name="MEM-stack-param" />
+ <check enabled="true" name="MEM-stack-pos" />
+ <check enabled="true" name="MEM-stack-ref" />
+ <check enabled="true" name="MEM-stack" />
+ <check enabled="true" name="MEM-use-free-all" />
+ <check enabled="true" name="MEM-use-free-some" />
+ </group>
+ <group enabled="true" name="PTR">
+ <check enabled="true" name="PTR-arith-field" />
+ <check enabled="true" name="PTR-arith-stack" />
+ <check enabled="true" name="PTR-arith-var" />
+ <check enabled="true" name="PTR-cmp-str-lit" />
+ <check enabled="false" name="PTR-null-assign-fun-pos" />
+ <check enabled="false" name="PTR-null-assign-pos" />
+ <check enabled="true" name="PTR-null-assign" />
+ <check enabled="true" name="PTR-null-cmp-aft" />
+ <check enabled="true" name="PTR-null-cmp-bef-fun" />
+ <check enabled="true" name="PTR-null-cmp-bef" />
+ <check enabled="true" name="PTR-null-fun-pos" />
+ <check enabled="false" name="PTR-null-literal-pos" />
+ <check enabled="false" name="PTR-overload" />
+ <check enabled="false" name="PTR-singleton-arith-pos" />
+ <check enabled="true" name="PTR-singleton-arith" />
+ <check enabled="true" name="PTR-unchk-param-some" />
+ <check enabled="false" name="PTR-unchk-param" />
+ <check enabled="false" name="PTR-uninit-pos" />
+ <check enabled="true" name="PTR-uninit" />
+ </group>
+ <group enabled="true" name="RED">
+ <check enabled="false" name="RED-alloc-zero-bytes" />
+ <check enabled="false" name="RED-case-reach" />
+ <check enabled="false" name="RED-cmp-always" />
+ <check enabled="false" name="RED-cmp-never" />
+ <check enabled="false" name="RED-cond-always" />
+ <check enabled="true" name="RED-cond-const-assign" />
+ <check enabled="false" name="RED-cond-const-expr" />
+ <check enabled="false" name="RED-cond-const" />
+ <check enabled="false" name="RED-cond-never" />
+ <check enabled="true" name="RED-dead" />
+ <check enabled="false" name="RED-expr" />
+ <check enabled="false" name="RED-func-no-effect" />
+ <check enabled="true" name="RED-local-hides-global" />
+ <check enabled="false" name="RED-local-hides-local" />
+ <check enabled="false" name="RED-local-hides-member" />
+ <check enabled="true" name="RED-local-hides-param" />
+ <check enabled="false" name="RED-no-effect" />
+ <check enabled="true" name="RED-self-assign" />
+ <check enabled="true" name="RED-unused-assign" />
+ <check enabled="false" name="RED-unused-param" />
+ <check enabled="false" name="RED-unused-return-val" />
+ <check enabled="false" name="RED-unused-val" />
+ <check enabled="true" name="RED-unused-var-all" />
+ </group>
+ <group enabled="true" name="RESOURCE">
+ <check enabled="false" name="RESOURCE-deref-file" />
+ <check enabled="true" name="RESOURCE-double-close" />
+ <check enabled="true" name="RESOURCE-file-no-close-all" />
+ <check enabled="false" name="RESOURCE-file-pos-neg" />
+ <check enabled="true" name="RESOURCE-file-use-after-close" />
+ <check enabled="false" name="RESOURCE-implicit-deref-file" />
+ <check enabled="true" name="RESOURCE-write-ronly-file" />
+ </group>
+ <group enabled="true" name="SIZEOF">
+ <check enabled="true" name="SIZEOF-side-effect" />
+ </group>
+ <group enabled="true" name="SPC">
+ <check enabled="true" name="SPC-order" />
+ <check enabled="false" name="SPC-uninit-arr-all" />
+ <check enabled="true" name="SPC-uninit-struct-field-heap" />
+ <check enabled="false" name="SPC-uninit-struct-field" />
+ <check enabled="true" name="SPC-uninit-struct" />
+ <check enabled="true" name="SPC-uninit-var-all" />
+ <check enabled="true" name="SPC-uninit-var-some" />
+ <check enabled="false" name="SPC-volatile-reads" />
+ <check enabled="false" name="SPC-volatile-writes" />
+ </group>
+ <group enabled="true" name="STRUCT">
+ <check enabled="false" name="STRUCT-signed-bit" />
+ </group>
+ <group enabled="true" name="SWITCH">
+ <check enabled="true" name="SWITCH-fall-through" />
+ </group>
+ <group enabled="true" name="THROW">
+ <check enabled="false" name="THROW-empty" />
+ <check enabled="false" name="THROW-main" />
+ <check enabled="true" name="THROW-null" />
+ <check enabled="true" name="THROW-ptr" />
+ <check enabled="true" name="THROW-static" />
+ <check enabled="true" name="THROW-unhandled" />
+ </group>
+ <group enabled="true" name="UNION">
+ <check enabled="true" name="UNION-overlap-assign" />
+ <check enabled="true" name="UNION-type-punning" />
+ </group>
+ </package>
+ <package enabled="false" name="CERT">
+ <group enabled="true" name="CERT-ARR">
+ <check enabled="true" name="CERT-ARR30-C_a" />
+ <check enabled="true" name="CERT-ARR30-C_b" />
+ <check enabled="true" name="CERT-ARR30-C_c" />
+ <check enabled="true" name="CERT-ARR30-C_d" />
+ <check enabled="true" name="CERT-ARR30-C_e" />
+ <check enabled="true" name="CERT-ARR30-C_f" />
+ <check enabled="true" name="CERT-ARR30-C_g" />
+ <check enabled="true" name="CERT-ARR30-C_h" />
+ <check enabled="true" name="CERT-ARR30-C_i" />
+ <check enabled="true" name="CERT-ARR30-C_j" />
+ <check enabled="true" name="CERT-ARR32-C" />
+ <check enabled="true" name="CERT-ARR36-C_a" />
+ <check enabled="true" name="CERT-ARR36-C_b" />
+ <check enabled="true" name="CERT-ARR37-C" />
+ <check enabled="true" name="CERT-ARR38-C_a" />
+ <check enabled="true" name="CERT-ARR38-C_b" />
+ <check enabled="true" name="CERT-ARR38-C_c" />
+ <check enabled="true" name="CERT-ARR38-C_d" />
+ <check enabled="true" name="CERT-ARR38-C_e" />
+ <check enabled="true" name="CERT-ARR38-C_f" />
+ <check enabled="true" name="CERT-ARR39-C" />
+ </group>
+ <group enabled="true" name="CERT-DCL">
+ <check enabled="true" name="CERT-DCL30-C_a" />
+ <check enabled="true" name="CERT-DCL30-C_b" />
+ <check enabled="true" name="CERT-DCL30-C_c" />
+ <check enabled="true" name="CERT-DCL30-C_d" />
+ <check enabled="true" name="CERT-DCL30-C_e" />
+ <check enabled="true" name="CERT-DCL31-C" />
+ <check enabled="true" name="CERT-DCL36-C" />
+ <check enabled="true" name="CERT-DCL37-C_a" />
+ <check enabled="true" name="CERT-DCL37-C_b" />
+ <check enabled="false" name="CERT-DCL37-C_c" />
+ <check enabled="true" name="CERT-DCL38-C" />
+ <check enabled="true" name="CERT-DCL39-C" />
+ <check enabled="true" name="CERT-DCL40-C" />
+ <check enabled="true" name="CERT-DCL41-C" />
+ </group>
+ <group enabled="true" name="CERT-ENV">
+ <check enabled="true" name="CERT-ENV30-C" />
+ <check enabled="true" name="CERT-ENV31-C" />
+ <check enabled="true" name="CERT-ENV32-C" />
+ <check enabled="true" name="CERT-ENV33-C" />
+ <check enabled="true" name="CERT-ENV34-C" />
+ </group>
+ <group enabled="true" name="CERT-ERR">
+ <check enabled="true" name="CERT-ERR30-C_a" />
+ <check enabled="true" name="CERT-ERR30-C_b" />
+ <check enabled="true" name="CERT-ERR30-C_c" />
+ <check enabled="true" name="CERT-ERR30-C_d" />
+ <check enabled="true" name="CERT-ERR32-C" />
+ <check enabled="true" name="CERT-ERR33-C_a" />
+ <check enabled="true" name="CERT-ERR33-C_b" />
+ <check enabled="true" name="CERT-ERR33-C_c" />
+ <check enabled="true" name="CERT-ERR33-C_d" />
+ <check enabled="true" name="CERT-ERR34-C_a" />
+ <check enabled="true" name="CERT-ERR34-C_b" />
+ </group>
+ <group enabled="true" name="CERT-EXP">
+ <check enabled="true" name="CERT-EXP19-C" />
+ <check enabled="true" name="CERT-EXP30-C_a" />
+ <check enabled="true" name="CERT-EXP30-C_b" />
+ <check enabled="true" name="CERT-EXP32-C" />
+ <check enabled="true" name="CERT-EXP33-C_a" />
+ <check enabled="true" name="CERT-EXP33-C_b" />
+ <check enabled="true" name="CERT-EXP33-C_c" />
+ <check enabled="true" name="CERT-EXP33-C_d" />
+ <check enabled="true" name="CERT-EXP33-C_e" />
+ <check enabled="true" name="CERT-EXP33-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_a" />
+ <check enabled="true" name="CERT-EXP34-C_b" />
+ <check enabled="true" name="CERT-EXP34-C_c" />
+ <check enabled="true" name="CERT-EXP34-C_d" />
+ <check enabled="true" name="CERT-EXP34-C_e" />
+ <check enabled="true" name="CERT-EXP34-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_g" />
+ <check enabled="true" name="CERT-EXP35-C" />
+ <check enabled="true" name="CERT-EXP36-C_a" />
+ <check enabled="true" name="CERT-EXP36-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_a" />
+ <check enabled="true" name="CERT-EXP37-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_a" />
+ <check enabled="true" name="CERT-EXP39-C_b" />
+ <check enabled="true" name="CERT-EXP39-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_d" />
+ <check enabled="true" name="CERT-EXP39-C_e" />
+ <check enabled="true" name="CERT-EXP40-C_a" />
+ <check enabled="true" name="CERT-EXP40-C_b" />
+ <check enabled="true" name="CERT-EXP42-C" />
+ <check enabled="true" name="CERT-EXP43-C_a" />
+ <check enabled="true" name="CERT-EXP43-C_b" />
+ <check enabled="true" name="CERT-EXP43-C_c" />
+ <check enabled="true" name="CERT-EXP43-C_d" />
+ <check enabled="true" name="CERT-EXP44-C" />
+ <check enabled="true" name="CERT-EXP45-C" />
+ <check enabled="true" name="CERT-EXP46-C" />
+ <check enabled="true" name="CERT-EXP47-C_a" />
+ <check enabled="true" name="CERT-EXP47-C_b" />
+ </group>
+ <group enabled="true" name="CERT-FIO">
+ <check enabled="true" name="CERT-FIO30-C" />
+ <check enabled="true" name="CERT-FIO32-C" />
+ <check enabled="true" name="CERT-FIO34-C" />
+ <check enabled="true" name="CERT-FIO37-C" />
+ <check enabled="true" name="CERT-FIO38-C" />
+ <check enabled="true" name="CERT-FIO39-C" />
+ <check enabled="true" name="CERT-FIO40-C" />
+ <check enabled="true" name="CERT-FIO41-C" />
+ <check enabled="true" name="CERT-FIO42-C_a" />
+ <check enabled="false" name="CERT-FIO42-C_b" />
+ <check enabled="true" name="CERT-FIO44-C" />
+ <check enabled="true" name="CERT-FIO45-C" />
+ <check enabled="true" name="CERT-FIO46-C_a" />
+ <check enabled="true" name="CERT-FIO46-C_b" />
+ <check enabled="true" name="CERT-FIO46-C_c" />
+ <check enabled="true" name="CERT-FIO47-C_a" />
+ <check enabled="true" name="CERT-FIO47-C_b" />
+ <check enabled="true" name="CERT-FIO47-C_c" />
+ </group>
+ <group enabled="true" name="CERT-FLP">
+ <check enabled="true" name="CERT-FLP30-C_a" />
+ <check enabled="true" name="CERT-FLP30-C_b" />
+ <check enabled="true" name="CERT-FLP32-C_a" />
+ <check enabled="true" name="CERT-FLP32-C_b" />
+ <check enabled="true" name="CERT-FLP34-C" />
+ <check enabled="true" name="CERT-FLP36-C" />
+ <check enabled="true" name="CERT-FLP37-C" />
+ </group>
+ <group enabled="true" name="CERT-INT">
+ <check enabled="true" name="CERT-INT30-C_a" />
+ <check enabled="false" name="CERT-INT30-C_b" />
+ <check enabled="true" name="CERT-INT31-C_a" />
+ <check enabled="true" name="CERT-INT31-C_b" />
+ <check enabled="true" name="CERT-INT31-C_c" />
+ <check enabled="true" name="CERT-INT32-C_a" />
+ <check enabled="false" name="CERT-INT32-C_b" />
+ <check enabled="true" name="CERT-INT33-C_a" />
+ <check enabled="true" name="CERT-INT33-C_b" />
+ <check enabled="true" name="CERT-INT33-C_c" />
+ <check enabled="true" name="CERT-INT33-C_d" />
+ <check enabled="true" name="CERT-INT33-C_e" />
+ <check enabled="true" name="CERT-INT33-C_f" />
+ <check enabled="true" name="CERT-INT33-C_g" />
+ <check enabled="true" name="CERT-INT33-C_h" />
+ <check enabled="true" name="CERT-INT33-C_i" />
+ <check enabled="true" name="CERT-INT34-C_a" />
+ <check enabled="true" name="CERT-INT34-C_b" />
+ <check enabled="true" name="CERT-INT34-C_c" />
+ <check enabled="true" name="CERT-INT35-C" />
+ <check enabled="true" name="CERT-INT36-C" />
+ </group>
+ <group enabled="true" name="CERT-MEM">
+ <check enabled="true" name="CERT-MEM30-C_a" />
+ <check enabled="true" name="CERT-MEM30-C_b" />
+ <check enabled="true" name="CERT-MEM30-C_c" />
+ <check enabled="true" name="CERT-MEM31-C" />
+ <check enabled="true" name="CERT-MEM33-C_a" />
+ <check enabled="true" name="CERT-MEM33-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_a" />
+ <check enabled="true" name="CERT-MEM34-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_c" />
+ <check enabled="true" name="CERT-MEM35-C_a" />
+ <check enabled="true" name="CERT-MEM35-C_b" />
+ <check enabled="true" name="CERT-MEM35-C_c" />
+ <check enabled="true" name="CERT-MEM36-C" />
+ </group>
+ <group enabled="true" name="CERT-MSC">
+ <check enabled="true" name="CERT-MSC30-C" />
+ <check enabled="true" name="CERT-MSC32-C" />
+ <check enabled="false" name="CERT-MSC33-C" />
+ <check enabled="true" name="CERT-MSC37-C" />
+ <check enabled="true" name="CERT-MSC38-C" />
+ <check enabled="true" name="CERT-MSC39-C" />
+ <check enabled="true" name="CERT-MSC40-C_a" />
+ <check enabled="true" name="CERT-MSC40-C_b" />
+ <check enabled="true" name="CERT-MSC40-C_c" />
+ <check enabled="true" name="CERT-MSC40-C_d" />
+ <check enabled="false" name="CERT-MSC40-C_e" />
+ <check enabled="true" name="CERT-MSC41-C_a" />
+ <check enabled="true" name="CERT-MSC41-C_b" />
+ <check enabled="true" name="CERT-MSC41-C_c" />
+ </group>
+ <group enabled="true" name="CERT-PRE">
+ <check enabled="true" name="CERT-PRE31-C" />
+ <check enabled="true" name="CERT-PRE32-C_a" />
+ <check enabled="true" name="CERT-PRE32-C_b" />
+ </group>
+ <group enabled="true" name="CERT-SIG">
+ <check enabled="true" name="CERT-SIG30-C" />
+ <check enabled="true" name="CERT-SIG31-C" />
+ <check enabled="true" name="CERT-SIG34-C" />
+ <check enabled="true" name="CERT-SIG35-C" />
+ </group>
+ <group enabled="true" name="CERT-STR">
+ <check enabled="true" name="CERT-STR30-C" />
+ <check enabled="true" name="CERT-STR31-C_a" />
+ <check enabled="true" name="CERT-STR31-C_b" />
+ <check enabled="true" name="CERT-STR31-C_c" />
+ <check enabled="true" name="CERT-STR31-C_d" />
+ <check enabled="true" name="CERT-STR31-C_e" />
+ <check enabled="true" name="CERT-STR31-C_f" />
+ <check enabled="true" name="CERT-STR31-C_g" />
+ <check enabled="true" name="CERT-STR31-C_h" />
+ <check enabled="true" name="CERT-STR32-C" />
+ <check enabled="true" name="CERT-STR34-C" />
+ <check enabled="true" name="CERT-STR37-C" />
+ </group>
+ </package>
+ <package enabled="false" name="SECURITY">
+ <group enabled="true" name="SEC-BUFFER">
+ <check enabled="true" name="SEC-BUFFER-memory-leak-alias" />
+ <check enabled="false" name="SEC-BUFFER-memory-leak" />
+ <check enabled="false" name="SEC-BUFFER-memset-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-memset-overrun" />
+ <check enabled="false" name="SEC-BUFFER-qsort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-qsort-overrun" />
+ <check enabled="true" name="SEC-BUFFER-sprintf-overrun" />
+ <check enabled="false" name="SEC-BUFFER-std-sort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-std-sort-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcpy-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncmp-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncmp-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncpy-overrun" />
+ <check enabled="true" name="SEC-BUFFER-tainted-alloc-size" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy-length" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy" />
+ <check enabled="true" name="SEC-BUFFER-tainted-index" />
+ <check enabled="true" name="SEC-BUFFER-tainted-offset" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-all" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-some" />
+ </group>
+ <group enabled="true" name="SEC-DIV-0">
+ <check enabled="true" name="SEC-DIV-0-compare-after" />
+ <check enabled="true" name="SEC-DIV-0-compare-before" />
+ <check enabled="true" name="SEC-DIV-0-tainted" />
+ </group>
+ <group enabled="true" name="SEC-FILEOP">
+ <check enabled="true" name="SEC-FILEOP-open-no-close" />
+ <check enabled="false" name="SEC-FILEOP-path-traversal" />
+ <check enabled="true" name="SEC-FILEOP-use-after-close" />
+ </group>
+ <group enabled="true" name="SEC-INJECTION">
+ <check enabled="false" name="SEC-INJECTION-sql" />
+ <check enabled="false" name="SEC-INJECTION-xpath" />
+ </group>
+ <group enabled="true" name="SEC-LOOP">
+ <check enabled="true" name="SEC-LOOP-tainted-bound" />
+ </group>
+ <group enabled="true" name="SEC-NULL">
+ <check enabled="false" name="SEC-NULL-assignment-fun-pos" />
+ <check enabled="true" name="SEC-NULL-assignment" />
+ <check enabled="true" name="SEC-NULL-cmp-aft" />
+ <check enabled="true" name="SEC-NULL-cmp-bef-fun" />
+ <check enabled="true" name="SEC-NULL-cmp-bef" />
+ <check enabled="false" name="SEC-NULL-literal-pos" />
+ </group>
+ <group enabled="true" name="SEC-STRING">
+ <check enabled="true" name="SEC-STRING-format-string" />
+ <check enabled="false" name="SEC-STRING-hard-coded-credentials" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2004">
+ <group enabled="true" name="MISRAC2004-1">
+ <check enabled="true" name="MISRAC2004-1.1" />
+ <check enabled="true" name="MISRAC2004-1.2_a" />
+ <check enabled="true" name="MISRAC2004-1.2_b" />
+ <check enabled="true" name="MISRAC2004-1.2_c" />
+ <check enabled="true" name="MISRAC2004-1.2_d" />
+ <check enabled="true" name="MISRAC2004-1.2_e" />
+ <check enabled="true" name="MISRAC2004-1.2_f" />
+ <check enabled="true" name="MISRAC2004-1.2_g" />
+ <check enabled="true" name="MISRAC2004-1.2_h" />
+ <check enabled="true" name="MISRAC2004-1.2_i" />
+ <check enabled="true" name="MISRAC2004-1.2_j" />
+ </group>
+ <group enabled="true" name="MISRAC2004-2">
+ <check enabled="true" name="MISRAC2004-2.1" />
+ <check enabled="true" name="MISRAC2004-2.2" />
+ <check enabled="true" name="MISRAC2004-2.3" />
+ <check enabled="false" name="MISRAC2004-2.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-5">
+ <check enabled="true" name="MISRAC2004-5.1" />
+ <check enabled="true" name="MISRAC2004-5.2" />
+ <check enabled="true" name="MISRAC2004-5.3" />
+ <check enabled="true" name="MISRAC2004-5.4" />
+ <check enabled="false" name="MISRAC2004-5.5" />
+ <check enabled="false" name="MISRAC2004-5.6" />
+ <check enabled="false" name="MISRAC2004-5.7" />
+ </group>
+ <group enabled="true" name="MISRAC2004-6">
+ <check enabled="true" name="MISRAC2004-6.1" />
+ <check enabled="true" name="MISRAC2004-6.2" />
+ <check enabled="false" name="MISRAC2004-6.3" />
+ <check enabled="true" name="MISRAC2004-6.4" />
+ <check enabled="true" name="MISRAC2004-6.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-7">
+ <check enabled="true" name="MISRAC2004-7.1" />
+ </group>
+ <group enabled="true" name="MISRAC2004-8">
+ <check enabled="true" name="MISRAC2004-8.1" />
+ <check enabled="true" name="MISRAC2004-8.2" />
+ <check enabled="true" name="MISRAC2004-8.3" />
+ <check enabled="true" name="MISRAC2004-8.5_a" />
+ <check enabled="true" name="MISRAC2004-8.5_b" />
+ <check enabled="true" name="MISRAC2004-8.6" />
+ <check enabled="true" name="MISRAC2004-8.7" />
+ <check enabled="true" name="MISRAC2004-8.8_a" />
+ <check enabled="true" name="MISRAC2004-8.8_b" />
+ <check enabled="true" name="MISRAC2004-8.10" />
+ <check enabled="true" name="MISRAC2004-8.12" />
+ </group>
+ <group enabled="true" name="MISRAC2004-9">
+ <check enabled="true" name="MISRAC2004-9.1_a" />
+ <check enabled="true" name="MISRAC2004-9.1_b" />
+ <check enabled="true" name="MISRAC2004-9.1_c" />
+ <check enabled="true" name="MISRAC2004-9.2" />
+ <check enabled="true" name="MISRAC2004-9.3" />
+ </group>
+ <group enabled="true" name="MISRAC2004-10">
+ <check enabled="true" name="MISRAC2004-10.1_a" />
+ <check enabled="true" name="MISRAC2004-10.1_b" />
+ <check enabled="true" name="MISRAC2004-10.1_c" />
+ <check enabled="true" name="MISRAC2004-10.1_d" />
+ <check enabled="true" name="MISRAC2004-10.2_a" />
+ <check enabled="true" name="MISRAC2004-10.2_b" />
+ <check enabled="true" name="MISRAC2004-10.2_c" />
+ <check enabled="true" name="MISRAC2004-10.2_d" />
+ <check enabled="true" name="MISRAC2004-10.3" />
+ <check enabled="true" name="MISRAC2004-10.4" />
+ <check enabled="true" name="MISRAC2004-10.5" />
+ <check enabled="true" name="MISRAC2004-10.6" />
+ </group>
+ <group enabled="true" name="MISRAC2004-11">
+ <check enabled="true" name="MISRAC2004-11.1" />
+ <check enabled="false" name="MISRAC2004-11.3" />
+ <check enabled="false" name="MISRAC2004-11.4" />
+ <check enabled="true" name="MISRAC2004-11.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-12">
+ <check enabled="false" name="MISRAC2004-12.1" />
+ <check enabled="true" name="MISRAC2004-12.2_a" />
+ <check enabled="true" name="MISRAC2004-12.2_b" />
+ <check enabled="true" name="MISRAC2004-12.2_c" />
+ <check enabled="true" name="MISRAC2004-12.3" />
+ <check enabled="true" name="MISRAC2004-12.4" />
+ <check enabled="true" name="MISRAC2004-12.5" />
+ <check enabled="false" name="MISRAC2004-12.6_a" />
+ <check enabled="false" name="MISRAC2004-12.6_b" />
+ <check enabled="true" name="MISRAC2004-12.7" />
+ <check enabled="true" name="MISRAC2004-12.8" />
+ <check enabled="true" name="MISRAC2004-12.9" />
+ <check enabled="true" name="MISRAC2004-12.10" />
+ <check enabled="false" name="MISRAC2004-12.11" />
+ <check enabled="true" name="MISRAC2004-12.12_a" />
+ <check enabled="true" name="MISRAC2004-12.12_b" />
+ <check enabled="false" name="MISRAC2004-12.13" />
+ </group>
+ <group enabled="true" name="MISRAC2004-13">
+ <check enabled="true" name="MISRAC2004-13.1" />
+ <check enabled="false" name="MISRAC2004-13.2_a" />
+ <check enabled="false" name="MISRAC2004-13.2_b" />
+ <check enabled="false" name="MISRAC2004-13.2_c" />
+ <check enabled="false" name="MISRAC2004-13.2_d" />
+ <check enabled="false" name="MISRAC2004-13.2_e" />
+ <check enabled="true" name="MISRAC2004-13.3" />
+ <check enabled="true" name="MISRAC2004-13.4" />
+ <check enabled="true" name="MISRAC2004-13.5" />
+ <check enabled="true" name="MISRAC2004-13.6" />
+ <check enabled="true" name="MISRAC2004-13.7_a" />
+ <check enabled="true" name="MISRAC2004-13.7_b" />
+ </group>
+ <group enabled="true" name="MISRAC2004-14">
+ <check enabled="true" name="MISRAC2004-14.1" />
+ <check enabled="true" name="MISRAC2004-14.2" />
+ <check enabled="true" name="MISRAC2004-14.3" />
+ <check enabled="true" name="MISRAC2004-14.4" />
+ <check enabled="true" name="MISRAC2004-14.5" />
+ <check enabled="true" name="MISRAC2004-14.6" />
+ <check enabled="true" name="MISRAC2004-14.7" />
+ <check enabled="true" name="MISRAC2004-14.8_a" />
+ <check enabled="true" name="MISRAC2004-14.8_b" />
+ <check enabled="true" name="MISRAC2004-14.8_c" />
+ <check enabled="true" name="MISRAC2004-14.8_d" />
+ <check enabled="true" name="MISRAC2004-14.9" />
+ <check enabled="true" name="MISRAC2004-14.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-15">
+ <check enabled="true" name="MISRAC2004-15.0" />
+ <check enabled="true" name="MISRAC2004-15.1" />
+ <check enabled="true" name="MISRAC2004-15.2" />
+ <check enabled="true" name="MISRAC2004-15.3" />
+ <check enabled="true" name="MISRAC2004-15.4" />
+ <check enabled="true" name="MISRAC2004-15.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-16">
+ <check enabled="true" name="MISRAC2004-16.1" />
+ <check enabled="true" name="MISRAC2004-16.2_a" />
+ <check enabled="true" name="MISRAC2004-16.2_b" />
+ <check enabled="true" name="MISRAC2004-16.3" />
+ <check enabled="true" name="MISRAC2004-16.4" />
+ <check enabled="true" name="MISRAC2004-16.5" />
+ <check enabled="true" name="MISRAC2004-16.7" />
+ <check enabled="true" name="MISRAC2004-16.8" />
+ <check enabled="true" name="MISRAC2004-16.9" />
+ <check enabled="true" name="MISRAC2004-16.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-17">
+ <check enabled="true" name="MISRAC2004-17.1_a" />
+ <check enabled="true" name="MISRAC2004-17.1_b" />
+ <check enabled="true" name="MISRAC2004-17.1_c" />
+ <check enabled="true" name="MISRAC2004-17.2" />
+ <check enabled="true" name="MISRAC2004-17.3" />
+ <check enabled="true" name="MISRAC2004-17.4_a" />
+ <check enabled="true" name="MISRAC2004-17.4_b" />
+ <check enabled="true" name="MISRAC2004-17.5" />
+ <check enabled="true" name="MISRAC2004-17.6_a" />
+ <check enabled="true" name="MISRAC2004-17.6_b" />
+ <check enabled="true" name="MISRAC2004-17.6_c" />
+ <check enabled="true" name="MISRAC2004-17.6_d" />
+ </group>
+ <group enabled="true" name="MISRAC2004-18">
+ <check enabled="true" name="MISRAC2004-18.1" />
+ <check enabled="true" name="MISRAC2004-18.2" />
+ <check enabled="true" name="MISRAC2004-18.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-19">
+ <check enabled="false" name="MISRAC2004-19.1" />
+ <check enabled="false" name="MISRAC2004-19.2" />
+ <check enabled="true" name="MISRAC2004-19.4" />
+ <check enabled="true" name="MISRAC2004-19.5" />
+ <check enabled="true" name="MISRAC2004-19.6" />
+ <check enabled="false" name="MISRAC2004-19.7" />
+ <check enabled="true" name="MISRAC2004-19.10" />
+ <check enabled="true" name="MISRAC2004-19.12" />
+ <check enabled="false" name="MISRAC2004-19.13" />
+ <check enabled="true" name="MISRAC2004-19.15" />
+ </group>
+ <group enabled="true" name="MISRAC2004-20">
+ <check enabled="true" name="MISRAC2004-20.1" />
+ <check enabled="true" name="MISRAC2004-20.2" />
+ <check enabled="true" name="MISRAC2004-20.3_a" />
+ <check enabled="true" name="MISRAC2004-20.3_b" />
+ <check enabled="true" name="MISRAC2004-20.3_c" />
+ <check enabled="true" name="MISRAC2004-20.3_d" />
+ <check enabled="true" name="MISRAC2004-20.3_e" />
+ <check enabled="true" name="MISRAC2004-20.3_f" />
+ <check enabled="true" name="MISRAC2004-20.3_g" />
+ <check enabled="true" name="MISRAC2004-20.3_h" />
+ <check enabled="true" name="MISRAC2004-20.3_i" />
+ <check enabled="true" name="MISRAC2004-20.4" />
+ <check enabled="true" name="MISRAC2004-20.5" />
+ <check enabled="true" name="MISRAC2004-20.6" />
+ <check enabled="true" name="MISRAC2004-20.7" />
+ <check enabled="true" name="MISRAC2004-20.8" />
+ <check enabled="true" name="MISRAC2004-20.9" />
+ <check enabled="true" name="MISRAC2004-20.10" />
+ <check enabled="true" name="MISRAC2004-20.11" />
+ <check enabled="true" name="MISRAC2004-20.12" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2012">
+ <group enabled="true" name="MISRAC2012-Dir-4">
+ <check enabled="true" name="MISRAC2012-Dir-4.3" />
+ <check enabled="false" name="MISRAC2012-Dir-4.4" />
+ <check enabled="false" name="MISRAC2012-Dir-4.5" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.8" />
+ <check enabled="false" name="MISRAC2012-Dir-4.9" />
+ <check enabled="true" name="MISRAC2012-Dir-4.10" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_d" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_e" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_f" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_h" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_i" />
+ <check enabled="false" name="MISRAC2012-Dir-4.12" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_b" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_c" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_d" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_e" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_f" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.13_h" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-1">
+ <check enabled="true" name="MISRAC2012-Rule-1.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_c" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_d" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_e" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_f" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_g" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_h" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_i" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_j" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_k" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_m" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_n" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_o" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_p" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_q" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_r" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_s" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_t" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_u" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_v" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_w" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-2">
+ <check enabled="true" name="MISRAC2012-Rule-2.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-2.3" />
+ <check enabled="false" name="MISRAC2012-Rule-2.4" />
+ <check enabled="false" name="MISRAC2012-Rule-2.5" />
+ <check enabled="false" name="MISRAC2012-Rule-2.6" />
+ <check enabled="false" name="MISRAC2012-Rule-2.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-3">
+ <check enabled="true" name="MISRAC2012-Rule-3.1" />
+ <check enabled="true" name="MISRAC2012-Rule-3.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-5">
+ <check enabled="true" name="MISRAC2012-Rule-5.1" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.6" />
+ <check enabled="true" name="MISRAC2012-Rule-5.7" />
+ <check enabled="true" name="MISRAC2012-Rule-5.8" />
+ <check enabled="false" name="MISRAC2012-Rule-5.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-6">
+ <check enabled="true" name="MISRAC2012-Rule-6.1" />
+ <check enabled="true" name="MISRAC2012-Rule-6.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-7">
+ <check enabled="true" name="MISRAC2012-Rule-7.1" />
+ <check enabled="true" name="MISRAC2012-Rule-7.2" />
+ <check enabled="true" name="MISRAC2012-Rule-7.3" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-8">
+ <check enabled="true" name="MISRAC2012-Rule-8.1" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.3" />
+ <check enabled="true" name="MISRAC2012-Rule-8.4" />
+ <check enabled="false" name="MISRAC2012-Rule-8.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.5_b" />
+ <check enabled="false" name="MISRAC2012-Rule-8.7" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_a" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.10" />
+ <check enabled="false" name="MISRAC2012-Rule-8.11" />
+ <check enabled="true" name="MISRAC2012-Rule-8.12" />
+ <check enabled="false" name="MISRAC2012-Rule-8.13" />
+ <check enabled="true" name="MISRAC2012-Rule-8.14" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-9">
+ <check enabled="true" name="MISRAC2012-Rule-9.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_e" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_f" />
+ <check enabled="true" name="MISRAC2012-Rule-9.2" />
+ <check enabled="true" name="MISRAC2012-Rule-9.3" />
+ <check enabled="true" name="MISRAC2012-Rule-9.4" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-10">
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R4" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
+ <check enabled="true" name="MISRAC2012-Rule-10.2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_b" />
+ <check enabled="false" name="MISRAC2012-Rule-10.5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-11">
+ <check enabled="true" name="MISRAC2012-Rule-11.1" />
+ <check enabled="true" name="MISRAC2012-Rule-11.2" />
+ <check enabled="true" name="MISRAC2012-Rule-11.3" />
+ <check enabled="false" name="MISRAC2012-Rule-11.4" />
+ <check enabled="false" name="MISRAC2012-Rule-11.5" />
+ <check enabled="true" name="MISRAC2012-Rule-11.6" />
+ <check enabled="true" name="MISRAC2012-Rule-11.7" />
+ <check enabled="true" name="MISRAC2012-Rule-11.8" />
+ <check enabled="true" name="MISRAC2012-Rule-11.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-12">
+ <check enabled="false" name="MISRAC2012-Rule-12.1" />
+ <check enabled="true" name="MISRAC2012-Rule-12.2" />
+ <check enabled="false" name="MISRAC2012-Rule-12.3" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-13">
+ <check enabled="true" name="MISRAC2012-Rule-13.1" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-13.3" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_a" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.5" />
+ <check enabled="true" name="MISRAC2012-Rule-13.6" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-14">
+ <check enabled="true" name="MISRAC2012-Rule-14.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.2" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_c" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_d" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-15">
+ <check enabled="false" name="MISRAC2012-Rule-15.1" />
+ <check enabled="true" name="MISRAC2012-Rule-15.2" />
+ <check enabled="true" name="MISRAC2012-Rule-15.3" />
+ <check enabled="false" name="MISRAC2012-Rule-15.4" />
+ <check enabled="false" name="MISRAC2012-Rule-15.5" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_e" />
+ <check enabled="true" name="MISRAC2012-Rule-15.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-16">
+ <check enabled="true" name="MISRAC2012-Rule-16.1" />
+ <check enabled="true" name="MISRAC2012-Rule-16.2" />
+ <check enabled="true" name="MISRAC2012-Rule-16.3" />
+ <check enabled="true" name="MISRAC2012-Rule-16.4" />
+ <check enabled="true" name="MISRAC2012-Rule-16.5" />
+ <check enabled="true" name="MISRAC2012-Rule-16.6" />
+ <check enabled="true" name="MISRAC2012-Rule-16.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-17">
+ <check enabled="true" name="MISRAC2012-Rule-17.1" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-17.3" />
+ <check enabled="true" name="MISRAC2012-Rule-17.4" />
+ <check enabled="false" name="MISRAC2012-Rule-17.5" />
+ <check enabled="true" name="MISRAC2012-Rule-17.6" />
+ <check enabled="true" name="MISRAC2012-Rule-17.7" />
+ <check enabled="false" name="MISRAC2012-Rule-17.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-18">
+ <check enabled="true" name="MISRAC2012-Rule-18.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.2" />
+ <check enabled="true" name="MISRAC2012-Rule-18.3" />
+ <check enabled="true" name="MISRAC2012-Rule-18.4" />
+ <check enabled="false" name="MISRAC2012-Rule-18.5" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.7" />
+ <check enabled="true" name="MISRAC2012-Rule-18.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-19">
+ <check enabled="true" name="MISRAC2012-Rule-19.1" />
+ <check enabled="false" name="MISRAC2012-Rule-19.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-20">
+ <check enabled="false" name="MISRAC2012-Rule-20.1" />
+ <check enabled="true" name="MISRAC2012-Rule-20.2" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c99" />
+ <check enabled="false" name="MISRAC2012-Rule-20.5" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-20.7" />
+ <check enabled="false" name="MISRAC2012-Rule-20.10" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-21">
+ <check enabled="true" name="MISRAC2012-Rule-21.1" />
+ <check enabled="true" name="MISRAC2012-Rule-21.2" />
+ <check enabled="true" name="MISRAC2012-Rule-21.3" />
+ <check enabled="true" name="MISRAC2012-Rule-21.4" />
+ <check enabled="true" name="MISRAC2012-Rule-21.5" />
+ <check enabled="true" name="MISRAC2012-Rule-21.6" />
+ <check enabled="true" name="MISRAC2012-Rule-21.7" />
+ <check enabled="true" name="MISRAC2012-Rule-21.8" />
+ <check enabled="true" name="MISRAC2012-Rule-21.9" />
+ <check enabled="true" name="MISRAC2012-Rule-21.10" />
+ <check enabled="true" name="MISRAC2012-Rule-21.11" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_a" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-22">
+ <check enabled="true" name="MISRAC2012-Rule-22.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_c" />
+ <check enabled="true" name="MISRAC2012-Rule-22.3" />
+ <check enabled="true" name="MISRAC2012-Rule-22.4" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.6" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC++2008">
+ <group enabled="true" name="MISRAC++2008-0-1">
+ <check enabled="true" name="MISRAC++2008-0-1-1" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_c" />
+ <check enabled="true" name="MISRAC++2008-0-1-3" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-6" />
+ <check enabled="true" name="MISRAC++2008-0-1-7" />
+ <check enabled="false" name="MISRAC++2008-0-1-8" />
+ <check enabled="true" name="MISRAC++2008-0-1-9" />
+ <check enabled="true" name="MISRAC++2008-0-1-11" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-2">
+ <check enabled="true" name="MISRAC++2008-0-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-3">
+ <check enabled="true" name="MISRAC++2008-0-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-7">
+ <check enabled="true" name="MISRAC++2008-2-7-1" />
+ <check enabled="true" name="MISRAC++2008-2-7-2" />
+ <check enabled="false" name="MISRAC++2008-2-7-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-10">
+ <check enabled="true" name="MISRAC++2008-2-10-1" />
+ <check enabled="true" name="MISRAC++2008-2-10-2" />
+ <check enabled="true" name="MISRAC++2008-2-10-3" />
+ <check enabled="true" name="MISRAC++2008-2-10-4" />
+ <check enabled="false" name="MISRAC++2008-2-10-5" />
+ <check enabled="true" name="MISRAC++2008-2-10-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-13">
+ <check enabled="true" name="MISRAC++2008-2-13-2" />
+ <check enabled="true" name="MISRAC++2008-2-13-3" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_a" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-1">
+ <check enabled="true" name="MISRAC++2008-3-1-1" />
+ <check enabled="true" name="MISRAC++2008-3-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-9">
+ <check enabled="false" name="MISRAC++2008-3-9-2" />
+ <check enabled="true" name="MISRAC++2008-3-9-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-4-5">
+ <check enabled="true" name="MISRAC++2008-4-5-1" />
+ <check enabled="true" name="MISRAC++2008-4-5-2" />
+ <check enabled="true" name="MISRAC++2008-4-5-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-0">
+ <check enabled="true" name="MISRAC++2008-5-0-1_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_c" />
+ <check enabled="false" name="MISRAC++2008-5-0-2" />
+ <check enabled="true" name="MISRAC++2008-5-0-3" />
+ <check enabled="true" name="MISRAC++2008-5-0-4" />
+ <check enabled="true" name="MISRAC++2008-5-0-5" />
+ <check enabled="true" name="MISRAC++2008-5-0-6" />
+ <check enabled="true" name="MISRAC++2008-5-0-7" />
+ <check enabled="true" name="MISRAC++2008-5-0-8" />
+ <check enabled="true" name="MISRAC++2008-5-0-9" />
+ <check enabled="true" name="MISRAC++2008-5-0-10" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-14" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_e" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_f" />
+ <check enabled="true" name="MISRAC++2008-5-0-19" />
+ <check enabled="true" name="MISRAC++2008-5-0-21" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-2">
+ <check enabled="true" name="MISRAC++2008-5-2-4" />
+ <check enabled="true" name="MISRAC++2008-5-2-5" />
+ <check enabled="true" name="MISRAC++2008-5-2-6" />
+ <check enabled="true" name="MISRAC++2008-5-2-7" />
+ <check enabled="false" name="MISRAC++2008-5-2-9" />
+ <check enabled="false" name="MISRAC++2008-5-2-10" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_a" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-3">
+ <check enabled="true" name="MISRAC++2008-5-3-1" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_a" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_b" />
+ <check enabled="true" name="MISRAC++2008-5-3-3" />
+ <check enabled="true" name="MISRAC++2008-5-3-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-8">
+ <check enabled="true" name="MISRAC++2008-5-8-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-14">
+ <check enabled="true" name="MISRAC++2008-5-14-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-18">
+ <check enabled="true" name="MISRAC++2008-5-18-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-19">
+ <check enabled="false" name="MISRAC++2008-5-19-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-2">
+ <check enabled="true" name="MISRAC++2008-6-2-1" />
+ <check enabled="true" name="MISRAC++2008-6-2-2" />
+ <check enabled="false" name="MISRAC++2008-6-2-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-3">
+ <check enabled="true" name="MISRAC++2008-6-3-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_c" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_d" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-4">
+ <check enabled="true" name="MISRAC++2008-6-4-1" />
+ <check enabled="true" name="MISRAC++2008-6-4-2" />
+ <check enabled="true" name="MISRAC++2008-6-4-3" />
+ <check enabled="true" name="MISRAC++2008-6-4-4" />
+ <check enabled="true" name="MISRAC++2008-6-4-5" />
+ <check enabled="true" name="MISRAC++2008-6-4-6" />
+ <check enabled="true" name="MISRAC++2008-6-4-7" />
+ <check enabled="true" name="MISRAC++2008-6-4-8" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-5">
+ <check enabled="true" name="MISRAC++2008-6-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-5-2" />
+ <check enabled="true" name="MISRAC++2008-6-5-3" />
+ <check enabled="true" name="MISRAC++2008-6-5-4" />
+ <check enabled="true" name="MISRAC++2008-6-5-5" />
+ <check enabled="true" name="MISRAC++2008-6-5-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-6">
+ <check enabled="true" name="MISRAC++2008-6-6-1" />
+ <check enabled="true" name="MISRAC++2008-6-6-2" />
+ <check enabled="true" name="MISRAC++2008-6-6-4" />
+ <check enabled="true" name="MISRAC++2008-6-6-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-1">
+ <check enabled="true" name="MISRAC++2008-7-1-1" />
+ <check enabled="true" name="MISRAC++2008-7-1-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-2">
+ <check enabled="true" name="MISRAC++2008-7-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-4">
+ <check enabled="true" name="MISRAC++2008-7-4-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-5">
+ <check enabled="true" name="MISRAC++2008-7-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_c" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_d" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_a" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-0">
+ <check enabled="true" name="MISRAC++2008-8-0-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-4">
+ <check enabled="true" name="MISRAC++2008-8-4-1" />
+ <check enabled="true" name="MISRAC++2008-8-4-3" />
+ <check enabled="true" name="MISRAC++2008-8-4-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-5">
+ <check enabled="true" name="MISRAC++2008-8-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_c" />
+ <check enabled="true" name="MISRAC++2008-8-5-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-3">
+ <check enabled="true" name="MISRAC++2008-9-3-1" />
+ <check enabled="true" name="MISRAC++2008-9-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-5">
+ <check enabled="true" name="MISRAC++2008-9-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-6">
+ <check enabled="true" name="MISRAC++2008-9-6-2" />
+ <check enabled="true" name="MISRAC++2008-9-6-3" />
+ <check enabled="true" name="MISRAC++2008-9-6-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-12-1">
+ <check enabled="true" name="MISRAC++2008-12-1-1_a" />
+ <check enabled="true" name="MISRAC++2008-12-1-1_b" />
+ <check enabled="true" name="MISRAC++2008-12-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-0">
+ <check enabled="false" name="MISRAC++2008-15-0-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-1">
+ <check enabled="true" name="MISRAC++2008-15-1-2" />
+ <check enabled="true" name="MISRAC++2008-15-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-3">
+ <check enabled="true" name="MISRAC++2008-15-3-1" />
+ <check enabled="false" name="MISRAC++2008-15-3-2" />
+ <check enabled="true" name="MISRAC++2008-15-3-3" />
+ <check enabled="true" name="MISRAC++2008-15-3-4" />
+ <check enabled="true" name="MISRAC++2008-15-3-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-5">
+ <check enabled="true" name="MISRAC++2008-15-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-0">
+ <check enabled="true" name="MISRAC++2008-16-0-3" />
+ <check enabled="true" name="MISRAC++2008-16-0-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-2">
+ <check enabled="true" name="MISRAC++2008-16-2-2" />
+ <check enabled="true" name="MISRAC++2008-16-2-3" />
+ <check enabled="true" name="MISRAC++2008-16-2-4" />
+ <check enabled="false" name="MISRAC++2008-16-2-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-3">
+ <check enabled="true" name="MISRAC++2008-16-3-1" />
+ <check enabled="false" name="MISRAC++2008-16-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-17-0">
+ <check enabled="true" name="MISRAC++2008-17-0-1" />
+ <check enabled="true" name="MISRAC++2008-17-0-3" />
+ <check enabled="true" name="MISRAC++2008-17-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-0">
+ <check enabled="true" name="MISRAC++2008-18-0-1" />
+ <check enabled="true" name="MISRAC++2008-18-0-2" />
+ <check enabled="true" name="MISRAC++2008-18-0-3" />
+ <check enabled="true" name="MISRAC++2008-18-0-4" />
+ <check enabled="true" name="MISRAC++2008-18-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-2">
+ <check enabled="true" name="MISRAC++2008-18-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-4">
+ <check enabled="true" name="MISRAC++2008-18-4-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-7">
+ <check enabled="true" name="MISRAC++2008-18-7-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-19-3">
+ <check enabled="true" name="MISRAC++2008-19-3-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-27-0">
+ <check enabled="true" name="MISRAC++2008-27-0-1" />
+ </group>
+ </package>
+ </checks_tree>
+ </cstat_settings>
+ </data>
+ </settings>
+ <settings>
+ <name>RuntimeChecking</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>GenRtcDebugHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnableBoundsChecking</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrMem</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcTrackPointerBounds</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcCheckAccesses</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcGenerateEntries</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcNrTrackedPointers</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>GenRtcIntOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIncUnsigned</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntConversion</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclExplicit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclUnsignedShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcUnhandledCase</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcDivByZero</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrFunc</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ </configuration>
+ <group>
+ <name>Common sources</name>
+ <file>
+ <name>$PROJ_DIR$\cstartup.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\sample_threadx.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\Debug\Exe\tx.a</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_api.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_initialize_low_level.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\tx_port.h</name>
+ </file>
+ </group>
+</project>
diff --git a/ports/arm11/iar/example_build/sample_threadx.icf b/ports/arm11/iar/example_build/sample_threadx.icf
new file mode 100644
index 00000000..9c95e1d1
--- /dev/null
+++ b/ports/arm11/iar/example_build/sample_threadx.icf
@@ -0,0 +1,49 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x0;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x80;
+define symbol __ICFEDIT_region_ROM_end__ = 0x1FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x2000;
+define symbol __ICFEDIT_size_svcstack__ = 0x100;
+define symbol __ICFEDIT_size_irqstack__ = 0x100;
+define symbol __ICFEDIT_size_fiqstack__ = 0x100;
+define symbol __ICFEDIT_size_undstack__ = 0x100;
+define symbol __ICFEDIT_size_abtstack__ = 0x100;
+define symbol __ICFEDIT_size_heap__ = 0x8000;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __ICFEDIT_size_freemem__ = 0x100000;
+
+
+define memory mem with size = 4G;
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
+define region RAM_freemem = mem:[from 0x200000 to 0x300000];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
+define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
+define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
+define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
+define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+
+initialize by copy { readwrite };
+initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
+do not initialize { section .noinit };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in ROM_region { readonly };
+place in RAM_region { readwrite,
+ block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
+ block UND_STACK, block ABT_STACK, block HEAP};
+
+place in RAM_region { last section FREE_MEM}; \ No newline at end of file
diff --git a/ports/arm11/iar/example_build/settings/azure_rtos.wsdt b/ports/arm11/iar/example_build/settings/azure_rtos.wsdt
new file mode 100644
index 00000000..378e4584
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/azure_rtos.wsdt
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace>
+ <ConfigDictionary>
+ <CurrentConfigs>
+ <Project>sample_threadx/Debug</Project>
+ <Project>tx/Debug</Project>
+ </CurrentConfigs>
+ <CurrentProj>sample_threadx</CurrentProj>
+ <OverviewSelected>1</OverviewSelected>
+ </ConfigDictionary>
+ <WindowStorage>
+ <Desktop>
+ <IarPane-34048>
+ <ColumnWidth0>21</ColumnWidth0>
+ <ColumnWidth1>2518</ColumnWidth1>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34048>
+ <IarPane-34049>
+ <ToolBarCmdIds>
+ <item>34001</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34049>
+ <IarPane-34050>
+ <ToolBarCmdIds>
+ <item>57600</item>
+ <item>57601</item>
+ <item>57603</item>
+ <item>33024</item>
+ <item>0</item>
+ <item>57607</item>
+ <item>0</item>
+ <item>57635</item>
+ <item>57634</item>
+ <item>57637</item>
+ <item>0</item>
+ <item>57643</item>
+ <item>57644</item>
+ <item>0</item>
+ <item>33090</item>
+ <item>33057</item>
+ <item>57636</item>
+ <item>57640</item>
+ <item>57641</item>
+ <item>33026</item>
+ <item>33065</item>
+ <item>33063</item>
+ <item>33064</item>
+ <item>33053</item>
+ <item>33054</item>
+ <item>0</item>
+ <item>33035</item>
+ <item>33036</item>
+ <item>34399</item>
+ <item>0</item>
+ <item>33038</item>
+ <item>33039</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34050>
+ <IarPane-34065>
+ <ColumnWidths>
+ <Column0>359</Column0>
+ <Column1>30</Column1>
+ <Column2>30</Column2>
+ <Column3>30</Column3>
+ </ColumnWidths>
+ <NodeDict>
+ <ExpandedNode>&lt;ws&gt;</ExpandedNode>
+ </NodeDict>
+ </IarPane-34065>
+ <ControlBarVersion>
+ <Major>14</Major>
+ <Minor>26</Minor>
+ </ControlBarVersion>
+ <MFCToolBarParameters>
+ <Tooltips>1</Tooltips>
+ <ShortcutKeys>1</ShortcutKeys>
+ <LargeIcons>0</LargeIcons>
+ <MenuAnimation>0</MenuAnimation>
+ <RecentlyUsedMenus>1</RecentlyUsedMenus>
+ <MenuShadows>1</MenuShadows>
+ <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
+ <CommandsUsage>010000000D002596000001000000108600000B0000000C8100000300000004860000010000001781000002000000148100000100000003E10000010000000E81000001000000E980000001000000118600000A00000046810000020000000D81000001000000E880000001000000</CommandsUsage>
+ </MFCToolBarParameters>
+ <CommandManager>
+ <CommandsWithoutImages>0F000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000818400007D8400008284000083840000848400000E84000030840000</CommandsWithoutImages>
+ <MenuUserImages>0400048400004C000000068400004E0000000B8100001B0000000D8100001D000000</MenuUserImages>
+ </CommandManager>
+ <Pane-59393>
+ <ID>0</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>000000004E050000000A000061050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-59393>
+ <BasePane-59393>
+ <IsVisible>1</IsVisible>
+ </BasePane-59393>
+ <Pane-34051>
+ <ID>34051</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34051>
+ <BasePane-34051>
+ <IsVisible>0</IsVisible>
+ </BasePane-34051>
+ <IarPane-34051 />
+ <Pane--1>
+ <ID>4294967295</ID>
+ <RectRecentFloat>0000000082040000000A000065050000</RectRecentFloat>
+ <RectRecentDocked>000000006B040000000A00004E050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane--1>
+ <BasePane--1>
+ <IsVisible>1</IsVisible>
+ </BasePane--1>
+ <Pane-34052>
+ <ID>34052</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34052>
+ <BasePane-34052>
+ <IsVisible>1</IsVisible>
+ </BasePane-34052>
+ <IarPane-34052>
+ <ColumnWidth0>24</ColumnWidth0>
+ <ColumnWidth1>1880</ColumnWidth1>
+ <ColumnWidth2>501</ColumnWidth2>
+ <ColumnWidth3>125</ColumnWidth3>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile>C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\BuildLog.log</LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34052>
+ <Pane-34048>
+ <ID>34048</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34048>
+ <BasePane-34048>
+ <IsVisible>1</IsVisible>
+ </BasePane-34048>
+ <Pane-34056>
+ <ID>34056</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34056>
+ <BasePane-34056>
+ <IsVisible>0</IsVisible>
+ </BasePane-34056>
+ <IarPane-34056>
+ <ColumnWidth0>891</ColumnWidth0>
+ <ColumnWidth1>127</ColumnWidth1>
+ <ColumnWidth2>1528</ColumnWidth2>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34056>
+ <Pane-34057>
+ <ID>34057</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34057>
+ <BasePane-34057>
+ <IsVisible>0</IsVisible>
+ </BasePane-34057>
+ <IarPane-34057>
+ <ColumnWidth0>891</ColumnWidth0>
+ <ColumnWidth1>127</ColumnWidth1>
+ <ColumnWidth2>1528</ColumnWidth2>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34057>
+ <Pane-34058>
+ <ID>34058</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34058>
+ <BasePane-34058>
+ <IsVisible>0</IsVisible>
+ </BasePane-34058>
+ <IarPane-34058>
+ <ColumnWidth0>764</ColumnWidth0>
+ <ColumnWidth1>127</ColumnWidth1>
+ <ColumnWidth2>1146</ColumnWidth2>
+ <ColumnWidth3>509</ColumnWidth3>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34058>
+ <Pane-34059>
+ <ID>34059</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34059>
+ <BasePane-34059>
+ <IsVisible>0</IsVisible>
+ </BasePane-34059>
+ <IarPane-34059>
+ <ColumnWidth0>891</ColumnWidth0>
+ <ColumnWidth1>127</ColumnWidth1>
+ <ColumnWidth2>1528</ColumnWidth2>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34059>
+ <Pane-34062>
+ <ID>34062</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>0400000083040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34062>
+ <BasePane-34062>
+ <IsVisible>0</IsVisible>
+ </BasePane-34062>
+ <IarPane-34062>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile></LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34062>
+ <Pane-34053>
+ <ID>34053</ID>
+ <RectRecentFloat>000000001700000080020000A8000000</RectRecentFloat>
+ <RectRecentDocked>00000000000000008002000091000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34053>
+ <BasePane-34053>
+ <IsVisible>0</IsVisible>
+ </BasePane-34053>
+ <IarPane-34053>
+ <cg_type>
+ <item>2</item>
+ </cg_type>
+ <cg_symbol>
+ <item></item>
+ </cg_symbol>
+ <cg_user>
+ <item></item>
+ </cg_user>
+ <cg_display>
+ <item>&lt;Right-click on a symbol in the editor to show a call graph&gt;</item>
+ </cg_display>
+ <cg_def_file>
+ <item></item>
+ </cg_def_file>
+ <cg_def_line>
+ <item>0</item>
+ </cg_def_line>
+ <cg_def_col>
+ <item>0</item>
+ </cg_def_col>
+ <cg_call_file>
+ <item></item>
+ </cg_call_file>
+ <cg_call_line>
+ <item>0</item>
+ </cg_call_line>
+ <cg_call_col>
+ <item>0</item>
+ </cg_call_col>
+ <col-names>
+ <item>File</item>
+ <item>Function</item>
+ <item>Line</item>
+ </col-names>
+ <col-widths>
+ <item>200</item>
+ <item>700</item>
+ <item>100</item>
+ </col-widths>
+ </IarPane-34053>
+ <Pane-34054>
+ <ID>34054</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34054>
+ <BasePane-34054>
+ <IsVisible>0</IsVisible>
+ </BasePane-34054>
+ <IarPane-34054 />
+ <Pane-34055>
+ <ID>34055</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34055>
+ <BasePane-34055>
+ <IsVisible>0</IsVisible>
+ </BasePane-34055>
+ <IarPane-34055>
+ <col-names>
+ <item>Check</item>
+ <item>File</item>
+ <item>Line</item>
+ <item>Message</item>
+ <item>Severity</item>
+ </col-names>
+ <col-widths>
+ <item>200</item>
+ <item>200</item>
+ <item>100</item>
+ <item>500</item>
+ <item>100</item>
+ </col-widths>
+ </IarPane-34055>
+ <Pane-34060>
+ <ID>34060</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34060>
+ <BasePane-34060>
+ <IsVisible>0</IsVisible>
+ </BasePane-34060>
+ <IarPane-34060>
+ <FilterLevel>2</FilterLevel>
+ <LiveFile>$WS_DIR/SourceBrowseLog.log</LiveFile>
+ <LiveLogEnabled>0</LiveLogEnabled>
+ <LiveFilterLevel>-1</LiveFilterLevel>
+ </IarPane-34060>
+ <Pane-34061>
+ <ID>34061</ID>
+ <RectRecentFloat>000000001700000080020000A8000000</RectRecentFloat>
+ <RectRecentDocked>00000000000000008002000091000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34061>
+ <BasePane-34061>
+ <IsVisible>0</IsVisible>
+ </BasePane-34061>
+ <IarPane-34061>
+ <SB_FileFilter>
+ <item>2</item>
+ </SB_FileFilter>
+ <SB_TypeFilter>
+ <item>0</item>
+ </SB_TypeFilter>
+ <SB_SBW_File>
+ <item>C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\Debug\Obj\sample_threadx.pbw</item>
+ </SB_SBW_File>
+ <col-names>
+ <item>File</item>
+ <item>Name</item>
+ <item>Scope</item>
+ <item>Symbol type</item>
+ </col-names>
+ <col-widths>
+ <item>300</item>
+ <item>300</item>
+ <item>300</item>
+ <item>300</item>
+ </col-widths>
+ </IarPane-34061>
+ <Pane-34063>
+ <ID>34063</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34063>
+ <BasePane-34063>
+ <IsVisible>0</IsVisible>
+ </BasePane-34063>
+ <IarPane-34063 />
+ <Pane-34064>
+ <ID>34064</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34064>
+ <BasePane-34064>
+ <IsVisible>0</IsVisible>
+ </BasePane-34064>
+ <IarPane-34064 />
+ <Pane-34065>
+ <ID>34065</ID>
+ <RectRecentFloat>00000000170000000601000078010000</RectRecentFloat>
+ <RectRecentDocked>0000000032000000AF01000067040000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34065>
+ <BasePane-34065>
+ <IsVisible>1</IsVisible>
+ </BasePane-34065>
+ <DockingManager-256>
+ <DockingPaneAndPaneDividers>0000000014000000000000000010000001000000FFFFFFFFFFFFFFFFAF01000032000000B301000067040000010000000200001004000000010000005DFFFFFFBD080000118500000000000000000000000000000000000001000000118500000100000011850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000108500000000000000000000000000000000000001000000108500000100000010850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF0000000067040000000A00006B040000010000000100001004000000010000009EFBFFFF6F000000FFFFFFFF07000000048500000085000008850000098500000A8500000B8500000E850000FFFF02000B004354616262656450616E6500800000010000000000000082040000000A000065050000000000006B040000000A00004E050000000000004080005607000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000</DockingPaneAndPaneDividers>
+ </DockingManager-256>
+ <MFCToolBar-34049>
+ <Name>CMSIS-Pack</Name>
+ <Buttons>00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000000000000C000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B0018000000</Buttons>
+ </MFCToolBar-34049>
+ <Pane-34049>
+ <ID>34049</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>FE020000000000002C0300001A000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>24</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34049>
+ <BasePane-34049>
+ <IsVisible>1</IsVisible>
+ </BasePane-34049>
+ <MFCToolBar-34050>
+ <Name>Main</Name>
+ <Buttons>00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000035000000FFFEFF000000000000000000000000000100000001000000018001E100000000000036000000FFFEFF000000000000000000000000000100000001000000018003E100000000040038000000FFFEFF0000000000000000000000000001000000010000000180008100000000000019000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004003B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004003D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004003C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004003F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040042000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000400FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004002C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004003E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040040000000FFFEFF000000000000000000000000000100000001000000018029E100000000040041000000FFFEFF000000000000000000000000000100000001000000018002810000000004001B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040030000000FFFEFF000000000000000000000000000100000001000000018027810000000004002E000000FFFEFF000000000000000000000000000100000001000000018028810000000004002F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040028000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040029000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004001F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000020000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000034000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E8100000000000022000000FFFEFF00000000000000000000000000010000000100000001800F8100000000000023000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00E8020000</Buttons>
+ </MFCToolBar-34050>
+ <Pane-34050>
+ <ID>34050</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>0000000000000000FE0200001A000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>744</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34050>
+ <BasePane-34050>
+ <IsVisible>1</IsVisible>
+ </BasePane-34050>
+ </Desktop>
+ <ChildIdMap>
+ <WIN_DEBUG_LOG>34048</WIN_DEBUG_LOG>
+ <TB_CMSISPACK>34049</TB_CMSISPACK>
+ <TB_MAIN2>34050</TB_MAIN2>
+ <WIN_BREAKPOINTS>34051</WIN_BREAKPOINTS>
+ <WIN_BUILD>34052</WIN_BUILD>
+ <WIN_CALL_GRAPH>34053</WIN_CALL_GRAPH>
+ <WIN_CUSTOM_SFR>34054</WIN_CUSTOM_SFR>
+ <WIN_C_STAT>34055</WIN_C_STAT>
+ <WIN_FIND_ALL_DECLARATIONS>34056</WIN_FIND_ALL_DECLARATIONS>
+ <WIN_FIND_ALL_REFERENCES>34057</WIN_FIND_ALL_REFERENCES>
+ <WIN_FIND_IN_FILES>34058</WIN_FIND_IN_FILES>
+ <WIN_SELECT_AMBIGUOUS_DEFINITIONS>34059</WIN_SELECT_AMBIGUOUS_DEFINITIONS>
+ <WIN_SOURCEBROWSE_LOG>34060</WIN_SOURCEBROWSE_LOG>
+ <WIN_SOURCE_BROWSE2>34061</WIN_SOURCE_BROWSE2>
+ <WIN_TOOL_OUTPUT>34062</WIN_TOOL_OUTPUT>
+ <WIN_TS_INTERRUPT_AVAILABLE>34063</WIN_TS_INTERRUPT_AVAILABLE>
+ <WIN_TS_INTERRUPT_CONFIG>34064</WIN_TS_INTERRUPT_CONFIG>
+ <WIN_WORKSPACE>34065</WIN_WORKSPACE>
+ </ChildIdMap>
+ <MDIWindows>
+ <MDIClientArea-0>
+ <MDITabsState>01000000030000000100000000000000000000000100000001000000FFFFFFFF00000000010000000100000000000000280000002800000000000000</MDITabsState>
+ </MDIClientArea-0>
+ </MDIWindows>
+ </WindowStorage>
+</Workspace>
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.bat b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.bat
new file mode 100644
index 00000000..da603fdb
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.bat
@@ -0,0 +1,40 @@
+@REM This batch file has been generated by the IAR Embedded Workbench
+@REM C-SPY Debugger, as an aid to preparing a command line for running
+@REM the cspybat command line utility using the appropriate settings.
+@REM
+@REM Note that this file is generated every time a new debug session
+@REM is initialized, so you may want to move or rename the file before
+@REM making changes.
+@REM
+@REM You can launch cspybat by typing the name of this batch file followed
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
+@REM
+@REM Read about available command line parameters in the C-SPY Debugging
+@REM Guide. Hints about additional command line parameters that may be
+@REM useful in specific cases:
+@REM --download_only Downloads a code image without starting a debug
+@REM session afterwards.
+@REM --silent Omits the sign-on message.
+@REM --timeout Limits the maximum allowed execution time.
+@REM
+
+
+@echo off
+
+if not "%~1" == "" goto debugFile
+
+@echo on
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\common\bin\cspybat" -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.general.xcl" --backend -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.driver.xcl"
+
+@echo off
+goto end
+
+:debugFile
+
+@echo on
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\common\bin\cspybat" -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.driver.xcl"
+
+@echo off
+:end \ No newline at end of file
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.ps1 b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.ps1
new file mode 100644
index 00000000..af990a9b
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.cspy.ps1
@@ -0,0 +1,31 @@
+param([String]$debugfile = "");
+
+# This powershell file has been generated by the IAR Embedded Workbench
+# C - SPY Debugger, as an aid to preparing a command line for running
+# the cspybat command line utility using the appropriate settings.
+#
+# Note that this file is generated every time a new debug session
+# is initialized, so you may want to move or rename the file before
+# making changes.
+#
+# You can launch cspybat by typing Powershell.exe -File followed by the name of this batch file, followed
+# by the name of the debug file (usually an ELF / DWARF or UBROF file).
+#
+# Read about available command line parameters in the C - SPY Debugging
+# Guide. Hints about additional command line parameters that may be
+# useful in specific cases :
+# --download_only Downloads a code image without starting a debug
+# session afterwards.
+# --silent Omits the sign - on message.
+# --timeout Limits the maximum allowed execution time.
+#
+
+
+if ($debugfile -eq "")
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\common\bin\cspybat" -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.general.xcl" --backend -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.driver.xcl"
+}
+else
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\common\bin\cspybat" -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.general.xcl" --debug_file=$debugfile --backend -f "C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\settings\sample_threadx.Debug.driver.xcl"
+}
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.Debug.driver.xcl b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.driver.xcl
new file mode 100644
index 00000000..06e18c00
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.driver.xcl
@@ -0,0 +1,13 @@
+"--endian=little"
+
+"--cpu=ARM1136J-S"
+
+"--fpu=None"
+
+"--semihosting"
+
+"--multicore_nr_of_cores=1"
+
+
+
+
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.Debug.general.xcl b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.general.xcl
new file mode 100644
index 00000000..dcf7704a
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.Debug.general.xcl
@@ -0,0 +1,11 @@
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\bin\armproc.dll"
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\bin\armsim2.dll"
+
+"C:\Users\nisohack\Documents\work\x-ware_libs\threadx\ports\arm11\iar\example_build\Debug\Exe\sample_threadx.out"
+
+--plugin="C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\bin\armbat.dll"
+
+
+
+
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.crun b/ports/arm11/iar/example_build/settings/sample_threadx.crun
new file mode 100644
index 00000000..d71ea555
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.crun
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<crun>
+ <version>1</version>
+ <filter_entries>
+ <filter index="0" type="default">
+ <type>*</type>
+ <start_file>*</start_file>
+ <end_file>*</end_file>
+ <action_debugger>0</action_debugger>
+ <action_log>1</action_log>
+ </filter>
+ </filter_entries>
+</crun>
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.dbgdt b/ports/arm11/iar/example_build/settings/sample_threadx.dbgdt
new file mode 100644
index 00000000..9f3dbd0a
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.dbgdt
@@ -0,0 +1,1685 @@
+<?xml version="1.0"?>
+<Project>
+ <Desktop>
+ <Static>
+ <Workspace>
+ <ColumnWidths>
+ <Column0>395</Column0>
+ <Column1>27</Column1>
+ <Column2>27</Column2>
+ <Column3>2010398909</Column3>
+ </ColumnWidths>
+ </Workspace>
+ <Disassembly>
+ <PreferedWindows>
+ <Position>2</Position>
+ <ScreenPosX>0</ScreenPosX>
+ <ScreenPosY>0</ScreenPosY>
+ <Windows />
+ </PreferedWindows>
+ <MixedMode>1</MixedMode>
+ <CodeCovEnabled>0</CodeCovEnabled>
+ <CodeCovShow>0</CodeCovShow>
+ </Disassembly>
+ <Debug-Log>
+ <ColumnWidth0>47</ColumnWidth0>
+ <ColumnWidth1>1666</ColumnWidth1>
+ </Debug-Log>
+ <Build>
+ <ColumnWidth0>20</ColumnWidth0>
+ <ColumnWidth1>915</ColumnWidth1>
+ <ColumnWidth2>244</ColumnWidth2>
+ <ColumnWidth3>61</ColumnWidth3>
+ </Build>
+ <Register>
+ <PreferedWindows>
+ <Position>2</Position>
+ <ScreenPosX>0</ScreenPosX>
+ <ScreenPosY>0</ScreenPosY>
+ <Windows />
+ </PreferedWindows>
+ </Register>
+ <Memory>
+ <PreferedWindows>
+ <Position>3</Position>
+ <ScreenPosX>0</ScreenPosX>
+ <ScreenPosY>0</ScreenPosY>
+ <Windows />
+ </PreferedWindows>
+ <ZoneNumber>0</ZoneNumber>
+ <FindDirection>1</FindDirection>
+ <FindAsHex>0</FindAsHex>
+ </Memory>
+ <Watch>
+ <Format>
+ <struct_types />
+ <watch_formats />
+ </Format>
+ <PreferedWindows>
+ <Position>2</Position>
+ <ScreenPosX>0</ScreenPosX>
+ <ScreenPosY>0</ScreenPosY>
+ <Windows />
+ </PreferedWindows>
+ <Column0>187</Column0>
+ <Column1>100</Column1>
+ <Column2>100</Column2>
+ <Column3>100</Column3>
+ </Watch>
+ <TX-THREAD>
+ <Column0>21</Column0>
+ <Column1>50</Column1>
+ <Column2>142</Column2>
+ <Column3>120</Column3>
+ <Column4>170</Column4>
+ <Column5>80</Column5>
+ <Column6>100</Column6>
+ <Column7>100</Column7>
+ <Column8>100</Column8>
+ <Column9>80</Column9>
+ <Column10>95</Column10>
+ </TX-THREAD>
+ <TX-MESSAGEQUEUE />
+ <TX-SEMAPHORE />
+ <TX-MUTEX />
+ <TX-BYTEPOOL />
+ <TX-BLOCKPOOL />
+ <TX-TIMER />
+ </Static>
+ <Windows>
+ <Wnd4>
+ <Tabs>
+ <Tab>
+ <Identity>TabID-32281-8114</Identity>
+ <TabName>Workspace</TabName>
+ <Factory>Workspace</Factory>
+ <Session>
+ <NodeDict>
+ <ExpandedNode>&lt;ws&gt;</ExpandedNode>
+ <ExpandedNode>&lt;ws&gt;/sample_threadx</ExpandedNode>
+ <ExpandedNode>&lt;ws&gt;/sample_threadx/Common sources</ExpandedNode>
+ <ExpandedNode>&lt;ws&gt;/sample_threadx/Common sources/tx_cstartup.s79</ExpandedNode>
+ <ExpandedNode>sample_threadx</ExpandedNode>
+ <ExpandedNode>sample_threadx/Output</ExpandedNode>
+ <ExpandedNode>sample_threadx/Output/sample_threadx.out</ExpandedNode>
+ <ExpandedNode>sample_threadx/Output/sample_threadx.out/Output</ExpandedNode>
+ </NodeDict>
+ </Session>
+ </Tab>
+ </Tabs>
+ <SelectedTab>0</SelectedTab>
+ </Wnd4>
+ <Wnd5>
+ <Tabs>
+ <Tab>
+ <Identity>TabID-31758-8124</Identity>
+ <TabName>Debug Log</TabName>
+ <Factory>Debug-Log</Factory>
+ <Session />
+ </Tab>
+ <Tab>
+ <Identity>TabID-9738-8128</Identity>
+ <TabName>Build</TabName>
+ <Factory>Build</Factory>
+ <Session />
+ </Tab>
+ <Tab>
+ <Identity>TabID-20156-25745</Identity>
+ <TabName>Breakpoints</TabName>
+ <Factory>Breakpoints</Factory>
+ </Tab>
+ </Tabs>
+ <SelectedTab>0</SelectedTab>
+ </Wnd5>
+ <Wnd6 />
+ <Wnd7>
+ <Tabs>
+ <Tab>
+ <Identity>TabID-19697-5905</Identity>
+ <TabName>Thread List</TabName>
+ <Factory>TX-THREAD</Factory>
+ <Session>
+ <ColorChange>1</ColorChange>
+ </Session>
+ </Tab>
+ <Tab>
+ <Identity>TabID-19175-5914</Identity>
+ <TabName>Message Queues</TabName>
+ <Factory>TX-MESSAGEQUEUE</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-29400-5927</Identity>
+ <TabName>Semaphores</TabName>
+ <Factory>TX-SEMAPHORE</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-6858-5940</Identity>
+ <TabName>Mutexes</TabName>
+ <Factory>TX-MUTEX</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-6335-5950</Identity>
+ <TabName>Byte Pools</TabName>
+ <Factory>TX-BYTEPOOL</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-16561-5963</Identity>
+ <TabName>Block Pools</TabName>
+ <Factory>TX-BLOCKPOOL</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-26786-5976</Identity>
+ <TabName>Timers</TabName>
+ <Factory>TX-TIMER</Factory>
+ </Tab>
+ <Tab>
+ <Identity>TabID-26264-5986</Identity>
+ <TabName>Event Flag Groups</TabName>
+ <Factory>TX-EVENTFLAG</Factory>
+ </Tab>
+ </Tabs>
+ <SelectedTab>0</SelectedTab>
+ </Wnd7>
+ </Windows>
+ <Editor>
+ <Pane>
+ <Tab>
+ <Factory>TextEditor</Factory>
+ <Filename>$WS_DIR$\sample_threadx.c</Filename>
+ <XPos>0</XPos>
+ <YPos>34</YPos>
+ <SelStart>1720</SelStart>
+ <SelEnd>1720</SelEnd>
+ </Tab>
+ <ActiveTab>0</ActiveTab>
+ </Pane>
+ <ActivePane>0</ActivePane>
+ <Sizes>
+ <Pane>
+ <X>1000000</X>
+ <Y>1000000</Y>
+ </Pane>
+ </Sizes>
+ <SplitMode>1</SplitMode>
+ </Editor>
+ <Positions>
+ <Top>
+ <Row0>
+ <Sizes>
+ <Toolbar-02767b88>
+ <key>iaridepm.enu1</key>
+ </Toolbar-02767b88>
+ </Sizes>
+ </Row0>
+ <Row1>
+ <Sizes>
+ <Toolbar-0deb4cc0>
+ <key>debuggergui.enu1</key>
+ </Toolbar-0deb4cc0>
+ </Sizes>
+ </Row1>
+ <Row2>
+ <Sizes>
+ <Toolbar-0deb50a8>
+ <key>threadxarmplugin.enu1</key>
+ </Toolbar-0deb50a8>
+ </Sizes>
+ </Row2>
+ </Top>
+ <Left>
+ <Row0>
+ <Sizes>
+ <Wnd4>
+ <Rect>
+ <Top>-2</Top>
+ <Left>-2</Left>
+ <Bottom>570</Bottom>
+ <Right>469</Right>
+ <x>-2</x>
+ <y>-2</y>
+ <xscreen>135</xscreen>
+ <yscreen>169</yscreen>
+ <sizeHorzCX>88933</sizeHorzCX>
+ <sizeHorzCY>182505</sizeHorzCY>
+ <sizeVertCX>310277</sizeVertCX>
+ <sizeVertCY>617711</sizeVertCY>
+ </Rect>
+ </Wnd4>
+ </Sizes>
+ </Row0>
+ </Left>
+ <Right>
+ <Row0>
+ <Sizes />
+ </Row0>
+ </Right>
+ <Bottom>
+ <Row0>
+ <Sizes>
+ <Wnd5>
+ <Rect>
+ <Top>-2</Top>
+ <Left>-2</Left>
+ <Bottom>66</Bottom>
+ <Right>1520</Right>
+ <x>-2</x>
+ <y>-2</y>
+ <xscreen>1522</xscreen>
+ <yscreen>68</yscreen>
+ <sizeHorzCX>1002635</sizeHorzCX>
+ <sizeHorzCY>73434</sizeHorzCY>
+ <sizeVertCX>88933</sizeVertCX>
+ <sizeVertCY>182505</sizeVertCY>
+ </Rect>
+ </Wnd5>
+ </Sizes>
+ </Row0>
+ <Row1>
+ <Sizes>
+ <Wnd7>
+ <Rect>
+ <Top>64</Top>
+ <Left>-2</Left>
+ <Bottom>263</Bottom>
+ <Right>1520</Right>
+ <x>-2</x>
+ <y>64</y>
+ <xscreen>1522</xscreen>
+ <yscreen>199</yscreen>
+ <sizeHorzCX>1002635</sizeHorzCX>
+ <sizeHorzCY>214903</sizeHorzCY>
+ <sizeVertCX>127800</sizeVertCX>
+ <sizeVertCY>214903</sizeVertCY>
+ </Rect>
+ </Wnd7>
+ </Sizes>
+ </Row1>
+ </Bottom>
+ <Float>
+ <Sizes />
+ </Float>
+ </Positions>
+ </Desktop>
+ <WindowStorage>
+ <ChildIdMap>
+ <TB_CMSISPACK>34048</TB_CMSISPACK>
+ <TB_DEBUG>34049</TB_DEBUG>
+ <TB_MAIN>34050</TB_MAIN>
+ <WIN_AUTO>34051</WIN_AUTO>
+ <WIN_BREAKPOINTS>34052</WIN_BREAKPOINTS>
+ <WIN_BUILD>34053</WIN_BUILD>
+ <WIN_CALL_GRAPH>34054</WIN_CALL_GRAPH>
+ <WIN_CALL_STACK>34055</WIN_CALL_STACK>
+ <WIN_CMSISPACK_AGENT_LOG>34056</WIN_CMSISPACK_AGENT_LOG>
+ <WIN_CODE_COVERAGE>34057</WIN_CODE_COVERAGE>
+ <WIN_CORES>34058</WIN_CORES>
+ <WIN_CUSTOM_SFR>34059</WIN_CUSTOM_SFR>
+ <WIN_C_STAT>34060</WIN_C_STAT>
+ <WIN_DATA_LOG>34061</WIN_DATA_LOG>
+ <WIN_DATA_STAT>34062</WIN_DATA_STAT>
+ <WIN_DEBUGGER_MACROS>34063</WIN_DEBUGGER_MACROS>
+ <WIN_DEBUG_LOG>34064</WIN_DEBUG_LOG>
+ <WIN_DISASSEMBLY>34065</WIN_DISASSEMBLY>
+ <WIN_FIND_ALL_DECLARATIONS>34066</WIN_FIND_ALL_DECLARATIONS>
+ <WIN_FIND_ALL_REFERENCES>34067</WIN_FIND_ALL_REFERENCES>
+ <WIN_FIND_IN_FILES>34068</WIN_FIND_IN_FILES>
+ <WIN_FIND_IN_SLIDING_TRACE>34069</WIN_FIND_IN_SLIDING_TRACE>
+ <WIN_IMAGES>34070</WIN_IMAGES>
+ <WIN_INTERRUPT_LOG>34071</WIN_INTERRUPT_LOG>
+ <WIN_INTERRUPT_STAT>34072</WIN_INTERRUPT_STAT>
+ <WIN_LOCALS>34073</WIN_LOCALS>
+ <WIN_MACRO_EVAL>34074</WIN_MACRO_EVAL>
+ <WIN_MACRO_REGISTRATION>34075</WIN_MACRO_REGISTRATION>
+ <WIN_MEMORY_1>34076</WIN_MEMORY_1>
+ <WIN_MEMORY_2>34077</WIN_MEMORY_2>
+ <WIN_MEMORY_3>34078</WIN_MEMORY_3>
+ <WIN_MEMORY_4>34079</WIN_MEMORY_4>
+ <WIN_PHYSICAL_BREAKPOINTS>34080</WIN_PHYSICAL_BREAKPOINTS>
+ <WIN_PROFILING2>34081</WIN_PROFILING2>
+ <WIN_QUICK_WATCH>34082</WIN_QUICK_WATCH>
+ <WIN_REGISTER_1>34083</WIN_REGISTER_1>
+ <WIN_REGISTER_2>34084</WIN_REGISTER_2>
+ <WIN_REGISTER_3>34085</WIN_REGISTER_3>
+ <WIN_REGISTER_4>34086</WIN_REGISTER_4>
+ <WIN_REGISTER_GROUPS>34087</WIN_REGISTER_GROUPS>
+ <WIN_RTOS_BLOCKPOOL>34088</WIN_RTOS_BLOCKPOOL>
+ <WIN_RTOS_BYTEPOOL>34089</WIN_RTOS_BYTEPOOL>
+ <WIN_RTOS_COMM_METRICS>34090</WIN_RTOS_COMM_METRICS>
+ <WIN_RTOS_EVENTFLAG>34091</WIN_RTOS_EVENTFLAG>
+ <WIN_RTOS_EXEC_PROFILE>34092</WIN_RTOS_EXEC_PROFILE>
+ <WIN_RTOS_MBOX>34093</WIN_RTOS_MBOX>
+ <WIN_RTOS_MEMORY_METRICS>34094</WIN_RTOS_MEMORY_METRICS>
+ <WIN_RTOS_MUTEX>34095</WIN_RTOS_MUTEX>
+ <WIN_RTOS_SEMAPHORE>34096</WIN_RTOS_SEMAPHORE>
+ <WIN_RTOS_SYNCH_METRICS>34097</WIN_RTOS_SYNCH_METRICS>
+ <WIN_RTOS_TASK>34098</WIN_RTOS_TASK>
+ <WIN_RTOS_THREAD_METRICS>34099</WIN_RTOS_THREAD_METRICS>
+ <WIN_RTOS_TIMER>34100</WIN_RTOS_TIMER>
+ <WIN_RTOS_TIMER_METRICS>34101</WIN_RTOS_TIMER_METRICS>
+ <WIN_SELECT_AMBIGUOUS_DEFINITIONS>34102</WIN_SELECT_AMBIGUOUS_DEFINITIONS>
+ <WIN_SLIDING_FUNCTION_TRACE>34103</WIN_SLIDING_FUNCTION_TRACE>
+ <WIN_SLIDING_TRACE_WINDOW>34104</WIN_SLIDING_TRACE_WINDOW>
+ <WIN_SOURCE_BROWSER>34105</WIN_SOURCE_BROWSER>
+ <WIN_STACK_1>34106</WIN_STACK_1>
+ <WIN_STACK_2>34107</WIN_STACK_2>
+ <WIN_STATICS>34108</WIN_STATICS>
+ <WIN_STATIC_WATCH>34109</WIN_STATIC_WATCH>
+ <WIN_SYMBOLIC_MEMORY>34110</WIN_SYMBOLIC_MEMORY>
+ <WIN_SYMBOLS>34111</WIN_SYMBOLS>
+ <WIN_TERM_IO>34112</WIN_TERM_IO>
+ <WIN_TIMELINE_GRAPH>34113</WIN_TIMELINE_GRAPH>
+ <WIN_TOOL_OUTPUT>34114</WIN_TOOL_OUTPUT>
+ <WIN_TRACE_EXPR>34115</WIN_TRACE_EXPR>
+ <WIN_TS_INTERRUPT_AVAILABLE>34116</WIN_TS_INTERRUPT_AVAILABLE>
+ <WIN_TS_INTERRUPT_CONFIG>34117</WIN_TS_INTERRUPT_CONFIG>
+ <WIN_TS_INTERRUPT_STATUS>34118</WIN_TS_INTERRUPT_STATUS>
+ <WIN_WATCH_1>34119</WIN_WATCH_1>
+ <WIN_WATCH_2>34120</WIN_WATCH_2>
+ <WIN_WATCH_3>34121</WIN_WATCH_3>
+ <WIN_WATCH_4>34122</WIN_WATCH_4>
+ <WIN_WORKSPACE>34123</WIN_WORKSPACE>
+ <TB_MAIN2>34124</TB_MAIN2>
+ <WIN_CODECOVERAGE>34125</WIN_CODECOVERAGE>
+ <WIN_EXCEPTION_VIEWER>34126</WIN_EXCEPTION_VIEWER>
+ <WIN_SOURCEBROWSE_LOG>34127</WIN_SOURCEBROWSE_LOG>
+ <WIN_SOURCE_BROWSE2>34128</WIN_SOURCE_BROWSE2>
+ </ChildIdMap>
+ <Desktop>
+ <IarPane-34048>
+ <ToolBarCmdIds>
+ <item>34000</item>
+ <item>34001</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34048>
+ <IarPane-34049>
+ <ToolBarCmdIds>
+ <item>34390</item>
+ <item>34323</item>
+ <item>34398</item>
+ <item>34400</item>
+ <item>34397</item>
+ <item>34320</item>
+ <item>34321</item>
+ <item>34324</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34049>
+ <IarPane-34050>
+ <ToolBarCmdIds>
+ <item>57600</item>
+ <item>57601</item>
+ <item>57603</item>
+ <item>33024</item>
+ <item>0</item>
+ <item>57607</item>
+ <item>0</item>
+ <item>57635</item>
+ <item>57634</item>
+ <item>57637</item>
+ <item>0</item>
+ <item>57643</item>
+ <item>57644</item>
+ <item>0</item>
+ <item>33090</item>
+ <item>33057</item>
+ <item>57636</item>
+ <item>57640</item>
+ <item>57641</item>
+ <item>33026</item>
+ <item>33065</item>
+ <item>33063</item>
+ <item>33064</item>
+ <item>33053</item>
+ <item>33054</item>
+ <item>0</item>
+ <item>33035</item>
+ <item>33036</item>
+ <item>34399</item>
+ <item>0</item>
+ <item>33055</item>
+ <item>33056</item>
+ <item>33094</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34050>
+ <ControlBarVersion>
+ <Major>14</Major>
+ <Minor>26</Minor>
+ </ControlBarVersion>
+ <MFCToolBarParameters>
+ <Tooltips>1</Tooltips>
+ <ShortcutKeys>1</ShortcutKeys>
+ <LargeIcons>0</LargeIcons>
+ <MenuAnimation>0</MenuAnimation>
+ <RecentlyUsedMenus>1</RecentlyUsedMenus>
+ <MenuShadows>1</MenuShadows>
+ <ShowAllMenusAfterDelay>1</ShowAllMenusAfterDelay>
+ <CommandsUsage>210000000D002596000001000000108600000B0000000C8100000300000004860000010000001781000002000000148100000100000003E10000010000000E81000001000000E980000001000000118600000A00000046810000020000000D81000001000000E880000001000000</CommandsUsage>
+ </MFCToolBarParameters>
+ <CommandManager>
+ <CommandsWithoutImages>1000FFFFFFFF8386000058860000439200001E920000289200002992000024960000259600001F960000008800000188000002880000038800000488000005880000</CommandsWithoutImages>
+ <MenuUserImages>2800578600001800000059920000240000001581000055000000239200000000000007E100006B00000004E1000069000000008D00001E00000007860000280000001D920000110000000D8000004700000001E100006600000004860000250000009A860000160000001781000057000000008400007800000025920000190000001481000054000000449200002200000000810000490000001A860000320000001F9200001F00000003E10000680000008E8600003B00000006860000270000002D9200002100000000E1000065000000698600003800000041E10000750000005586000006000000239600008900000016810000560000000E86000017000000518400008600000005E100006A000000A18600003C000000C38600000300000002E1000067000000C08600000A00000005860000260000002C92000020000000</MenuUserImages>
+ </CommandManager>
+ <Pane-59393>
+ <ID>0</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>000000004E050000000A000061050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-59393>
+ <BasePane-59393>
+ <IsVisible>1</IsVisible>
+ </BasePane-59393>
+ <Pane-34051>
+ <ID>34051</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34051>
+ <BasePane-34051>
+ <IsVisible>0</IsVisible>
+ </BasePane-34051>
+ <IarPane-34051 />
+ <Pane-34052>
+ <ID>34052</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34052>
+ <BasePane-34052>
+ <IsVisible>0</IsVisible>
+ </BasePane-34052>
+ <Pane--1>
+ <ID>4294967295</ID>
+ <RectRecentFloat>000000004900000006010000DB020000</RectRecentFloat>
+ <RectRecentDocked>000000004C000000060100009A040000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane--1>
+ <BasePane--1>
+ <IsVisible>1</IsVisible>
+ </BasePane--1>
+ <Pane-34053>
+ <ID>34053</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000DB05000034050000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34053>
+ <BasePane-34053>
+ <IsVisible>0</IsVisible>
+ </BasePane-34053>
+ <Pane-34056>
+ <ID>34056</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000E0020000DB0500005E030000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34056>
+ <BasePane-34056>
+ <IsVisible>0</IsVisible>
+ </BasePane-34056>
+ <Pane-34064>
+ <ID>34064</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34064>
+ <BasePane-34064>
+ <IsVisible>1</IsVisible>
+ </BasePane-34064>
+ <Pane-34066>
+ <ID>34066</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000FC09000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34066>
+ <BasePane-34066>
+ <IsVisible>1</IsVisible>
+ </BasePane-34066>
+ <Pane-34067>
+ <ID>34067</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000DB05000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34067>
+ <BasePane-34067>
+ <IsVisible>0</IsVisible>
+ </BasePane-34067>
+ <Pane-34068>
+ <ID>34068</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000DB05000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34068>
+ <BasePane-34068>
+ <IsVisible>0</IsVisible>
+ </BasePane-34068>
+ <Pane-34102>
+ <ID>34102</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000DB05000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34102>
+ <BasePane-34102>
+ <IsVisible>0</IsVisible>
+ </BasePane-34102>
+ <Pane-34114>
+ <ID>34114</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>04000000B6040000DB05000034050000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34114>
+ <BasePane-34114>
+ <IsVisible>0</IsVisible>
+ </BasePane-34114>
+ <Pane-34054>
+ <ID>34054</ID>
+ <RectRecentFloat>6D08000021000000ED0A0000B1000000</RectRecentFloat>
+ <RectRecentDocked>00000000000000008002000090000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34054>
+ <BasePane-34054>
+ <IsVisible>0</IsVisible>
+ </BasePane-34054>
+ <Pane-34055>
+ <ID>34055</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34055>
+ <BasePane-34055>
+ <IsVisible>0</IsVisible>
+ </BasePane-34055>
+ <IarPane-34055 />
+ <Pane-34057>
+ <ID>34057</ID>
+ <RectRecentFloat>6D080000210000001B0A0000B1000000</RectRecentFloat>
+ <RectRecentDocked>040000004C020000DB050000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34057>
+ <BasePane-34057>
+ <IsVisible>0</IsVisible>
+ </BasePane-34057>
+ <IarPane-34057 />
+ <Pane-34081>
+ <ID>34081</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>0000000048020000DF050000C4020000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34081>
+ <BasePane-34081>
+ <IsVisible>0</IsVisible>
+ </BasePane-34081>
+ <IarPane-34081 />
+ <Pane-34058>
+ <ID>34058</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34058>
+ <BasePane-34058>
+ <IsVisible>0</IsVisible>
+ </BasePane-34058>
+ <IarPane-34058 />
+ <Pane-34059>
+ <ID>34059</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34059>
+ <BasePane-34059>
+ <IsVisible>0</IsVisible>
+ </BasePane-34059>
+ <Pane-34060>
+ <ID>34060</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34060>
+ <BasePane-34060>
+ <IsVisible>0</IsVisible>
+ </BasePane-34060>
+ <Pane-34061>
+ <ID>34061</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34061>
+ <BasePane-34061>
+ <IsVisible>0</IsVisible>
+ </BasePane-34061>
+ <IarPane-34061 />
+ <Pane-34062>
+ <ID>34062</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34062>
+ <BasePane-34062>
+ <IsVisible>0</IsVisible>
+ </BasePane-34062>
+ <IarPane-34062 />
+ <Pane-34063>
+ <ID>34063</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34063>
+ <BasePane-34063>
+ <IsVisible>0</IsVisible>
+ </BasePane-34063>
+ <IarPane-34063 />
+ <Pane-34065>
+ <ID>34065</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34065>
+ <BasePane-34065>
+ <IsVisible>0</IsVisible>
+ </BasePane-34065>
+ <IarPane-34065 />
+ <Pane-34069>
+ <ID>34069</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34069>
+ <BasePane-34069>
+ <IsVisible>0</IsVisible>
+ </BasePane-34069>
+ <IarPane-34069 />
+ <Pane-34070>
+ <ID>34070</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34070>
+ <BasePane-34070>
+ <IsVisible>0</IsVisible>
+ </BasePane-34070>
+ <IarPane-34070 />
+ <Pane-34071>
+ <ID>34071</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34071>
+ <BasePane-34071>
+ <IsVisible>0</IsVisible>
+ </BasePane-34071>
+ <IarPane-34071 />
+ <Pane-34072>
+ <ID>34072</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34072>
+ <BasePane-34072>
+ <IsVisible>0</IsVisible>
+ </BasePane-34072>
+ <IarPane-34072 />
+ <Pane-34073>
+ <ID>34073</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34073>
+ <BasePane-34073>
+ <IsVisible>0</IsVisible>
+ </BasePane-34073>
+ <IarPane-34073 />
+ <Pane-34074>
+ <ID>34074</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34074>
+ <BasePane-34074>
+ <IsVisible>0</IsVisible>
+ </BasePane-34074>
+ <IarPane-34074 />
+ <Pane-34075>
+ <ID>34075</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34075>
+ <BasePane-34075>
+ <IsVisible>0</IsVisible>
+ </BasePane-34075>
+ <IarPane-34075 />
+ <Pane-34076>
+ <ID>34076</ID>
+ <RectRecentFloat>6D080000210000008F090000E1000000</RectRecentFloat>
+ <RectRecentDocked>040000001C020000DB050000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34076>
+ <BasePane-34076>
+ <IsVisible>0</IsVisible>
+ </BasePane-34076>
+ <IarPane-34076 />
+ <Pane-34077>
+ <ID>34077</ID>
+ <RectRecentFloat>6D080000210000008F090000E1000000</RectRecentFloat>
+ <RectRecentDocked>040000001C020000DB050000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34077>
+ <BasePane-34077>
+ <IsVisible>0</IsVisible>
+ </BasePane-34077>
+ <IarPane-34077 />
+ <Pane-34078>
+ <ID>34078</ID>
+ <RectRecentFloat>6D080000210000008F090000E1000000</RectRecentFloat>
+ <RectRecentDocked>040000001C020000DB050000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34078>
+ <BasePane-34078>
+ <IsVisible>0</IsVisible>
+ </BasePane-34078>
+ <IarPane-34078 />
+ <Pane-34079>
+ <ID>34079</ID>
+ <RectRecentFloat>6D080000210000008F090000E1000000</RectRecentFloat>
+ <RectRecentDocked>040000001C020000DB050000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34079>
+ <BasePane-34079>
+ <IsVisible>0</IsVisible>
+ </BasePane-34079>
+ <IarPane-34079 />
+ <Pane-34080>
+ <ID>34080</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34080>
+ <BasePane-34080>
+ <IsVisible>0</IsVisible>
+ </BasePane-34080>
+ <IarPane-34080 />
+ <Pane-34082>
+ <ID>34082</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34082>
+ <BasePane-34082>
+ <IsVisible>0</IsVisible>
+ </BasePane-34082>
+ <IarPane-34082 />
+ <Pane-34083>
+ <ID>34083</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34083>
+ <BasePane-34083>
+ <IsVisible>0</IsVisible>
+ </BasePane-34083>
+ <IarPane-34083 />
+ <Pane-34084>
+ <ID>34084</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34084>
+ <BasePane-34084>
+ <IsVisible>0</IsVisible>
+ </BasePane-34084>
+ <IarPane-34084 />
+ <Pane-34085>
+ <ID>34085</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34085>
+ <BasePane-34085>
+ <IsVisible>0</IsVisible>
+ </BasePane-34085>
+ <IarPane-34085 />
+ <Pane-34086>
+ <ID>34086</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34086>
+ <BasePane-34086>
+ <IsVisible>0</IsVisible>
+ </BasePane-34086>
+ <IarPane-34086 />
+ <Pane-34087>
+ <ID>34087</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34087>
+ <BasePane-34087>
+ <IsVisible>0</IsVisible>
+ </BasePane-34087>
+ <IarPane-34087 />
+ <Pane-34088>
+ <ID>34088</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34088>
+ <BasePane-34088>
+ <IsVisible>0</IsVisible>
+ </BasePane-34088>
+ <IarPane-34088 />
+ <Pane-34089>
+ <ID>34089</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34089>
+ <BasePane-34089>
+ <IsVisible>0</IsVisible>
+ </BasePane-34089>
+ <IarPane-34089 />
+ <Pane-34090>
+ <ID>34090</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34090>
+ <BasePane-34090>
+ <IsVisible>0</IsVisible>
+ </BasePane-34090>
+ <IarPane-34090 />
+ <Pane-34091>
+ <ID>34091</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34091>
+ <BasePane-34091>
+ <IsVisible>0</IsVisible>
+ </BasePane-34091>
+ <IarPane-34091 />
+ <Pane-34092>
+ <ID>34092</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34092>
+ <BasePane-34092>
+ <IsVisible>0</IsVisible>
+ </BasePane-34092>
+ <IarPane-34092 />
+ <Pane-34093>
+ <ID>34093</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34093>
+ <BasePane-34093>
+ <IsVisible>0</IsVisible>
+ </BasePane-34093>
+ <IarPane-34093 />
+ <Pane-34094>
+ <ID>34094</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34094>
+ <BasePane-34094>
+ <IsVisible>0</IsVisible>
+ </BasePane-34094>
+ <IarPane-34094 />
+ <Pane-34095>
+ <ID>34095</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34095>
+ <BasePane-34095>
+ <IsVisible>0</IsVisible>
+ </BasePane-34095>
+ <IarPane-34095 />
+ <Pane-34096>
+ <ID>34096</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34096>
+ <BasePane-34096>
+ <IsVisible>0</IsVisible>
+ </BasePane-34096>
+ <IarPane-34096 />
+ <Pane-34097>
+ <ID>34097</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34097>
+ <BasePane-34097>
+ <IsVisible>0</IsVisible>
+ </BasePane-34097>
+ <IarPane-34097 />
+ <Pane-34098>
+ <ID>34098</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34098>
+ <BasePane-34098>
+ <IsVisible>0</IsVisible>
+ </BasePane-34098>
+ <IarPane-34098 />
+ <Pane-34099>
+ <ID>34099</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34099>
+ <BasePane-34099>
+ <IsVisible>0</IsVisible>
+ </BasePane-34099>
+ <IarPane-34099 />
+ <Pane-34100>
+ <ID>34100</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34100>
+ <BasePane-34100>
+ <IsVisible>0</IsVisible>
+ </BasePane-34100>
+ <IarPane-34100 />
+ <Pane-34101>
+ <ID>34101</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34101>
+ <BasePane-34101>
+ <IsVisible>0</IsVisible>
+ </BasePane-34101>
+ <IarPane-34101 />
+ <Pane-34103>
+ <ID>34103</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34103>
+ <BasePane-34103>
+ <IsVisible>0</IsVisible>
+ </BasePane-34103>
+ <IarPane-34103 />
+ <Pane-34104>
+ <ID>34104</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34104>
+ <BasePane-34104>
+ <IsVisible>0</IsVisible>
+ </BasePane-34104>
+ <IarPane-34104 />
+ <Pane-34105>
+ <ID>34105</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>040000004A00000002010000AA020000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34105>
+ <BasePane-34105>
+ <IsVisible>0</IsVisible>
+ </BasePane-34105>
+ <Pane-34123>
+ <ID>34123</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>0000000060000000060100009A040000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34123>
+ <BasePane-34123>
+ <IsVisible>1</IsVisible>
+ </BasePane-34123>
+ <Pane-34106>
+ <ID>34106</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34106>
+ <BasePane-34106>
+ <IsVisible>0</IsVisible>
+ </BasePane-34106>
+ <IarPane-34106 />
+ <Pane-34107>
+ <ID>34107</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34107>
+ <BasePane-34107>
+ <IsVisible>0</IsVisible>
+ </BasePane-34107>
+ <IarPane-34107 />
+ <Pane-34108>
+ <ID>34108</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34108>
+ <BasePane-34108>
+ <IsVisible>0</IsVisible>
+ </BasePane-34108>
+ <IarPane-34108 />
+ <Pane-34109>
+ <ID>34109</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34109>
+ <BasePane-34109>
+ <IsVisible>0</IsVisible>
+ </BasePane-34109>
+ <IarPane-34109 />
+ <Pane-34110>
+ <ID>34110</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34110>
+ <BasePane-34110>
+ <IsVisible>0</IsVisible>
+ </BasePane-34110>
+ <IarPane-34110 />
+ <Pane-34111>
+ <ID>34111</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34111>
+ <BasePane-34111>
+ <IsVisible>0</IsVisible>
+ </BasePane-34111>
+ <IarPane-34111 />
+ <Pane-34112>
+ <ID>34112</ID>
+ <RectRecentFloat>6D080000210000001B0A0000E1000000</RectRecentFloat>
+ <RectRecentDocked>0000000000000000AE010000C0000000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34112>
+ <BasePane-34112>
+ <IsVisible>0</IsVisible>
+ </BasePane-34112>
+ <IarPane-34112 />
+ <Pane-34113>
+ <ID>34113</ID>
+ <RectRecentFloat>6D080000210000001B0A0000E1000000</RectRecentFloat>
+ <RectRecentDocked>0000000000000000AE010000C0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34113>
+ <BasePane-34113>
+ <IsVisible>0</IsVisible>
+ </BasePane-34113>
+ <IarPane-34113 />
+ <Pane-34115>
+ <ID>34115</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34115>
+ <BasePane-34115>
+ <IsVisible>0</IsVisible>
+ </BasePane-34115>
+ <IarPane-34115 />
+ <Pane-34116>
+ <ID>34116</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>0A01000014020000DF050000C4020000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34116>
+ <BasePane-34116>
+ <IsVisible>0</IsVisible>
+ </BasePane-34116>
+ <Pane-34117>
+ <ID>34117</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>0A01000014020000DF050000C4020000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34117>
+ <BasePane-34117>
+ <IsVisible>0</IsVisible>
+ </BasePane-34117>
+ <Pane-34118>
+ <ID>34118</ID>
+ <RectRecentFloat>6D080000210000008F090000D1000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B0000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34118>
+ <BasePane-34118>
+ <IsVisible>0</IsVisible>
+ </BasePane-34118>
+ <IarPane-34118 />
+ <Pane-34119>
+ <ID>34119</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>C00800004C000000000A00009A040000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34119>
+ <BasePane-34119>
+ <IsVisible>1</IsVisible>
+ </BasePane-34119>
+ <IarPane-34119>
+ <expressions>
+ <item>thread_0_counter</item>
+ <item>thread_1_counter</item>
+ <item>thread_2_counter</item>
+ <item>thread_3_counter</item>
+ <item>thread_4_counter</item>
+ <item>thread_5_counter</item>
+ <item>thread_6_counter</item>
+ <item>thread_7_counter</item>
+ <item></item>
+ </expressions>
+ <col-names>
+ <item>Expression</item>
+ <item>Location</item>
+ <item>Type</item>
+ <item>Value</item>
+ </col-names>
+ <col-widths>
+ <item>145</item>
+ <item>150</item>
+ <item>100</item>
+ <item>100</item>
+ </col-widths>
+ </IarPane-34119>
+ <Pane-34120>
+ <ID>34120</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34120>
+ <BasePane-34120>
+ <IsVisible>0</IsVisible>
+ </BasePane-34120>
+ <IarPane-34120 />
+ <Pane-34121>
+ <ID>34121</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34121>
+ <BasePane-34121>
+ <IsVisible>0</IsVisible>
+ </BasePane-34121>
+ <IarPane-34121 />
+ <Pane-34122>
+ <ID>34122</ID>
+ <RectRecentFloat>6D080000210000007309000081010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000060010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34122>
+ <BasePane-34122>
+ <IsVisible>0</IsVisible>
+ </BasePane-34122>
+ <IarPane-34122 />
+ <DockingManager-256>
+ <DockingPaneAndPaneDividers>0000000080000000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000004A85000000000000000000000000000000000000010000004A850000010000004A850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000498500000000000000000000000000000000000001000000498500000100000049850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000488500000000000000000000000000000000000001000000488500000100000048850000000000000040000001000000FFFFFFFFFFFFFFFFBC0800004C000000C00800009A040000010000000200001004000000010000003AFCFFFFB5000000478500000000000000000000000000000000000001000000478500000100000047850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000468500000000000000000000000000000000000001000000468500000100000046850000000000000080000000000000FFFFFFFFFFFFFFFF0A01000010020000DF05000014020000000000000100000004000000010000000000000000000000458500000000000000000000000000000000000001000000458500000100000045850000000000000080000000000000FFFFFFFFFFFFFFFF0A01000010020000DF05000014020000000000000100000004000000010000000000000000000000448500000000000000000000000000000000000001000000448500000100000044850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000418500000000000000000000000000000000000001000000418500000100000041850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000408500000000000000000000000000000000000001000000408500000100000040850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000003F85000000000000000000000000000000000000010000003F850000010000003F850000000000000020000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000003E85000000000000000000000000000000000000010000003E850000010000003E850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000003D85000000000000000000000000000000000000010000003D850000010000003D850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000003C85000000000000000000000000000000000000010000003C850000010000003C850000000000000010000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000003B85000000000000000000000000000000000000010000003B850000010000003B850000000000000010000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000003A85000000000000000000000000000000000000010000003A850000010000003A850000000000000010000001000000FFFFFFFFFFFFFFFF060100004C0000000A0100009A040000010000000200001004000000010000000000000000000000FFFFFFFF010000004B850000FFFF02000B004354616262656450616E650010000001000000000000004900000006010000DB020000000000004C000000060100009A040000000000004010005601000000FFFEFF0957006F0072006B0073007000610063006500010000004B85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF4B85000001000000FFFFFFFF4B850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000388500000000000000000000000000000000000001000000388500000100000038850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000378500000000000000000000000000000000000001000000378500000100000037850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000358500000000000000000000000000000000000001000000358500000100000035850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000348500000000000000000000000000000000000001000000348500000100000034850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000338500000000000000000000000000000000000001000000338500000100000033850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000328500000000000000000000000000000000000001000000328500000100000032850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000318500000000000000000000000000000000000001000000318500000100000031850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000308500000000000000000000000000000000000001000000308500000100000030850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002F85000000000000000000000000000000000000010000002F850000010000002F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002E85000000000000000000000000000000000000010000002E850000010000002E850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002D85000000000000000000000000000000000000010000002D850000010000002D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002C85000000000000000000000000000000000000010000002C850000010000002C850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002B85000000000000000000000000000000000000010000002B850000010000002B850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002A85000000000000000000000000000000000000010000002A850000010000002A850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000298500000000000000000000000000000000000001000000298500000100000029850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000288500000000000000000000000000000000000001000000288500000100000028850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000278500000000000000000000000000000000000001000000278500000100000027850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000268500000000000000000000000000000000000001000000268500000100000026850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000258500000000000000000000000000000000000001000000258500000100000025850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000248500000000000000000000000000000000000001000000248500000100000024850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000238500000000000000000000000000000000000001000000238500000100000023850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000228500000000000000000000000000000000000001000000228500000100000022850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000208500000000000000000000000000000000000001000000208500000100000020850000000000000080000000000000FFFFFFFFFFFFFFFF0000000000020000DF05000004020000000000000100000004000000010000000000000000000000FFFFFFFF040000001C8500001D8500001E8500001F85000001800080000000000000000000001B020000DF050000DB0200000000000004020000DF050000C4020000000000004080004604000000FFFEFF084D0065006D006F007200790020003100000000001C85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003200000000001D85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003300000000001E85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003400000000001F85000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF1C85000001000000FFFFFFFF1C850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000001B85000000000000000000000000000000000000010000001B850000010000001B850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000001A85000000000000000000000000000000000000010000001A850000010000001A850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000198500000000000000000000000000000000000001000000198500000100000019850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000188500000000000000000000000000000000000001000000188500000100000018850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000178500000000000000000000000000000000000001000000178500000100000017850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000168500000000000000000000000000000000000001000000168500000100000016850000000000000020000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000158500000000000000000000000000000000000001000000158500000100000015850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000118500000000000000000000000000000000000001000000118500000100000011850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000E85000000000000000000000000000000000000010000000E850000010000000E850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000B85000000000000000000000000000000000000010000000B850000010000000B850000000000000020000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000A85000000000000000000000000000000000000010000000A850000010000000A850000000000000080000000000000FFFFFFFFFFFFFFFF0000000030020000DF05000034020000000000000100000004000000010000000000000000000000FFFFFFFF010000002185000001800080000000000000000000004B020000DF050000DB0200000000000034020000DF050000C4020000000000004080004601000000FFFEFF11460075006E006300740069006F006E002000500072006F00660069006C0065007200000000002185000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF2185000001000000FFFFFFFF21850000000000000010000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000001000000FFFFFFFFFFFFFFFF000000009A040000000A00009E040000010000000100001004000000010000000000000000000000FFFFFFFF07000000058500001085000012850000138500001485000036850000428500000180008000000100000000000000DF020000DF0500008F030000000000009E040000000A00004E050000000000004080005607000000FFFEFF054200750069006C006400000000000585000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000001085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300010000001285000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000001385000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200069006E002000460069006C0065007300000000001485000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000003685000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000004285000001000000FFFFFFFFFFFFFFFF02000000000000000000000000000000000000000000000001000000FFFFFFFF0585000001000000FFFFFFFF05850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000048500000000000000000000000000000000000001000000048500000100000004850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100001004000000010000000000000000000000508500000000000000000000000000000000000001000000508500000100000050850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000010040000000100000000000000000000004F85000000000000000000000000000000000000010000004F850000010000004F850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000004E85000000000000000000000000000000000000010000004E850000010000004E850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000010040000000100000000000000000000004D85000000000000000000000000000000000000010000004D850000010000004D850000000000000000000000000000</DockingPaneAndPaneDividers>
+ </DockingManager-256>
+ <MFCToolBar-34048>
+ <Name>CMSIS-Pack</Name>
+ <Buttons>00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6ED0840000000004001C000000FFFEFF0000000000000000000000000001000000010000000180D1840000000000001E000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B002F000000</Buttons>
+ </MFCToolBar-34048>
+ <Pane-34048>
+ <ID>34048</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>F10300001A0000003604000034000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>1</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>47</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34048>
+ <BasePane-34048>
+ <IsVisible>1</IsVisible>
+ </BasePane-34048>
+ <MFCToolBar-34049>
+ <Name>Debug</Name>
+ <Buttons>00200000010000000800FFFF01001100434D4643546F6F6C426172427574746F6E568600000000000033000000FFFEFF000000000000000000000000000100000001000000018013860000000000002F000000FFFEFF00000000000000000000000000010000000100000001805E8600000000000035000000FFFEFF0000000000000000000000000001000000010000000180608600000000000037000000FFFEFF00000000000000000000000000010000000100000001805D8600000000000034000000FFFEFF000000000000000000000000000100000001000000018010860000000000002D000000FFFEFF000000000000000000000000000100000001000000018011860000000004002E000000FFFEFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E148600000000000030000000FFFEFF205200650073006500740020007400680065002000640065006200750067006700650064002000700072006F006700720061006D000A00520065007300650074000000000000000000000000000100000001000000000000000000000001000000020009800000000000000400FFFFFFFFFFFEFF000000000000000000000000000100000001000000000000000000000001000000000009801986000000000000FFFFFFFFFFFEFF000100000000000000000000000100000001000000000000000000000001000000000000000000FFFEFF0544006500620075006700C6000000</Buttons>
+ </MFCToolBar-34049>
+ <Pane-34049>
+ <ID>34049</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>150300001A000000F103000034000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>1</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>198</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34049>
+ <BasePane-34049>
+ <IsVisible>1</IsVisible>
+ </BasePane-34049>
+ <MFCToolBar-34050>
+ <Name>Main</Name>
+ <Buttons>00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000065000000FFFEFF000000000000000000000000000100000001000000018001E100000000000066000000FFFEFF000000000000000000000000000100000001000000018003E100000000040068000000FFFEFF0000000000000000000000000001000000010000000180008100000000000049000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000004006B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006D000000FFFEFF000000000000000000000000000100000001000000018022E10000000004006C000000FFFEFF000000000000000000000000000100000001000000018025E10000000004006F000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040072000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040073000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6E4281000000000400FFFFFFFFFFFEFF0001000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004005C000000FFFEFF000000000000000000000000000100000001000000018024E10000000004006E000000FFFEFF000000000000000000000000000100000001000000018028E100000000040070000000FFFEFF000000000000000000000000000100000001000000018029E100000000040071000000FFFEFF000000000000000000000000000100000001000000018002810000000004004B000000FFFEFF0000000000000000000000000001000000010000000180298100000000040060000000FFFEFF000000000000000000000000000100000001000000018027810000000004005E000000FFFEFF000000000000000000000000000100000001000000018028810000000004005F000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040058000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040059000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004004F000000FFFEFF00000000000000000000000000010000000100000001800C8100000000000050000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000064000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F810000000000005A000000FFFEFF000000000000000000000000000100000001000000018020810000000000005B000000FFFEFF0000000000000000000000000001000000010000000180468100000000000062000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF020000</Buttons>
+ </MFCToolBar-34050>
+ <Pane-34050>
+ <ID>34050</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>00000000180000001503000032000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>1</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34050>
+ <BasePane-34050>
+ <IsVisible>1</IsVisible>
+ </BasePane-34050>
+ <IarPane-34124>
+ <ToolBarCmdIds>
+ <item>57600</item>
+ <item>57601</item>
+ <item>57603</item>
+ <item>33024</item>
+ <item>0</item>
+ <item>57607</item>
+ <item>0</item>
+ <item>57635</item>
+ <item>57634</item>
+ <item>57637</item>
+ <item>0</item>
+ <item>57643</item>
+ <item>57644</item>
+ <item>0</item>
+ <item>33090</item>
+ <item>33057</item>
+ <item>57636</item>
+ <item>57640</item>
+ <item>57641</item>
+ <item>33026</item>
+ <item>33065</item>
+ <item>33063</item>
+ <item>33064</item>
+ <item>33053</item>
+ <item>33054</item>
+ <item>0</item>
+ <item>33035</item>
+ <item>33036</item>
+ <item>34399</item>
+ <item>0</item>
+ <item>33055</item>
+ <item>33056</item>
+ <item>33094</item>
+ <item>0</item>
+ </ToolBarCmdIds>
+ </IarPane-34124>
+ <Pane-34125>
+ <ID>34125</ID>
+ <RectRecentFloat>00000000170000000601000078010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000061010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34125>
+ <BasePane-34125>
+ <IsVisible>0</IsVisible>
+ </BasePane-34125>
+ <IarPane-34125 />
+ <Pane-34126>
+ <ID>34126</ID>
+ <RectRecentFloat>00000000170000000601000078010000</RectRecentFloat>
+ <RectRecentDocked>00000000000000000601000061010000</RectRecentDocked>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34126>
+ <BasePane-34126>
+ <IsVisible>0</IsVisible>
+ </BasePane-34126>
+ <IarPane-34126 />
+ <Pane-34127>
+ <ID>34127</ID>
+ <RectRecentFloat>000000001700000022010000C8000000</RectRecentFloat>
+ <RectRecentDocked>000000000000000022010000B1000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34127>
+ <BasePane-34127>
+ <IsVisible>0</IsVisible>
+ </BasePane-34127>
+ <Pane-34128>
+ <ID>34128</ID>
+ <RectRecentFloat>000000001700000080020000A8000000</RectRecentFloat>
+ <RectRecentDocked>00000000000000008002000091000000</RectRecentDocked>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34128>
+ <BasePane-34128>
+ <IsVisible>0</IsVisible>
+ </BasePane-34128>
+ <MFCToolBar-34124>
+ <Name>Main</Name>
+ <Buttons>00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000064000000FFFEFF000000000000000000000000000100000001000000018001E100000000000065000000FFFEFF000000000000000000000000000100000001000000018003E100000000000067000000FFFEFF0000000000000000000000000001000000010000000180008100000000000048000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E10000000000006A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E10000000004006C000000FFFEFF000000000000000000000000000100000001000000018022E10000000004006B000000FFFEFF000000000000000000000000000100000001000000018025E10000000000006E000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040071000000FFFEFF00000000000000000000000000010000000100000001802CE100000000040072000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000000FFFFFFFFFFFEFF0000000000000000000100000000000000010000007800000002002050FFFFFFFFFFFEFF0096000000000000000000018021810000000004005B000000FFFEFF000000000000000000000000000100000001000000018024E10000000000006D000000FFFEFF000000000000000000000000000100000001000000018028E10000000004006F000000FFFEFF000000000000000000000000000100000001000000018029E100000000000070000000FFFEFF000000000000000000000000000100000001000000018002810000000000004A000000FFFEFF000000000000000000000000000100000001000000018029810000000000005F000000FFFEFF000000000000000000000000000100000001000000018027810000000000005D000000FFFEFF000000000000000000000000000100000001000000018028810000000000005E000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040057000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040058000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000000004004E000000FFFEFF00000000000000000000000000010000000100000001800C810000000000004F000000FFFEFF00000000000000000000000000010000000100000001805F8600000000000063000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F8100000000000059000000FFFEFF000000000000000000000000000100000001000000018020810000000000005A000000FFFEFF0000000000000000000000000001000000010000000180468100000000020061000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E00FF7F0000</Buttons>
+ </MFCToolBar-34124>
+ <Pane-34124>
+ <ID>34124</ID>
+ <RectRecentFloat>0A0000000A0000006E0000006E000000</RectRecentFloat>
+ <RectRecentDocked>0000000000000000150300001A000000</RectRecentDocked>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <IsFloating>0</IsFloating>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ </Pane-34124>
+ <BasePane-34124>
+ <IsVisible>1</IsVisible>
+ </BasePane-34124>
+ </Desktop>
+ </WindowStorage>
+</Project>
diff --git a/ports/arm11/iar/example_build/settings/sample_threadx.dnx b/ports/arm11/iar/example_build/settings/sample_threadx.dnx
new file mode 100644
index 00000000..1e3115df
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/sample_threadx.dnx
@@ -0,0 +1,99 @@
+<?xml version="1.0"?>
+<settings>
+ <Stack>
+ <FillEnabled>0</FillEnabled>
+ <OverflowWarningsEnabled>1</OverflowWarningsEnabled>
+ <WarningThreshold>90</WarningThreshold>
+ <SpWarningsEnabled>1</SpWarningsEnabled>
+ <WarnLogOnly>1</WarnLogOnly>
+ <UseTrigger>1</UseTrigger>
+ <TriggerName>main</TriggerName>
+ <LimitSize>0</LimitSize>
+ <ByteLimit>50</ByteLimit>
+ </Stack>
+ <Trace1>
+ <Enabled>0</Enabled>
+ <ShowSource>1</ShowSource>
+ </Trace1>
+ <DebugChecksum>
+ <Checksum>1018058853</Checksum>
+ </DebugChecksum>
+ <CodeCoverage>
+ <Enabled>0</Enabled>
+ <ShowSource>0</ShowSource>
+ <HideCovered>0</HideCovered>
+ </CodeCoverage>
+ <Disassembly>
+ <InstrCount>0</InstrCount>
+ </Disassembly>
+ <Exceptions>
+ <StopOnUncaught>_ 0</StopOnUncaught>
+ <StopOnThrow>_ 0</StopOnThrow>
+ </Exceptions>
+ <CallStack>
+ <ShowArgs>0</ShowArgs>
+ </CallStack>
+ <DriverProfiling>
+ <Enabled>0</Enabled>
+ <Mode>1</Mode>
+ <Graph>0</Graph>
+ <Symbiont>0</Symbiont>
+ </DriverProfiling>
+ <CallStackLog>
+ <Enabled>0</Enabled>
+ </CallStackLog>
+ <CallStackStripe>
+ <ShowTiming>1</ShowTiming>
+ </CallStackStripe>
+ <TermIOLog>
+ <LoggingEnabled>_ 0</LoggingEnabled>
+ <LogFile>_ ""</LogFile>
+ </TermIOLog>
+ <LogFile>
+ <LoggingEnabled>_ 0</LoggingEnabled>
+ <LogFile>_ ""</LogFile>
+ <Category>_ 0</Category>
+ </LogFile>
+ <InterruptLog>
+ <LogEnabled>0</LogEnabled>
+ <GraphEnabled>0</GraphEnabled>
+ <ShowTimeLog>1</ShowTimeLog>
+ <SumEnabled>0</SumEnabled>
+ <ShowTimeSum>1</ShowTimeSum>
+ <SumSortOrder>0</SumSortOrder>
+ </InterruptLog>
+ <DataLog>
+ <LogEnabled>0</LogEnabled>
+ <GraphEnabled>0</GraphEnabled>
+ <ShowTimeLog>1</ShowTimeLog>
+ <SumEnabled>0</SumEnabled>
+ <ShowTimeSum>1</ShowTimeSum>
+ </DataLog>
+ <DisassembleMode>
+ <mode>0</mode>
+ </DisassembleMode>
+ <Breakpoints2>
+ <Count>0</Count>
+ </Breakpoints2>
+ <Interrupts>
+ <Enabled>1</Enabled>
+ <Irq0>_ 0 9999 0 9999 1 0 0 100 0 1 "IRQ 1 0x18 CPSR.I"</Irq0>
+ <Count>1</Count>
+ </Interrupts>
+ <MemConfig>
+ <Base>1</Base>
+ <Manual>0</Manual>
+ <Ddf>1</Ddf>
+ <TypeViol>0</TypeViol>
+ <Stop>1</Stop>
+ </MemConfig>
+ <Aliases>
+ <Count>0</Count>
+ <SuppressDialog>0</SuppressDialog>
+ </Aliases>
+ <Simulator>
+ <Freq>10000000</Freq>
+ <FreqHi>0</FreqHi>
+ <MultiCoreRunAll>1</MultiCoreRunAll>
+ </Simulator>
+</settings>
diff --git a/ports/arm11/iar/example_build/settings/tx.Debug.cspy.bat b/ports/arm11/iar/example_build/settings/tx.Debug.cspy.bat
new file mode 100644
index 00000000..256ebf4d
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.Debug.cspy.bat
@@ -0,0 +1,40 @@
+@REM This batch file has been generated by the IAR Embedded Workbench
+@REM C-SPY Debugger, as an aid to preparing a command line for running
+@REM the cspybat command line utility using the appropriate settings.
+@REM
+@REM Note that this file is generated every time a new debug session
+@REM is initialized, so you may want to move or rename the file before
+@REM making changes.
+@REM
+@REM You can launch cspybat by typing the name of this batch file followed
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
+@REM
+@REM Read about available command line parameters in the C-SPY Debugging
+@REM Guide. Hints about additional command line parameters that may be
+@REM useful in specific cases:
+@REM --download_only Downloads a code image without starting a debug
+@REM session afterwards.
+@REM --silent Omits the sign-on message.
+@REM --timeout Limits the maximum allowed execution time.
+@REM
+
+
+@echo off
+
+if not "%~1" == "" goto debugFile
+
+@echo on
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\common\bin\cspybat" -f "C:\release\threadx\settings\tx.Debug.general.xcl" --backend -f "C:\release\threadx\settings\tx.Debug.driver.xcl"
+
+@echo off
+goto end
+
+:debugFile
+
+@echo on
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\common\bin\cspybat" -f "C:\release\threadx\settings\tx.Debug.general.xcl" "--debug_file=%~1" --backend -f "C:\release\threadx\settings\tx.Debug.driver.xcl"
+
+@echo off
+:end \ No newline at end of file
diff --git a/ports/arm11/iar/example_build/settings/tx.Debug.cspy.ps1 b/ports/arm11/iar/example_build/settings/tx.Debug.cspy.ps1
new file mode 100644
index 00000000..6a1889c0
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.Debug.cspy.ps1
@@ -0,0 +1,31 @@
+param([String]$debugfile = "");
+
+# This powershell file has been generated by the IAR Embedded Workbench
+# C - SPY Debugger, as an aid to preparing a command line for running
+# the cspybat command line utility using the appropriate settings.
+#
+# Note that this file is generated every time a new debug session
+# is initialized, so you may want to move or rename the file before
+# making changes.
+#
+# You can launch cspybat by typing Powershell.exe -File followed by the name of this batch file, followed
+# by the name of the debug file (usually an ELF / DWARF or UBROF file).
+#
+# Read about available command line parameters in the C - SPY Debugging
+# Guide. Hints about additional command line parameters that may be
+# useful in specific cases :
+# --download_only Downloads a code image without starting a debug
+# session afterwards.
+# --silent Omits the sign - on message.
+# --timeout Limits the maximum allowed execution time.
+#
+
+
+if ($debugfile -eq "")
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\common\bin\cspybat" -f "C:\release\threadx\settings\tx.Debug.general.xcl" --backend -f "C:\release\threadx\settings\tx.Debug.driver.xcl"
+}
+else
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\common\bin\cspybat" -f "C:\release\threadx\settings\tx.Debug.general.xcl" --debug_file=$debugfile --backend -f "C:\release\threadx\settings\tx.Debug.driver.xcl"
+}
diff --git a/ports/arm11/iar/example_build/settings/tx.Debug.driver.xcl b/ports/arm11/iar/example_build/settings/tx.Debug.driver.xcl
new file mode 100644
index 00000000..06e18c00
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.Debug.driver.xcl
@@ -0,0 +1,13 @@
+"--endian=little"
+
+"--cpu=ARM1136J-S"
+
+"--fpu=None"
+
+"--semihosting"
+
+"--multicore_nr_of_cores=1"
+
+
+
+
diff --git a/ports/arm11/iar/example_build/settings/tx.Debug.general.xcl b/ports/arm11/iar/example_build/settings/tx.Debug.general.xcl
new file mode 100644
index 00000000..deeeb2f9
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.Debug.general.xcl
@@ -0,0 +1,11 @@
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\arm\bin\armproc.dll"
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\arm\bin\armsim2.dll"
+
+"C:\release\threadx\Debug\Exe\tx.out"
+
+--plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0_2\arm\bin\armbat.dll"
+
+
+
+
diff --git a/ports/arm11/iar/example_build/settings/tx.crun b/ports/arm11/iar/example_build/settings/tx.crun
new file mode 100644
index 00000000..d71ea555
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.crun
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<crun>
+ <version>1</version>
+ <filter_entries>
+ <filter index="0" type="default">
+ <type>*</type>
+ <start_file>*</start_file>
+ <end_file>*</end_file>
+ <action_debugger>0</action_debugger>
+ <action_log>1</action_log>
+ </filter>
+ </filter_entries>
+</crun>
diff --git a/ports/arm11/iar/example_build/settings/tx.dbgdt b/ports/arm11/iar/example_build/settings/tx.dbgdt
new file mode 100644
index 00000000..73e71f6e
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.dbgdt
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Project>
+ <WindowStorage />
+</Project>
diff --git a/ports/arm11/iar/example_build/settings/tx.dnx b/ports/arm11/iar/example_build/settings/tx.dnx
new file mode 100644
index 00000000..1872e83f
--- /dev/null
+++ b/ports/arm11/iar/example_build/settings/tx.dnx
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<settings>
+ <InterruptLog>
+ <LogEnabled>0</LogEnabled>
+ <GraphEnabled>0</GraphEnabled>
+ <ShowTimeLog>1</ShowTimeLog>
+ <SumEnabled>0</SumEnabled>
+ <ShowTimeSum>1</ShowTimeSum>
+ <SumSortOrder>0</SumSortOrder>
+ </InterruptLog>
+ <DataLog>
+ <LogEnabled>0</LogEnabled>
+ <GraphEnabled>0</GraphEnabled>
+ <ShowTimeLog>1</ShowTimeLog>
+ <SumEnabled>0</SumEnabled>
+ <ShowTimeSum>1</ShowTimeSum>
+ </DataLog>
+ <Stack>
+ <FillEnabled>0</FillEnabled>
+ <OverflowWarningsEnabled>1</OverflowWarningsEnabled>
+ <WarningThreshold>90</WarningThreshold>
+ <SpWarningsEnabled>1</SpWarningsEnabled>
+ <WarnLogOnly>1</WarnLogOnly>
+ <UseTrigger>1</UseTrigger>
+ <TriggerName>main</TriggerName>
+ <LimitSize>0</LimitSize>
+ <ByteLimit>50</ByteLimit>
+ </Stack>
+ <DisassembleMode>
+ <mode>0</mode>
+ </DisassembleMode>
+ <Breakpoints2>
+ <Count>0</Count>
+ </Breakpoints2>
+ <Interrupts>
+ <Enabled>1</Enabled>
+ </Interrupts>
+ <MemConfig>
+ <Base>1</Base>
+ <Manual>0</Manual>
+ <Ddf>1</Ddf>
+ <TypeViol>0</TypeViol>
+ <Stop>1</Stop>
+ </MemConfig>
+ <Trace1>
+ <Enabled>0</Enabled>
+ <ShowSource>1</ShowSource>
+ </Trace1>
+ <Aliases>
+ <Count>0</Count>
+ <SuppressDialog>0</SuppressDialog>
+ </Aliases>
+ <Simulator>
+ <Freq>10000000</Freq>
+ <FreqHi>0</FreqHi>
+ <MultiCoreRunAll>1</MultiCoreRunAll>
+ </Simulator>
+</settings>
diff --git a/ports/arm11/iar/example_build/tx.ewd b/ports/arm11/iar/example_build/tx.ewd
new file mode 100644
index 00000000..c9ab0958
--- /dev/null
+++ b/ports/arm11/iar/example_build/tx.ewd
@@ -0,0 +1,2974 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>32</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>ARMSIM_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state>8.11.2.13604</state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state>$TOOLKIT_DIR$\config\flashloader\</state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCoresSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreAMPConfigType</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreSessionFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCTpiuBaseOption</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>JLinkSpeed</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>NULINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>7</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUseServerSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkProbeList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>Browse to your third-party driver</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVccEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>OCXDSDigitalStatesConfigFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8b.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8bBE.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-SPY</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>32</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCVariant</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>MemOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MemFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>RunToEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RunToName</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDDFArgumentProducer</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadSuppressDownload</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDownloadVerifyAll</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProductVersion</name>
+ <state>4.11A</state>
+ </option>
+ <option>
+ <name>OCDynDriverList</name>
+ <state>ARMSIM_ID</state>
+ </option>
+ <option>
+ <name>OCLastSavedByProductVersion</name>
+ <state></state>
+ </option>
+ <option>
+ <name>UseFlashLoader</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CLowLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CDevice</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>FlashLoadersV3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesSuppressCheck3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesPath3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OverrideDefFlashBoard</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesOffset1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesOffset3</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCImagesUse1</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCImagesUse3</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCDeviceConfigMacroFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCDebuggerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAllMTBOptions</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCores</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreWorkspace</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveProject</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCMulticoreSlaveConfiguration</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDownloadExtraImage</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCAttachSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MassEraseBeforeFlashing</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreNrOfCoresSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCMulticoreAMPConfigType</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCMulticoreSessionFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCTpiuBaseOption</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ARMSIM_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCSimDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCSimEnablePSP</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspOverrideConfig</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCSimPspConfigFile</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CADI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCadiMemory</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Fast Model</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCADILogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCADILogFileEditB</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CMSISDAP_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>4</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CMSISDAPResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>CMSISDAPHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>CMSISDAPDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CMSISDAPProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CMSISDAPSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCMSISDAPUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>GDBSERVER_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJTagBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJTagUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IJET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OCIarProbeScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetResetList</name>
+ <version>1</version>
+ <state>10</state>
+ </option>
+ <option>
+ <name>IjetHWResetDuration</name>
+ <state>300</state>
+ </option>
+ <option>
+ <name>IjetHWResetDelay</name>
+ <state>200</state>
+ </option>
+ <option>
+ <name>IjetPowerFromProbe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPowerRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>IjetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTargetEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetJtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetProtocolRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSwoPin</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetCpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetSwoPrescalerList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetRestoreBreakpointsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetUpdateBreakpointsEdit</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>RDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchUndef</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchData</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchPrefetch</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>RDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CatchMMERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchNOCPERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchCHKERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSTATERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchBUSERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchINTERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchSFERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchHARDERR</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeCfgOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCProbeConfig</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IjetProbeConfigRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetMultiCPUNumber</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetSelectedCPUBehaviour</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ICpuName</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCJetEmuParams</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetPreferETB</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IjetTraceSettingsList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IjetTraceSizeList</name>
+ <version>0</version>
+ <state>4</state>
+ </option>
+ <option>
+ <name>FlashBoardPathSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCIjetUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>JLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>16</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>JLinkSpeed</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCJLinkDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCJLinkHWResetDelay</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>JLinkInitialSpeed</name>
+ <state>32</state>
+ </option>
+ <option>
+ <name>CCDoJlinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCScanChainNonARMDevices</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkMultiTarget</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkIRLength</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkCommRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTCPIP</name>
+ <state>aaa.bbb.ccc.ddd</state>
+ </option>
+ <option>
+ <name>CCJLinkSpeedRadioV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCUSBDevice</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRDICatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCRDICatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkBreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkUpdateBreakpoints</name>
+ <state>main</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkResetList</name>
+ <version>6</version>
+ <state>5</state>
+ </option>
+ <option>
+ <name>CCJLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkScriptFile</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCTcpIpAlt</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCJLinkTcpIpSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkTraceSourceDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCJLinkDeviceName</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>LMIFTDI_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>LmiftdiSpeed</name>
+ <state>500</state>
+ </option>
+ <option>
+ <name>CCLmiftdiDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiftdiLogFile</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLmiFtdiInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>NULINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>PEMICRO_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>3</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCJPEMicroShowSettings</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>STLINK_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>7</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkResetList</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCpuClockEdit</name>
+ <state>72.0</state>
+ </option>
+ <option>
+ <name>CCSwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSwoClockEdit</name>
+ <state>2000</state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCSTLinkDoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkCatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkUsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkJtagSpeedList</name>
+ <version>2</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkDAPNumber</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCSTLinkDebugAccessPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkUseServerSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSTLinkProbeList</name>
+ <version>1</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>THIRDPARTY_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CThirdPartyDriverDll</name>
+ <state>Browse to your third-party driver</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CThirdPartyLogFileEditB</name>
+ <state>$TOOLKIT_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>TIFET_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetInterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVccTypeDefault</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>CCMSPFetVCCDefault</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetTargetSettlingtime</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioJtagSpeedType</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCMSPFetConnection</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetUsbComPort</name>
+ <state>Automatic</state>
+ </option>
+ <option>
+ <name>CCMSPFetAllowAccessToBSL</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetDoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCMSPFetLogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCMSPFetRadioEraseFlash</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>XDS100_ID</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>8</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OCDriverInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>TIPackageOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TIPackage</name>
+ <state></state>
+ </option>
+ <option>
+ <name>BoardFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoLogfile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>LogFile</name>
+ <state>$PROJ_DIR$\cspycomm.log</state>
+ </option>
+ <option>
+ <name>CCXds100BreakpointRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100DoUpdateBreakpoints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UpdateBreakpoints</name>
+ <state>_call_main</state>
+ </option>
+ <option>
+ <name>CCXds100CatchReset</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchUndef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSWI</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchData</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchPrefetch</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchIRQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchFIQ</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCORERESET</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchMMERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchNOCPERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchCHRERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSTATERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchBUSERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchINTERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchSFERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchHARDERR</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CatchDummy</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100CpuClockEdit</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockAuto</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SwoClockEdit</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>CCXds100HWResetDelay</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ResetList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNo</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCXds100UsbSerialNoSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100JtagSpeedList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100InterfaceCmdLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100ProbeList</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPortRadio</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXds100SWOPort</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVccEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCXDSTargetVoltage</name>
+ <state>###Uninitialized###</state>
+ </option>
+ <option>
+ <name>OCXDSDigitalStatesConfigFile</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ <debuggerPlugins>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\FreeRtos\FreeRtosArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\HWRTOSplugin\HWRTOSplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\Mbed\MbedArmPlugin2.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\RemedyRtosViewer\RemedyRtosViewer.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8b.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\SMX\smxAwareIarArm8bBE.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\TargetAccessServer\TargetAccessServer.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ <plugin>
+ <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+ <loadFlag>0</loadFlag>
+ </plugin>
+ </debuggerPlugins>
+ </configuration>
+</project>
diff --git a/ports/arm11/iar/example_build/tx.ewp b/ports/arm11/iar/example_build/tx.ewp
new file mode 100644
index 00000000..70a97e4f
--- /dev/null
+++ b/ports/arm11/iar/example_build/tx.ewp
@@ -0,0 +1,2766 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>31</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Debug\Exe</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Debug\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Debug\List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state>Full formatting, without multibyte support.</state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state>Full formatting, without multibyte support.</state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state>To be used with the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.30A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.50.1.24770</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>default None</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state>$TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h</state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>default None</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>28</version>
+ <state>21</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZoneModes</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>36</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>00000000</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state>$PROJ_DIR$\..\inc</state>
+ <state>$PROJ_DIR$\..\..\..\..\common\inc</state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OICompilerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCStackProtection</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>AOutputFile</name>
+ <state>$FILE_BNAME$.o</state>
+ </option>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state>noTX_ENABLE_EXECUTION_CHANGE_NOTIFY</state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>tx.out</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>lnk0t.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkTrustzoneImportLibraryOut</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>OILinkExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>C:\release\threadx\Debug\Exe\tx.a</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>General</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <version>31</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>ExePath</name>
+ <state>Release\Lib</state>
+ </option>
+ <option>
+ <name>ObjPath</name>
+ <state>Release\Obj</state>
+ </option>
+ <option>
+ <name>ListPath</name>
+ <state>Release\List</state>
+ </option>
+ <option>
+ <name>GEndianMode</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>Input description</name>
+ <state></state>
+ </option>
+ <option>
+ <name>Output description</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GOutputBinary</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGCoreOrChip</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelect</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GRuntimeLibSelectSlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>RTDescription</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OGProductVersion</name>
+ <state>4.30A</state>
+ </option>
+ <option>
+ <name>OGLastSavedByProductVersion</name>
+ <state>8.11.2.13604</state>
+ </option>
+ <option>
+ <name>GeneralEnableMisra</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraVerbose</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGChipSelectEditMenu</name>
+ <state>Default None</state>
+ </option>
+ <option>
+ <name>GenLowLevelInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GEndianModeBE</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGBufferedTerminalOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenStdoutInterface</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>GeneralMisraVer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GeneralMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>RTConfigPath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GBECoreSlave</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsis</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGUseCmsisDspLib</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GRuntimeLibThreads</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CoreVariant</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUDeviceSlave</name>
+ <state>Default None</state>
+ </option>
+ <option>
+ <name>FPU2</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NrRegs</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>NEON</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GFPUCoreSlave2</name>
+ <version>28</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGCMSISPackSelectDevice</name>
+ </option>
+ <option>
+ <name>OgLibHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGLibAdditionalLocale</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGPrintfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGPrintfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OGScanfVariant</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OGScanfMultibyteSupport</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenLocaleTags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>GenLocaleDisplayOnly</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DSPExtension</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZone</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>TrustZoneModes</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>ICCARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>36</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>CCOptimizationNoSizeConstraints</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCPreprocFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocComments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPreprocLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMnemonics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListCMessages</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCListAssSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagSuppress</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagRemark</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagWarning</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCDiagError</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCAllowList</name>
+ <version>1</version>
+ <state>11111100</state>
+ </option>
+ <option>
+ <name>CCDebugInfo</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IEndianMode</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IExtraOptionsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCLangConformance</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCSignedPlainChar</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCRequirePrototypes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCDiagWarnAreErr</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCompilerRuntimeInfo</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCLibConfigHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>PreInclude</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CompilerMisraOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCIncludePath2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CCStdIncCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCCodeSection</name>
+ <state>.text</state>
+ </option>
+ <option>
+ <name>IProcessorMode2</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevel</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CCOptStrategy</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCOptLevelSlave</name>
+ <state>3</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules98</name>
+ <version>0</version>
+ <state>1000111110110101101110011100111111101110011011000101110111101101100111111111111100110011111001110111001111111111111111111111111</state>
+ </option>
+ <option>
+ <name>CompilerMisraRules04</name>
+ <version>0</version>
+ <state>111101110010111111111000110111111111111111111111111110010111101111010101111111111111111111111111101111111011111001111011111011111111111111111</state>
+ </option>
+ <option>
+ <name>CCPosIndRopi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndRwpi</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCPosIndNoDynInit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccLang</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccCDialect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccAllowVLA</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccStaticDestr</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCppInlineSemantics</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IccFloatSemantics</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCOptStrategySlave</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCGuardCalls</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncSource</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CCEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccExceptions2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IccRTTI2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OICompilerExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CCStackProtection</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>AARM</name>
+ <archiveVersion>2</archiveVersion>
+ <data>
+ <version>10</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>AOutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AObjPrefix</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AEndian</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ACaseSensitivity</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacroChars</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnWhat</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AWarnOne</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange1</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AWarnRange2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>ADebug</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AltRegisterNames</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ADefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AList</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AListHeader</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AListing</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>Includes</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacDefs</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MacExps</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>MacExec</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OnlyAssed</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>MultiLine</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLengthCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>PageLength</name>
+ <state>80</state>
+ </option>
+ <option>
+ <name>TabSpacing</name>
+ <state>8</state>
+ </option>
+ <option>
+ <name>AXRef</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDefines</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefInternal</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AXRefDual</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>AFpuProcessor</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>ALimitErrorsCheck</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>ALimitErrorsEdit</name>
+ <state>100</state>
+ </option>
+ <option>
+ <name>AIgnoreStdInclude</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AUserIncludes</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AExtraOptionsCheckV2</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>AExtraOptionsV2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>AsmNoLiteralPool</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>OBJCOPY</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>1</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>OOCOutputFormat</name>
+ <version>3</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OCOutputOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>OOCOutputFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>OOCCommandLineProducer</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>OOCObjCopyEnable</name>
+ <state>0</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>CUSTOM</name>
+ <archiveVersion>3</archiveVersion>
+ <data>
+ <extensions></extensions>
+ <cmdline></cmdline>
+ <hasPrio>0</hasPrio>
+ </data>
+ </settings>
+ <settings>
+ <name>BICOMP</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ <settings>
+ <name>BUILDACTION</name>
+ <archiveVersion>1</archiveVersion>
+ <data>
+ <prebuild></prebuild>
+ <postbuild></postbuild>
+ </data>
+ </settings>
+ <settings>
+ <name>ILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>23</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IlinkLibIOConfig</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>XLinkMisraHandler</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkInputFileSlave</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOutputFile</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>IlinkDebugInfoEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkKeepSymbols</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkConfigDefines</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkMapFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogFile</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogInitialization</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogModule</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogSection</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogVeneer</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile</name>
+ <state>lnk0t.icf</state>
+ </option>
+ <option>
+ <name>IlinkIcfFileSlave</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEnableRemarks</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkSuppressDiags</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsRem</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsWarn</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkTreatAsErr</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkWarningsAreErrors</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkUseExtraOptions</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkExtraOptions</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkLowLevelInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAutoLibEnable</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkAdditionalLibs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkOverrideProgramEntryLabel</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabelSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkProgramEntryLabel</name>
+ <state></state>
+ </option>
+ <option>
+ <name>DoFill</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>FillerByte</name>
+ <state>0xFF</state>
+ </option>
+ <option>
+ <name>FillerStart</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>FillerEnd</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>CrcSize</name>
+ <version>0</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcAlign</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcPoly</name>
+ <state>0x11021</state>
+ </option>
+ <option>
+ <name>CrcCompl</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcBitOrder</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>CrcInitialValue</name>
+ <state>0x0</state>
+ </option>
+ <option>
+ <name>DoCrc</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkBE8Slave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkBufferedTerminalOutput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkStdoutInterfaceSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcFullSize</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIElfToolPostProcess</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogAutoLibSelect</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogRedirSymbols</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkLogUnusedFragments</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcReverseByteOrder</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCrcUseAsInput</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptInline</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsAllow</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptExceptionsForce</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkCmsis</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptMergeDuplSections</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkOptUseVfe</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkOptForceVfe</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackAnalysisEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkStackControlFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkStackCallGraphFile</name>
+ <state></state>
+ </option>
+ <option>
+ <name>CrcAlgorithm</name>
+ <version>1</version>
+ <state>1</state>
+ </option>
+ <option>
+ <name>CrcUnitSize</name>
+ <version>0</version>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkThreadsSlave</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLogCallGraph</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkIcfFile_AltDefault</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkEncInput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutput</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IlinkEncOutputBom</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkHeapSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkLocaleSelect</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkTrustzoneImportLibraryOut</name>
+ <state>###Unitialized###</state>
+ </option>
+ <option>
+ <name>OILinkExtraOption</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryFile2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySymbol2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinarySegment2</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IlinkRawBinaryAlign2</name>
+ <state></state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>IARCHIVE</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>0</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>IarchiveInputs</name>
+ <state></state>
+ </option>
+ <option>
+ <name>IarchiveOverride</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>IarchiveOutput</name>
+ <state>###Unitialized###</state>
+ </option>
+ </data>
+ </settings>
+ <settings>
+ <name>BILINK</name>
+ <archiveVersion>0</archiveVersion>
+ <data />
+ </settings>
+ </configuration>
+ <group>
+ <name>inc</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_api.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_block_pool.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_byte_pool.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_event_flags.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_initialize.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_mutex.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\inc\tx_port.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_queue.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_semaphore.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_thread.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_timer.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_trace.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_user_sample.h</name>
+ </file>
+ </group>
+ <group>
+ <name>src</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_search.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_set_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_iar.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_high_level.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_kernel_enter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_kernel_setup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_misra.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_flush.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_front_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_receive.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_send_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_ceiling_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_put_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_context_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_entry_exit_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_context_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_nesting_end.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_nesting_start.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_identify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_control.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_disable.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_irq_nesting_end.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_irq_nesting_start.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_preemption_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_relinquish.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_reset.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_schedule.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_shell_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_sleep.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_analyze.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_stack_build.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_error_handler.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_error_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_preempt_check.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_system_return.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_terminate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_time_slice.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_time_slice_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_timeout.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_vectored_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_wait_abort.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_time_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_time_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_expiration_process.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_timer_interrupt.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_system_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_system_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_thread_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_buffer_full_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_disable.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_enable.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_event_filter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_event_unfilter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_interrupt_control.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_isr_enter_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_isr_exit_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_object_register.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_object_unregister.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_user_event_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_set_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_flush.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_front_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_receive.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_send_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_ceiling_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_put_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_entry_exit_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_preemption_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_relinquish.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_reset.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_terminate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_time_slice_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_wait_abort.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_info_get.c</name>
+ </file>
+ </group>
+</project>
diff --git a/ports/arm11/iar/example_build/tx.ewt b/ports/arm11/iar/example_build/tx.ewt
new file mode 100644
index 00000000..6a5e1f91
--- /dev/null
+++ b/ports/arm11/iar/example_build/tx.ewt
@@ -0,0 +1,3427 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <fileVersion>3</fileVersion>
+ <configuration>
+ <name>Debug</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>1</debug>
+ <settings>
+ <name>C-STAT</name>
+ <archiveVersion>263</archiveVersion>
+ <data>
+ <version>263</version>
+ <cstatargs>
+ <useExtraArgs>0</useExtraArgs>
+ <extraArgs></extraArgs>
+ <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+ <analyzeTimeout>600</analyzeTimeout>
+ <enableParallel>0</enableParallel>
+ <parallelThreads>2</parallelThreads>
+ <enableFalsePositives>0</enableFalsePositives>
+ <messagesLimitEnabled>1</messagesLimitEnabled>
+ <messagesLimit>100</messagesLimit>
+ </cstatargs>
+ <cstat_settings>
+ <cstat_version>1.7.0</cstat_version>
+ <checks_tree>
+ <package enabled="true" name="STDCHECKS">
+ <group enabled="true" name="ARR">
+ <check enabled="true" name="ARR-inv-index-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr" />
+ <check enabled="true" name="ARR-inv-index" />
+ <check enabled="true" name="ARR-neg-index" />
+ <check enabled="true" name="ARR-uninit-index" />
+ </group>
+ <group enabled="true" name="ATH">
+ <check enabled="true" name="ATH-cmp-float" />
+ <check enabled="true" name="ATH-cmp-unsign-neg" />
+ <check enabled="true" name="ATH-cmp-unsign-pos" />
+ <check enabled="true" name="ATH-div-0-assign" />
+ <check enabled="false" name="ATH-div-0-cmp-aft" />
+ <check enabled="true" name="ATH-div-0-cmp-bef" />
+ <check enabled="true" name="ATH-div-0-interval" />
+ <check enabled="true" name="ATH-div-0-pos" />
+ <check enabled="true" name="ATH-div-0-unchk-global" />
+ <check enabled="true" name="ATH-div-0-unchk-local" />
+ <check enabled="true" name="ATH-div-0-unchk-param" />
+ <check enabled="true" name="ATH-div-0" />
+ <check enabled="true" name="ATH-inc-bool" />
+ <check enabled="true" name="ATH-malloc-overrun" />
+ <check enabled="true" name="ATH-neg-check-nonneg" />
+ <check enabled="true" name="ATH-neg-check-pos" />
+ <check enabled="true" name="ATH-new-overrun" />
+ <check enabled="false" name="ATH-overflow-cast" />
+ <check enabled="true" name="ATH-overflow" />
+ <check enabled="true" name="ATH-shift-bounds" />
+ <check enabled="true" name="ATH-shift-neg" />
+ <check enabled="true" name="ATH-sizeof-by-sizeof" />
+ </group>
+ <group enabled="true" name="CAST">
+ <check enabled="false" name="CAST-old-style" />
+ </group>
+ <group enabled="true" name="CATCH">
+ <check enabled="true" name="CATCH-object-slicing" />
+ <check enabled="false" name="CATCH-xtor-bad-member" />
+ </group>
+ <group enabled="true" name="COMMA">
+ <check enabled="false" name="COMMA-overload" />
+ </group>
+ <group enabled="true" name="COMMENT">
+ <check enabled="true" name="COMMENT-nested" />
+ </group>
+ <group enabled="true" name="CONST">
+ <check enabled="true" name="CONST-member-ret" />
+ </group>
+ <group enabled="true" name="COP">
+ <check enabled="false" name="COP-alloc-ctor" />
+ <check enabled="true" name="COP-assign-op-ret" />
+ <check enabled="true" name="COP-assign-op-self" />
+ <check enabled="true" name="COP-assign-op" />
+ <check enabled="true" name="COP-copy-ctor" />
+ <check enabled="false" name="COP-dealloc-dtor" />
+ <check enabled="true" name="COP-dtor-throw" />
+ <check enabled="true" name="COP-dtor" />
+ <check enabled="true" name="COP-init-order" />
+ <check enabled="true" name="COP-init-uninit" />
+ <check enabled="true" name="COP-member-uninit" />
+ </group>
+ <group enabled="true" name="CPU">
+ <check enabled="true" name="CPU-ctor-call-virt" />
+ <check enabled="false" name="CPU-ctor-implicit" />
+ <check enabled="true" name="CPU-delete-throw" />
+ <check enabled="true" name="CPU-delete-void" />
+ <check enabled="true" name="CPU-dtor-call-virt" />
+ <check enabled="true" name="CPU-malloc-class" />
+ <check enabled="true" name="CPU-nonvirt-dtor" />
+ <check enabled="true" name="CPU-return-ref-to-class-data" />
+ </group>
+ <group enabled="true" name="DECL">
+ <check enabled="false" name="DECL-implicit-int" />
+ </group>
+ <group enabled="true" name="DEFINE">
+ <check enabled="true" name="DEFINE-hash-multiple" />
+ </group>
+ <group enabled="true" name="ENUM">
+ <check enabled="false" name="ENUM-bounds" />
+ </group>
+ <group enabled="true" name="EXP">
+ <check enabled="true" name="EXP-cond-assign" />
+ <check enabled="true" name="EXP-dangling-else" />
+ <check enabled="true" name="EXP-loop-exit" />
+ <check enabled="false" name="EXP-main-ret-int" />
+ <check enabled="false" name="EXP-null-stmt" />
+ <check enabled="false" name="EXP-stray-semicolon" />
+ </group>
+ <group enabled="true" name="EXPR">
+ <check enabled="true" name="EXPR-const-overflow" />
+ </group>
+ <group enabled="true" name="FPT">
+ <check enabled="true" name="FPT-cmp-null" />
+ <check enabled="false" name="FPT-literal" />
+ <check enabled="true" name="FPT-misuse" />
+ </group>
+ <group enabled="true" name="FUNC">
+ <check enabled="false" name="FUNC-implicit-decl" />
+ <check enabled="false" name="FUNC-unprototyped-all" />
+ <check enabled="true" name="FUNC-unprototyped-used" />
+ </group>
+ <group enabled="true" name="INCLUDE">
+ <check enabled="false" name="INCLUDE-c-file" />
+ </group>
+ <group enabled="true" name="INT">
+ <check enabled="false" name="INT-use-signed-as-unsigned-pos" />
+ <check enabled="true" name="INT-use-signed-as-unsigned" />
+ </group>
+ <group enabled="true" name="ITR">
+ <check enabled="true" name="ITR-end-cmp-aft" />
+ <check enabled="true" name="ITR-end-cmp-bef" />
+ <check enabled="true" name="ITR-invalidated" />
+ <check enabled="false" name="ITR-mismatch-alg" />
+ <check enabled="false" name="ITR-store" />
+ <check enabled="true" name="ITR-uninit" />
+ </group>
+ <group enabled="true" name="LIB">
+ <check enabled="false" name="LIB-bsearch-overrun-pos" />
+ <check enabled="false" name="LIB-bsearch-overrun" />
+ <check enabled="false" name="LIB-fn-unsafe" />
+ <check enabled="false" name="LIB-fread-overrun-pos" />
+ <check enabled="true" name="LIB-fread-overrun" />
+ <check enabled="false" name="LIB-memchr-overrun-pos" />
+ <check enabled="true" name="LIB-memchr-overrun" />
+ <check enabled="false" name="LIB-memcpy-overrun-pos" />
+ <check enabled="true" name="LIB-memcpy-overrun" />
+ <check enabled="false" name="LIB-memset-overrun-pos" />
+ <check enabled="true" name="LIB-memset-overrun" />
+ <check enabled="false" name="LIB-putenv" />
+ <check enabled="false" name="LIB-qsort-overrun-pos" />
+ <check enabled="false" name="LIB-qsort-overrun" />
+ <check enabled="true" name="LIB-return-const" />
+ <check enabled="true" name="LIB-return-error" />
+ <check enabled="true" name="LIB-return-leak" />
+ <check enabled="true" name="LIB-return-neg" />
+ <check enabled="true" name="LIB-return-null" />
+ <check enabled="false" name="LIB-sprintf-overrun" />
+ <check enabled="false" name="LIB-std-sort-overrun-pos" />
+ <check enabled="true" name="LIB-std-sort-overrun" />
+ <check enabled="false" name="LIB-strcat-overrun-pos" />
+ <check enabled="true" name="LIB-strcat-overrun" />
+ <check enabled="false" name="LIB-strcpy-overrun-pos" />
+ <check enabled="true" name="LIB-strcpy-overrun" />
+ <check enabled="false" name="LIB-strncat-overrun-pos" />
+ <check enabled="true" name="LIB-strncat-overrun" />
+ <check enabled="false" name="LIB-strncmp-overrun-pos" />
+ <check enabled="true" name="LIB-strncmp-overrun" />
+ <check enabled="false" name="LIB-strncpy-overrun-pos" />
+ <check enabled="true" name="LIB-strncpy-overrun" />
+ </group>
+ <group enabled="true" name="LOGIC">
+ <check enabled="false" name="LOGIC-overload" />
+ </group>
+ <group enabled="true" name="MEM">
+ <check enabled="true" name="MEM-delete-array-op" />
+ <check enabled="true" name="MEM-delete-op" />
+ <check enabled="true" name="MEM-double-free-alias" />
+ <check enabled="true" name="MEM-double-free-some" />
+ <check enabled="true" name="MEM-double-free" />
+ <check enabled="true" name="MEM-free-field" />
+ <check enabled="true" name="MEM-free-fptr" />
+ <check enabled="false" name="MEM-free-no-alloc-struct" />
+ <check enabled="false" name="MEM-free-no-alloc" />
+ <check enabled="true" name="MEM-free-no-use" />
+ <check enabled="true" name="MEM-free-op" />
+ <check enabled="true" name="MEM-free-struct-field" />
+ <check enabled="true" name="MEM-free-variable-alias" />
+ <check enabled="true" name="MEM-free-variable" />
+ <check enabled="true" name="MEM-leak-alias" />
+ <check enabled="false" name="MEM-leak" />
+ <check enabled="false" name="MEM-malloc-arith" />
+ <check enabled="true" name="MEM-malloc-diff-type" />
+ <check enabled="true" name="MEM-malloc-sizeof-ptr" />
+ <check enabled="true" name="MEM-malloc-sizeof" />
+ <check enabled="false" name="MEM-malloc-strlen" />
+ <check enabled="true" name="MEM-realloc-diff-type" />
+ <check enabled="true" name="MEM-return-free" />
+ <check enabled="true" name="MEM-return-no-assign" />
+ <check enabled="true" name="MEM-stack-global-field" />
+ <check enabled="true" name="MEM-stack-global" />
+ <check enabled="true" name="MEM-stack-param-ref" />
+ <check enabled="true" name="MEM-stack-param" />
+ <check enabled="true" name="MEM-stack-pos" />
+ <check enabled="true" name="MEM-stack-ref" />
+ <check enabled="true" name="MEM-stack" />
+ <check enabled="true" name="MEM-use-free-all" />
+ <check enabled="true" name="MEM-use-free-some" />
+ </group>
+ <group enabled="true" name="PTR">
+ <check enabled="true" name="PTR-arith-field" />
+ <check enabled="true" name="PTR-arith-stack" />
+ <check enabled="true" name="PTR-arith-var" />
+ <check enabled="true" name="PTR-cmp-str-lit" />
+ <check enabled="false" name="PTR-null-assign-fun-pos" />
+ <check enabled="false" name="PTR-null-assign-pos" />
+ <check enabled="true" name="PTR-null-assign" />
+ <check enabled="true" name="PTR-null-cmp-aft" />
+ <check enabled="true" name="PTR-null-cmp-bef-fun" />
+ <check enabled="true" name="PTR-null-cmp-bef" />
+ <check enabled="true" name="PTR-null-fun-pos" />
+ <check enabled="false" name="PTR-null-literal-pos" />
+ <check enabled="false" name="PTR-overload" />
+ <check enabled="false" name="PTR-singleton-arith-pos" />
+ <check enabled="true" name="PTR-singleton-arith" />
+ <check enabled="true" name="PTR-unchk-param-some" />
+ <check enabled="false" name="PTR-unchk-param" />
+ <check enabled="false" name="PTR-uninit-pos" />
+ <check enabled="true" name="PTR-uninit" />
+ </group>
+ <group enabled="true" name="RED">
+ <check enabled="false" name="RED-alloc-zero-bytes" />
+ <check enabled="false" name="RED-case-reach" />
+ <check enabled="false" name="RED-cmp-always" />
+ <check enabled="false" name="RED-cmp-never" />
+ <check enabled="false" name="RED-cond-always" />
+ <check enabled="true" name="RED-cond-const-assign" />
+ <check enabled="false" name="RED-cond-const-expr" />
+ <check enabled="false" name="RED-cond-const" />
+ <check enabled="false" name="RED-cond-never" />
+ <check enabled="true" name="RED-dead" />
+ <check enabled="false" name="RED-expr" />
+ <check enabled="false" name="RED-func-no-effect" />
+ <check enabled="true" name="RED-local-hides-global" />
+ <check enabled="false" name="RED-local-hides-local" />
+ <check enabled="false" name="RED-local-hides-member" />
+ <check enabled="true" name="RED-local-hides-param" />
+ <check enabled="false" name="RED-no-effect" />
+ <check enabled="true" name="RED-self-assign" />
+ <check enabled="true" name="RED-unused-assign" />
+ <check enabled="false" name="RED-unused-param" />
+ <check enabled="false" name="RED-unused-return-val" />
+ <check enabled="false" name="RED-unused-val" />
+ <check enabled="true" name="RED-unused-var-all" />
+ </group>
+ <group enabled="true" name="RESOURCE">
+ <check enabled="false" name="RESOURCE-deref-file" />
+ <check enabled="true" name="RESOURCE-double-close" />
+ <check enabled="true" name="RESOURCE-file-no-close-all" />
+ <check enabled="false" name="RESOURCE-file-pos-neg" />
+ <check enabled="true" name="RESOURCE-file-use-after-close" />
+ <check enabled="false" name="RESOURCE-implicit-deref-file" />
+ <check enabled="true" name="RESOURCE-write-ronly-file" />
+ </group>
+ <group enabled="true" name="SIZEOF">
+ <check enabled="true" name="SIZEOF-side-effect" />
+ </group>
+ <group enabled="true" name="SPC">
+ <check enabled="true" name="SPC-order" />
+ <check enabled="false" name="SPC-uninit-arr-all" />
+ <check enabled="true" name="SPC-uninit-struct-field-heap" />
+ <check enabled="false" name="SPC-uninit-struct-field" />
+ <check enabled="true" name="SPC-uninit-struct" />
+ <check enabled="true" name="SPC-uninit-var-all" />
+ <check enabled="true" name="SPC-uninit-var-some" />
+ <check enabled="false" name="SPC-volatile-reads" />
+ <check enabled="false" name="SPC-volatile-writes" />
+ </group>
+ <group enabled="true" name="STRUCT">
+ <check enabled="false" name="STRUCT-signed-bit" />
+ </group>
+ <group enabled="true" name="SWITCH">
+ <check enabled="true" name="SWITCH-fall-through" />
+ </group>
+ <group enabled="true" name="THROW">
+ <check enabled="false" name="THROW-empty" />
+ <check enabled="false" name="THROW-main" />
+ <check enabled="true" name="THROW-null" />
+ <check enabled="true" name="THROW-ptr" />
+ <check enabled="true" name="THROW-static" />
+ <check enabled="true" name="THROW-unhandled" />
+ </group>
+ <group enabled="true" name="UNION">
+ <check enabled="true" name="UNION-overlap-assign" />
+ <check enabled="true" name="UNION-type-punning" />
+ </group>
+ </package>
+ <package enabled="false" name="CERT">
+ <group enabled="true" name="CERT-ARR">
+ <check enabled="true" name="CERT-ARR30-C_a" />
+ <check enabled="true" name="CERT-ARR30-C_b" />
+ <check enabled="true" name="CERT-ARR30-C_c" />
+ <check enabled="true" name="CERT-ARR30-C_d" />
+ <check enabled="true" name="CERT-ARR30-C_e" />
+ <check enabled="true" name="CERT-ARR30-C_f" />
+ <check enabled="true" name="CERT-ARR30-C_g" />
+ <check enabled="true" name="CERT-ARR30-C_h" />
+ <check enabled="true" name="CERT-ARR30-C_i" />
+ <check enabled="true" name="CERT-ARR30-C_j" />
+ <check enabled="true" name="CERT-ARR32-C" />
+ <check enabled="true" name="CERT-ARR36-C_a" />
+ <check enabled="true" name="CERT-ARR36-C_b" />
+ <check enabled="true" name="CERT-ARR37-C" />
+ <check enabled="true" name="CERT-ARR38-C_a" />
+ <check enabled="true" name="CERT-ARR38-C_b" />
+ <check enabled="true" name="CERT-ARR38-C_c" />
+ <check enabled="true" name="CERT-ARR38-C_d" />
+ <check enabled="true" name="CERT-ARR38-C_e" />
+ <check enabled="true" name="CERT-ARR38-C_f" />
+ <check enabled="true" name="CERT-ARR39-C" />
+ </group>
+ <group enabled="true" name="CERT-DCL">
+ <check enabled="true" name="CERT-DCL30-C_a" />
+ <check enabled="true" name="CERT-DCL30-C_b" />
+ <check enabled="true" name="CERT-DCL30-C_c" />
+ <check enabled="true" name="CERT-DCL30-C_d" />
+ <check enabled="true" name="CERT-DCL30-C_e" />
+ <check enabled="true" name="CERT-DCL31-C" />
+ <check enabled="true" name="CERT-DCL36-C" />
+ <check enabled="true" name="CERT-DCL37-C_a" />
+ <check enabled="true" name="CERT-DCL37-C_b" />
+ <check enabled="false" name="CERT-DCL37-C_c" />
+ <check enabled="true" name="CERT-DCL38-C" />
+ <check enabled="true" name="CERT-DCL39-C" />
+ <check enabled="true" name="CERT-DCL40-C" />
+ <check enabled="true" name="CERT-DCL41-C" />
+ </group>
+ <group enabled="true" name="CERT-ENV">
+ <check enabled="true" name="CERT-ENV30-C" />
+ <check enabled="true" name="CERT-ENV31-C" />
+ <check enabled="true" name="CERT-ENV32-C" />
+ <check enabled="true" name="CERT-ENV33-C" />
+ <check enabled="true" name="CERT-ENV34-C" />
+ </group>
+ <group enabled="true" name="CERT-ERR">
+ <check enabled="true" name="CERT-ERR30-C_a" />
+ <check enabled="true" name="CERT-ERR30-C_b" />
+ <check enabled="true" name="CERT-ERR30-C_c" />
+ <check enabled="true" name="CERT-ERR30-C_d" />
+ <check enabled="true" name="CERT-ERR32-C" />
+ <check enabled="true" name="CERT-ERR33-C_a" />
+ <check enabled="true" name="CERT-ERR33-C_b" />
+ <check enabled="true" name="CERT-ERR33-C_c" />
+ <check enabled="true" name="CERT-ERR33-C_d" />
+ <check enabled="true" name="CERT-ERR34-C_a" />
+ <check enabled="true" name="CERT-ERR34-C_b" />
+ </group>
+ <group enabled="true" name="CERT-EXP">
+ <check enabled="true" name="CERT-EXP19-C" />
+ <check enabled="true" name="CERT-EXP30-C_a" />
+ <check enabled="true" name="CERT-EXP30-C_b" />
+ <check enabled="true" name="CERT-EXP32-C" />
+ <check enabled="true" name="CERT-EXP33-C_a" />
+ <check enabled="true" name="CERT-EXP33-C_b" />
+ <check enabled="true" name="CERT-EXP33-C_c" />
+ <check enabled="true" name="CERT-EXP33-C_d" />
+ <check enabled="true" name="CERT-EXP33-C_e" />
+ <check enabled="true" name="CERT-EXP33-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_a" />
+ <check enabled="true" name="CERT-EXP34-C_b" />
+ <check enabled="true" name="CERT-EXP34-C_c" />
+ <check enabled="true" name="CERT-EXP34-C_d" />
+ <check enabled="true" name="CERT-EXP34-C_e" />
+ <check enabled="true" name="CERT-EXP34-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_g" />
+ <check enabled="true" name="CERT-EXP35-C" />
+ <check enabled="true" name="CERT-EXP36-C_a" />
+ <check enabled="true" name="CERT-EXP36-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_a" />
+ <check enabled="true" name="CERT-EXP37-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_a" />
+ <check enabled="true" name="CERT-EXP39-C_b" />
+ <check enabled="true" name="CERT-EXP39-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_d" />
+ <check enabled="true" name="CERT-EXP39-C_e" />
+ <check enabled="true" name="CERT-EXP40-C_a" />
+ <check enabled="true" name="CERT-EXP40-C_b" />
+ <check enabled="true" name="CERT-EXP42-C" />
+ <check enabled="true" name="CERT-EXP43-C_a" />
+ <check enabled="true" name="CERT-EXP43-C_b" />
+ <check enabled="true" name="CERT-EXP43-C_c" />
+ <check enabled="true" name="CERT-EXP43-C_d" />
+ <check enabled="true" name="CERT-EXP44-C" />
+ <check enabled="true" name="CERT-EXP45-C" />
+ <check enabled="true" name="CERT-EXP46-C" />
+ <check enabled="true" name="CERT-EXP47-C_a" />
+ <check enabled="true" name="CERT-EXP47-C_b" />
+ </group>
+ <group enabled="true" name="CERT-FIO">
+ <check enabled="true" name="CERT-FIO30-C" />
+ <check enabled="true" name="CERT-FIO32-C" />
+ <check enabled="true" name="CERT-FIO34-C" />
+ <check enabled="true" name="CERT-FIO37-C" />
+ <check enabled="true" name="CERT-FIO38-C" />
+ <check enabled="true" name="CERT-FIO39-C" />
+ <check enabled="true" name="CERT-FIO40-C" />
+ <check enabled="true" name="CERT-FIO41-C" />
+ <check enabled="true" name="CERT-FIO42-C_a" />
+ <check enabled="false" name="CERT-FIO42-C_b" />
+ <check enabled="true" name="CERT-FIO44-C" />
+ <check enabled="true" name="CERT-FIO45-C" />
+ <check enabled="true" name="CERT-FIO46-C_a" />
+ <check enabled="true" name="CERT-FIO46-C_b" />
+ <check enabled="true" name="CERT-FIO46-C_c" />
+ <check enabled="true" name="CERT-FIO47-C_a" />
+ <check enabled="true" name="CERT-FIO47-C_b" />
+ <check enabled="true" name="CERT-FIO47-C_c" />
+ </group>
+ <group enabled="true" name="CERT-FLP">
+ <check enabled="true" name="CERT-FLP30-C_a" />
+ <check enabled="true" name="CERT-FLP30-C_b" />
+ <check enabled="true" name="CERT-FLP32-C_a" />
+ <check enabled="true" name="CERT-FLP32-C_b" />
+ <check enabled="true" name="CERT-FLP34-C" />
+ <check enabled="true" name="CERT-FLP36-C" />
+ <check enabled="true" name="CERT-FLP37-C" />
+ </group>
+ <group enabled="true" name="CERT-INT">
+ <check enabled="true" name="CERT-INT30-C_a" />
+ <check enabled="false" name="CERT-INT30-C_b" />
+ <check enabled="true" name="CERT-INT31-C_a" />
+ <check enabled="true" name="CERT-INT31-C_b" />
+ <check enabled="true" name="CERT-INT31-C_c" />
+ <check enabled="true" name="CERT-INT32-C_a" />
+ <check enabled="false" name="CERT-INT32-C_b" />
+ <check enabled="true" name="CERT-INT33-C_a" />
+ <check enabled="true" name="CERT-INT33-C_b" />
+ <check enabled="true" name="CERT-INT33-C_c" />
+ <check enabled="true" name="CERT-INT33-C_d" />
+ <check enabled="true" name="CERT-INT33-C_e" />
+ <check enabled="true" name="CERT-INT33-C_f" />
+ <check enabled="true" name="CERT-INT33-C_g" />
+ <check enabled="true" name="CERT-INT33-C_h" />
+ <check enabled="true" name="CERT-INT33-C_i" />
+ <check enabled="true" name="CERT-INT34-C_a" />
+ <check enabled="true" name="CERT-INT34-C_b" />
+ <check enabled="true" name="CERT-INT34-C_c" />
+ <check enabled="true" name="CERT-INT35-C" />
+ <check enabled="true" name="CERT-INT36-C" />
+ </group>
+ <group enabled="true" name="CERT-MEM">
+ <check enabled="true" name="CERT-MEM30-C_a" />
+ <check enabled="true" name="CERT-MEM30-C_b" />
+ <check enabled="true" name="CERT-MEM30-C_c" />
+ <check enabled="true" name="CERT-MEM31-C" />
+ <check enabled="true" name="CERT-MEM33-C_a" />
+ <check enabled="true" name="CERT-MEM33-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_a" />
+ <check enabled="true" name="CERT-MEM34-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_c" />
+ <check enabled="true" name="CERT-MEM35-C_a" />
+ <check enabled="true" name="CERT-MEM35-C_b" />
+ <check enabled="true" name="CERT-MEM35-C_c" />
+ <check enabled="true" name="CERT-MEM36-C" />
+ </group>
+ <group enabled="true" name="CERT-MSC">
+ <check enabled="true" name="CERT-MSC30-C" />
+ <check enabled="true" name="CERT-MSC32-C" />
+ <check enabled="false" name="CERT-MSC33-C" />
+ <check enabled="true" name="CERT-MSC37-C" />
+ <check enabled="true" name="CERT-MSC38-C" />
+ <check enabled="true" name="CERT-MSC39-C" />
+ <check enabled="true" name="CERT-MSC40-C_a" />
+ <check enabled="true" name="CERT-MSC40-C_b" />
+ <check enabled="true" name="CERT-MSC40-C_c" />
+ <check enabled="true" name="CERT-MSC40-C_d" />
+ <check enabled="false" name="CERT-MSC40-C_e" />
+ <check enabled="true" name="CERT-MSC41-C_a" />
+ <check enabled="true" name="CERT-MSC41-C_b" />
+ <check enabled="true" name="CERT-MSC41-C_c" />
+ </group>
+ <group enabled="true" name="CERT-PRE">
+ <check enabled="true" name="CERT-PRE31-C" />
+ <check enabled="true" name="CERT-PRE32-C_a" />
+ <check enabled="true" name="CERT-PRE32-C_b" />
+ </group>
+ <group enabled="true" name="CERT-SIG">
+ <check enabled="true" name="CERT-SIG30-C" />
+ <check enabled="true" name="CERT-SIG31-C" />
+ <check enabled="true" name="CERT-SIG34-C" />
+ <check enabled="true" name="CERT-SIG35-C" />
+ </group>
+ <group enabled="true" name="CERT-STR">
+ <check enabled="true" name="CERT-STR30-C" />
+ <check enabled="true" name="CERT-STR31-C_a" />
+ <check enabled="true" name="CERT-STR31-C_b" />
+ <check enabled="true" name="CERT-STR31-C_c" />
+ <check enabled="true" name="CERT-STR31-C_d" />
+ <check enabled="true" name="CERT-STR31-C_e" />
+ <check enabled="true" name="CERT-STR31-C_f" />
+ <check enabled="true" name="CERT-STR31-C_g" />
+ <check enabled="true" name="CERT-STR31-C_h" />
+ <check enabled="true" name="CERT-STR32-C" />
+ <check enabled="true" name="CERT-STR34-C" />
+ <check enabled="true" name="CERT-STR37-C" />
+ </group>
+ </package>
+ <package enabled="false" name="SECURITY">
+ <group enabled="true" name="SEC-BUFFER">
+ <check enabled="true" name="SEC-BUFFER-memory-leak-alias" />
+ <check enabled="false" name="SEC-BUFFER-memory-leak" />
+ <check enabled="false" name="SEC-BUFFER-memset-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-memset-overrun" />
+ <check enabled="false" name="SEC-BUFFER-qsort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-qsort-overrun" />
+ <check enabled="true" name="SEC-BUFFER-sprintf-overrun" />
+ <check enabled="false" name="SEC-BUFFER-std-sort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-std-sort-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcpy-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncmp-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncmp-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncpy-overrun" />
+ <check enabled="true" name="SEC-BUFFER-tainted-alloc-size" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy-length" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy" />
+ <check enabled="true" name="SEC-BUFFER-tainted-index" />
+ <check enabled="true" name="SEC-BUFFER-tainted-offset" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-all" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-some" />
+ </group>
+ <group enabled="true" name="SEC-DIV-0">
+ <check enabled="true" name="SEC-DIV-0-compare-after" />
+ <check enabled="true" name="SEC-DIV-0-compare-before" />
+ <check enabled="true" name="SEC-DIV-0-tainted" />
+ </group>
+ <group enabled="true" name="SEC-FILEOP">
+ <check enabled="true" name="SEC-FILEOP-open-no-close" />
+ <check enabled="false" name="SEC-FILEOP-path-traversal" />
+ <check enabled="true" name="SEC-FILEOP-use-after-close" />
+ </group>
+ <group enabled="true" name="SEC-INJECTION">
+ <check enabled="false" name="SEC-INJECTION-sql" />
+ <check enabled="false" name="SEC-INJECTION-xpath" />
+ </group>
+ <group enabled="true" name="SEC-LOOP">
+ <check enabled="true" name="SEC-LOOP-tainted-bound" />
+ </group>
+ <group enabled="true" name="SEC-NULL">
+ <check enabled="false" name="SEC-NULL-assignment-fun-pos" />
+ <check enabled="true" name="SEC-NULL-assignment" />
+ <check enabled="true" name="SEC-NULL-cmp-aft" />
+ <check enabled="true" name="SEC-NULL-cmp-bef-fun" />
+ <check enabled="true" name="SEC-NULL-cmp-bef" />
+ <check enabled="false" name="SEC-NULL-literal-pos" />
+ </group>
+ <group enabled="true" name="SEC-STRING">
+ <check enabled="true" name="SEC-STRING-format-string" />
+ <check enabled="false" name="SEC-STRING-hard-coded-credentials" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2004">
+ <group enabled="true" name="MISRAC2004-1">
+ <check enabled="true" name="MISRAC2004-1.1" />
+ <check enabled="true" name="MISRAC2004-1.2_a" />
+ <check enabled="true" name="MISRAC2004-1.2_b" />
+ <check enabled="true" name="MISRAC2004-1.2_c" />
+ <check enabled="true" name="MISRAC2004-1.2_d" />
+ <check enabled="true" name="MISRAC2004-1.2_e" />
+ <check enabled="true" name="MISRAC2004-1.2_f" />
+ <check enabled="true" name="MISRAC2004-1.2_g" />
+ <check enabled="true" name="MISRAC2004-1.2_h" />
+ <check enabled="true" name="MISRAC2004-1.2_i" />
+ <check enabled="true" name="MISRAC2004-1.2_j" />
+ </group>
+ <group enabled="true" name="MISRAC2004-2">
+ <check enabled="true" name="MISRAC2004-2.1" />
+ <check enabled="true" name="MISRAC2004-2.2" />
+ <check enabled="true" name="MISRAC2004-2.3" />
+ <check enabled="false" name="MISRAC2004-2.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-5">
+ <check enabled="true" name="MISRAC2004-5.1" />
+ <check enabled="true" name="MISRAC2004-5.2" />
+ <check enabled="true" name="MISRAC2004-5.3" />
+ <check enabled="true" name="MISRAC2004-5.4" />
+ <check enabled="false" name="MISRAC2004-5.5" />
+ <check enabled="false" name="MISRAC2004-5.6" />
+ <check enabled="false" name="MISRAC2004-5.7" />
+ </group>
+ <group enabled="true" name="MISRAC2004-6">
+ <check enabled="true" name="MISRAC2004-6.1" />
+ <check enabled="true" name="MISRAC2004-6.2" />
+ <check enabled="false" name="MISRAC2004-6.3" />
+ <check enabled="true" name="MISRAC2004-6.4" />
+ <check enabled="true" name="MISRAC2004-6.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-7">
+ <check enabled="true" name="MISRAC2004-7.1" />
+ </group>
+ <group enabled="true" name="MISRAC2004-8">
+ <check enabled="true" name="MISRAC2004-8.1" />
+ <check enabled="true" name="MISRAC2004-8.2" />
+ <check enabled="true" name="MISRAC2004-8.3" />
+ <check enabled="true" name="MISRAC2004-8.5_a" />
+ <check enabled="true" name="MISRAC2004-8.5_b" />
+ <check enabled="true" name="MISRAC2004-8.6" />
+ <check enabled="true" name="MISRAC2004-8.7" />
+ <check enabled="true" name="MISRAC2004-8.8_a" />
+ <check enabled="true" name="MISRAC2004-8.8_b" />
+ <check enabled="true" name="MISRAC2004-8.10" />
+ <check enabled="true" name="MISRAC2004-8.12" />
+ </group>
+ <group enabled="true" name="MISRAC2004-9">
+ <check enabled="true" name="MISRAC2004-9.1_a" />
+ <check enabled="true" name="MISRAC2004-9.1_b" />
+ <check enabled="true" name="MISRAC2004-9.1_c" />
+ <check enabled="true" name="MISRAC2004-9.2" />
+ <check enabled="true" name="MISRAC2004-9.3" />
+ </group>
+ <group enabled="true" name="MISRAC2004-10">
+ <check enabled="true" name="MISRAC2004-10.1_a" />
+ <check enabled="true" name="MISRAC2004-10.1_b" />
+ <check enabled="true" name="MISRAC2004-10.1_c" />
+ <check enabled="true" name="MISRAC2004-10.1_d" />
+ <check enabled="true" name="MISRAC2004-10.2_a" />
+ <check enabled="true" name="MISRAC2004-10.2_b" />
+ <check enabled="true" name="MISRAC2004-10.2_c" />
+ <check enabled="true" name="MISRAC2004-10.2_d" />
+ <check enabled="true" name="MISRAC2004-10.3" />
+ <check enabled="true" name="MISRAC2004-10.4" />
+ <check enabled="true" name="MISRAC2004-10.5" />
+ <check enabled="true" name="MISRAC2004-10.6" />
+ </group>
+ <group enabled="true" name="MISRAC2004-11">
+ <check enabled="true" name="MISRAC2004-11.1" />
+ <check enabled="false" name="MISRAC2004-11.3" />
+ <check enabled="false" name="MISRAC2004-11.4" />
+ <check enabled="true" name="MISRAC2004-11.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-12">
+ <check enabled="false" name="MISRAC2004-12.1" />
+ <check enabled="true" name="MISRAC2004-12.2_a" />
+ <check enabled="true" name="MISRAC2004-12.2_b" />
+ <check enabled="true" name="MISRAC2004-12.2_c" />
+ <check enabled="true" name="MISRAC2004-12.3" />
+ <check enabled="true" name="MISRAC2004-12.4" />
+ <check enabled="true" name="MISRAC2004-12.5" />
+ <check enabled="false" name="MISRAC2004-12.6_a" />
+ <check enabled="false" name="MISRAC2004-12.6_b" />
+ <check enabled="true" name="MISRAC2004-12.7" />
+ <check enabled="true" name="MISRAC2004-12.8" />
+ <check enabled="true" name="MISRAC2004-12.9" />
+ <check enabled="true" name="MISRAC2004-12.10" />
+ <check enabled="false" name="MISRAC2004-12.11" />
+ <check enabled="true" name="MISRAC2004-12.12_a" />
+ <check enabled="true" name="MISRAC2004-12.12_b" />
+ <check enabled="false" name="MISRAC2004-12.13" />
+ </group>
+ <group enabled="true" name="MISRAC2004-13">
+ <check enabled="true" name="MISRAC2004-13.1" />
+ <check enabled="false" name="MISRAC2004-13.2_a" />
+ <check enabled="false" name="MISRAC2004-13.2_b" />
+ <check enabled="false" name="MISRAC2004-13.2_c" />
+ <check enabled="false" name="MISRAC2004-13.2_d" />
+ <check enabled="false" name="MISRAC2004-13.2_e" />
+ <check enabled="true" name="MISRAC2004-13.3" />
+ <check enabled="true" name="MISRAC2004-13.4" />
+ <check enabled="true" name="MISRAC2004-13.5" />
+ <check enabled="true" name="MISRAC2004-13.6" />
+ <check enabled="true" name="MISRAC2004-13.7_a" />
+ <check enabled="true" name="MISRAC2004-13.7_b" />
+ </group>
+ <group enabled="true" name="MISRAC2004-14">
+ <check enabled="true" name="MISRAC2004-14.1" />
+ <check enabled="true" name="MISRAC2004-14.2" />
+ <check enabled="true" name="MISRAC2004-14.3" />
+ <check enabled="true" name="MISRAC2004-14.4" />
+ <check enabled="true" name="MISRAC2004-14.5" />
+ <check enabled="true" name="MISRAC2004-14.6" />
+ <check enabled="true" name="MISRAC2004-14.7" />
+ <check enabled="true" name="MISRAC2004-14.8_a" />
+ <check enabled="true" name="MISRAC2004-14.8_b" />
+ <check enabled="true" name="MISRAC2004-14.8_c" />
+ <check enabled="true" name="MISRAC2004-14.8_d" />
+ <check enabled="true" name="MISRAC2004-14.9" />
+ <check enabled="true" name="MISRAC2004-14.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-15">
+ <check enabled="true" name="MISRAC2004-15.0" />
+ <check enabled="true" name="MISRAC2004-15.1" />
+ <check enabled="true" name="MISRAC2004-15.2" />
+ <check enabled="true" name="MISRAC2004-15.3" />
+ <check enabled="true" name="MISRAC2004-15.4" />
+ <check enabled="true" name="MISRAC2004-15.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-16">
+ <check enabled="true" name="MISRAC2004-16.1" />
+ <check enabled="true" name="MISRAC2004-16.2_a" />
+ <check enabled="true" name="MISRAC2004-16.2_b" />
+ <check enabled="true" name="MISRAC2004-16.3" />
+ <check enabled="true" name="MISRAC2004-16.4" />
+ <check enabled="true" name="MISRAC2004-16.5" />
+ <check enabled="true" name="MISRAC2004-16.7" />
+ <check enabled="true" name="MISRAC2004-16.8" />
+ <check enabled="true" name="MISRAC2004-16.9" />
+ <check enabled="true" name="MISRAC2004-16.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-17">
+ <check enabled="true" name="MISRAC2004-17.1_a" />
+ <check enabled="true" name="MISRAC2004-17.1_b" />
+ <check enabled="true" name="MISRAC2004-17.1_c" />
+ <check enabled="true" name="MISRAC2004-17.2" />
+ <check enabled="true" name="MISRAC2004-17.3" />
+ <check enabled="true" name="MISRAC2004-17.4_a" />
+ <check enabled="true" name="MISRAC2004-17.4_b" />
+ <check enabled="true" name="MISRAC2004-17.5" />
+ <check enabled="true" name="MISRAC2004-17.6_a" />
+ <check enabled="true" name="MISRAC2004-17.6_b" />
+ <check enabled="true" name="MISRAC2004-17.6_c" />
+ <check enabled="true" name="MISRAC2004-17.6_d" />
+ </group>
+ <group enabled="true" name="MISRAC2004-18">
+ <check enabled="true" name="MISRAC2004-18.1" />
+ <check enabled="true" name="MISRAC2004-18.2" />
+ <check enabled="true" name="MISRAC2004-18.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-19">
+ <check enabled="false" name="MISRAC2004-19.1" />
+ <check enabled="false" name="MISRAC2004-19.2" />
+ <check enabled="true" name="MISRAC2004-19.4" />
+ <check enabled="true" name="MISRAC2004-19.5" />
+ <check enabled="true" name="MISRAC2004-19.6" />
+ <check enabled="false" name="MISRAC2004-19.7" />
+ <check enabled="true" name="MISRAC2004-19.10" />
+ <check enabled="true" name="MISRAC2004-19.12" />
+ <check enabled="false" name="MISRAC2004-19.13" />
+ <check enabled="true" name="MISRAC2004-19.15" />
+ </group>
+ <group enabled="true" name="MISRAC2004-20">
+ <check enabled="true" name="MISRAC2004-20.1" />
+ <check enabled="true" name="MISRAC2004-20.2" />
+ <check enabled="true" name="MISRAC2004-20.3_a" />
+ <check enabled="true" name="MISRAC2004-20.3_b" />
+ <check enabled="true" name="MISRAC2004-20.3_c" />
+ <check enabled="true" name="MISRAC2004-20.3_d" />
+ <check enabled="true" name="MISRAC2004-20.3_e" />
+ <check enabled="true" name="MISRAC2004-20.3_f" />
+ <check enabled="true" name="MISRAC2004-20.3_g" />
+ <check enabled="true" name="MISRAC2004-20.3_h" />
+ <check enabled="true" name="MISRAC2004-20.3_i" />
+ <check enabled="true" name="MISRAC2004-20.4" />
+ <check enabled="true" name="MISRAC2004-20.5" />
+ <check enabled="true" name="MISRAC2004-20.6" />
+ <check enabled="true" name="MISRAC2004-20.7" />
+ <check enabled="true" name="MISRAC2004-20.8" />
+ <check enabled="true" name="MISRAC2004-20.9" />
+ <check enabled="true" name="MISRAC2004-20.10" />
+ <check enabled="true" name="MISRAC2004-20.11" />
+ <check enabled="true" name="MISRAC2004-20.12" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2012">
+ <group enabled="true" name="MISRAC2012-Dir-4">
+ <check enabled="true" name="MISRAC2012-Dir-4.3" />
+ <check enabled="false" name="MISRAC2012-Dir-4.4" />
+ <check enabled="false" name="MISRAC2012-Dir-4.5" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.8" />
+ <check enabled="false" name="MISRAC2012-Dir-4.9" />
+ <check enabled="true" name="MISRAC2012-Dir-4.10" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_d" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_e" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_f" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_h" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_i" />
+ <check enabled="false" name="MISRAC2012-Dir-4.12" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_b" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_c" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_d" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_e" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_f" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.13_h" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-1">
+ <check enabled="true" name="MISRAC2012-Rule-1.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_c" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_d" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_e" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_f" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_g" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_h" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_i" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_j" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_k" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_m" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_n" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_o" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_p" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_q" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_r" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_s" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_t" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_u" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_v" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_w" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-2">
+ <check enabled="true" name="MISRAC2012-Rule-2.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-2.3" />
+ <check enabled="false" name="MISRAC2012-Rule-2.4" />
+ <check enabled="false" name="MISRAC2012-Rule-2.5" />
+ <check enabled="false" name="MISRAC2012-Rule-2.6" />
+ <check enabled="false" name="MISRAC2012-Rule-2.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-3">
+ <check enabled="true" name="MISRAC2012-Rule-3.1" />
+ <check enabled="true" name="MISRAC2012-Rule-3.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-5">
+ <check enabled="true" name="MISRAC2012-Rule-5.1" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.6" />
+ <check enabled="true" name="MISRAC2012-Rule-5.7" />
+ <check enabled="true" name="MISRAC2012-Rule-5.8" />
+ <check enabled="false" name="MISRAC2012-Rule-5.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-6">
+ <check enabled="true" name="MISRAC2012-Rule-6.1" />
+ <check enabled="true" name="MISRAC2012-Rule-6.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-7">
+ <check enabled="true" name="MISRAC2012-Rule-7.1" />
+ <check enabled="true" name="MISRAC2012-Rule-7.2" />
+ <check enabled="true" name="MISRAC2012-Rule-7.3" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-8">
+ <check enabled="true" name="MISRAC2012-Rule-8.1" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.3" />
+ <check enabled="true" name="MISRAC2012-Rule-8.4" />
+ <check enabled="false" name="MISRAC2012-Rule-8.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.5_b" />
+ <check enabled="false" name="MISRAC2012-Rule-8.7" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_a" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.10" />
+ <check enabled="false" name="MISRAC2012-Rule-8.11" />
+ <check enabled="true" name="MISRAC2012-Rule-8.12" />
+ <check enabled="false" name="MISRAC2012-Rule-8.13" />
+ <check enabled="true" name="MISRAC2012-Rule-8.14" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-9">
+ <check enabled="true" name="MISRAC2012-Rule-9.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_e" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_f" />
+ <check enabled="true" name="MISRAC2012-Rule-9.2" />
+ <check enabled="true" name="MISRAC2012-Rule-9.3" />
+ <check enabled="true" name="MISRAC2012-Rule-9.4" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-10">
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R4" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
+ <check enabled="true" name="MISRAC2012-Rule-10.2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_b" />
+ <check enabled="false" name="MISRAC2012-Rule-10.5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-11">
+ <check enabled="true" name="MISRAC2012-Rule-11.1" />
+ <check enabled="true" name="MISRAC2012-Rule-11.2" />
+ <check enabled="true" name="MISRAC2012-Rule-11.3" />
+ <check enabled="false" name="MISRAC2012-Rule-11.4" />
+ <check enabled="false" name="MISRAC2012-Rule-11.5" />
+ <check enabled="true" name="MISRAC2012-Rule-11.6" />
+ <check enabled="true" name="MISRAC2012-Rule-11.7" />
+ <check enabled="true" name="MISRAC2012-Rule-11.8" />
+ <check enabled="true" name="MISRAC2012-Rule-11.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-12">
+ <check enabled="false" name="MISRAC2012-Rule-12.1" />
+ <check enabled="true" name="MISRAC2012-Rule-12.2" />
+ <check enabled="false" name="MISRAC2012-Rule-12.3" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-13">
+ <check enabled="true" name="MISRAC2012-Rule-13.1" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-13.3" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_a" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.5" />
+ <check enabled="true" name="MISRAC2012-Rule-13.6" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-14">
+ <check enabled="true" name="MISRAC2012-Rule-14.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.2" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_c" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_d" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-15">
+ <check enabled="false" name="MISRAC2012-Rule-15.1" />
+ <check enabled="true" name="MISRAC2012-Rule-15.2" />
+ <check enabled="true" name="MISRAC2012-Rule-15.3" />
+ <check enabled="false" name="MISRAC2012-Rule-15.4" />
+ <check enabled="false" name="MISRAC2012-Rule-15.5" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_e" />
+ <check enabled="true" name="MISRAC2012-Rule-15.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-16">
+ <check enabled="true" name="MISRAC2012-Rule-16.1" />
+ <check enabled="true" name="MISRAC2012-Rule-16.2" />
+ <check enabled="true" name="MISRAC2012-Rule-16.3" />
+ <check enabled="true" name="MISRAC2012-Rule-16.4" />
+ <check enabled="true" name="MISRAC2012-Rule-16.5" />
+ <check enabled="true" name="MISRAC2012-Rule-16.6" />
+ <check enabled="true" name="MISRAC2012-Rule-16.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-17">
+ <check enabled="true" name="MISRAC2012-Rule-17.1" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-17.3" />
+ <check enabled="true" name="MISRAC2012-Rule-17.4" />
+ <check enabled="false" name="MISRAC2012-Rule-17.5" />
+ <check enabled="true" name="MISRAC2012-Rule-17.6" />
+ <check enabled="true" name="MISRAC2012-Rule-17.7" />
+ <check enabled="false" name="MISRAC2012-Rule-17.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-18">
+ <check enabled="true" name="MISRAC2012-Rule-18.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.2" />
+ <check enabled="true" name="MISRAC2012-Rule-18.3" />
+ <check enabled="true" name="MISRAC2012-Rule-18.4" />
+ <check enabled="false" name="MISRAC2012-Rule-18.5" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.7" />
+ <check enabled="true" name="MISRAC2012-Rule-18.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-19">
+ <check enabled="true" name="MISRAC2012-Rule-19.1" />
+ <check enabled="false" name="MISRAC2012-Rule-19.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-20">
+ <check enabled="false" name="MISRAC2012-Rule-20.1" />
+ <check enabled="true" name="MISRAC2012-Rule-20.2" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c99" />
+ <check enabled="false" name="MISRAC2012-Rule-20.5" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-20.7" />
+ <check enabled="false" name="MISRAC2012-Rule-20.10" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-21">
+ <check enabled="true" name="MISRAC2012-Rule-21.1" />
+ <check enabled="true" name="MISRAC2012-Rule-21.2" />
+ <check enabled="true" name="MISRAC2012-Rule-21.3" />
+ <check enabled="true" name="MISRAC2012-Rule-21.4" />
+ <check enabled="true" name="MISRAC2012-Rule-21.5" />
+ <check enabled="true" name="MISRAC2012-Rule-21.6" />
+ <check enabled="true" name="MISRAC2012-Rule-21.7" />
+ <check enabled="true" name="MISRAC2012-Rule-21.8" />
+ <check enabled="true" name="MISRAC2012-Rule-21.9" />
+ <check enabled="true" name="MISRAC2012-Rule-21.10" />
+ <check enabled="true" name="MISRAC2012-Rule-21.11" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_a" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-22">
+ <check enabled="true" name="MISRAC2012-Rule-22.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_c" />
+ <check enabled="true" name="MISRAC2012-Rule-22.3" />
+ <check enabled="true" name="MISRAC2012-Rule-22.4" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.6" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC++2008">
+ <group enabled="true" name="MISRAC++2008-0-1">
+ <check enabled="true" name="MISRAC++2008-0-1-1" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_c" />
+ <check enabled="true" name="MISRAC++2008-0-1-3" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-6" />
+ <check enabled="true" name="MISRAC++2008-0-1-7" />
+ <check enabled="false" name="MISRAC++2008-0-1-8" />
+ <check enabled="true" name="MISRAC++2008-0-1-9" />
+ <check enabled="true" name="MISRAC++2008-0-1-11" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-2">
+ <check enabled="true" name="MISRAC++2008-0-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-3">
+ <check enabled="true" name="MISRAC++2008-0-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-7">
+ <check enabled="true" name="MISRAC++2008-2-7-1" />
+ <check enabled="true" name="MISRAC++2008-2-7-2" />
+ <check enabled="false" name="MISRAC++2008-2-7-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-10">
+ <check enabled="true" name="MISRAC++2008-2-10-1" />
+ <check enabled="true" name="MISRAC++2008-2-10-2" />
+ <check enabled="true" name="MISRAC++2008-2-10-3" />
+ <check enabled="true" name="MISRAC++2008-2-10-4" />
+ <check enabled="false" name="MISRAC++2008-2-10-5" />
+ <check enabled="true" name="MISRAC++2008-2-10-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-13">
+ <check enabled="true" name="MISRAC++2008-2-13-2" />
+ <check enabled="true" name="MISRAC++2008-2-13-3" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_a" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-1">
+ <check enabled="true" name="MISRAC++2008-3-1-1" />
+ <check enabled="true" name="MISRAC++2008-3-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-9">
+ <check enabled="false" name="MISRAC++2008-3-9-2" />
+ <check enabled="true" name="MISRAC++2008-3-9-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-4-5">
+ <check enabled="true" name="MISRAC++2008-4-5-1" />
+ <check enabled="true" name="MISRAC++2008-4-5-2" />
+ <check enabled="true" name="MISRAC++2008-4-5-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-0">
+ <check enabled="true" name="MISRAC++2008-5-0-1_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_c" />
+ <check enabled="false" name="MISRAC++2008-5-0-2" />
+ <check enabled="true" name="MISRAC++2008-5-0-3" />
+ <check enabled="true" name="MISRAC++2008-5-0-4" />
+ <check enabled="true" name="MISRAC++2008-5-0-5" />
+ <check enabled="true" name="MISRAC++2008-5-0-6" />
+ <check enabled="true" name="MISRAC++2008-5-0-7" />
+ <check enabled="true" name="MISRAC++2008-5-0-8" />
+ <check enabled="true" name="MISRAC++2008-5-0-9" />
+ <check enabled="true" name="MISRAC++2008-5-0-10" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-14" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_e" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_f" />
+ <check enabled="true" name="MISRAC++2008-5-0-19" />
+ <check enabled="true" name="MISRAC++2008-5-0-21" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-2">
+ <check enabled="true" name="MISRAC++2008-5-2-4" />
+ <check enabled="true" name="MISRAC++2008-5-2-5" />
+ <check enabled="true" name="MISRAC++2008-5-2-6" />
+ <check enabled="true" name="MISRAC++2008-5-2-7" />
+ <check enabled="false" name="MISRAC++2008-5-2-9" />
+ <check enabled="false" name="MISRAC++2008-5-2-10" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_a" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-3">
+ <check enabled="true" name="MISRAC++2008-5-3-1" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_a" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_b" />
+ <check enabled="true" name="MISRAC++2008-5-3-3" />
+ <check enabled="true" name="MISRAC++2008-5-3-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-8">
+ <check enabled="true" name="MISRAC++2008-5-8-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-14">
+ <check enabled="true" name="MISRAC++2008-5-14-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-18">
+ <check enabled="true" name="MISRAC++2008-5-18-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-19">
+ <check enabled="false" name="MISRAC++2008-5-19-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-2">
+ <check enabled="true" name="MISRAC++2008-6-2-1" />
+ <check enabled="true" name="MISRAC++2008-6-2-2" />
+ <check enabled="false" name="MISRAC++2008-6-2-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-3">
+ <check enabled="true" name="MISRAC++2008-6-3-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_c" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_d" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-4">
+ <check enabled="true" name="MISRAC++2008-6-4-1" />
+ <check enabled="true" name="MISRAC++2008-6-4-2" />
+ <check enabled="true" name="MISRAC++2008-6-4-3" />
+ <check enabled="true" name="MISRAC++2008-6-4-4" />
+ <check enabled="true" name="MISRAC++2008-6-4-5" />
+ <check enabled="true" name="MISRAC++2008-6-4-6" />
+ <check enabled="true" name="MISRAC++2008-6-4-7" />
+ <check enabled="true" name="MISRAC++2008-6-4-8" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-5">
+ <check enabled="true" name="MISRAC++2008-6-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-5-2" />
+ <check enabled="true" name="MISRAC++2008-6-5-3" />
+ <check enabled="true" name="MISRAC++2008-6-5-4" />
+ <check enabled="true" name="MISRAC++2008-6-5-5" />
+ <check enabled="true" name="MISRAC++2008-6-5-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-6">
+ <check enabled="true" name="MISRAC++2008-6-6-1" />
+ <check enabled="true" name="MISRAC++2008-6-6-2" />
+ <check enabled="true" name="MISRAC++2008-6-6-4" />
+ <check enabled="true" name="MISRAC++2008-6-6-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-1">
+ <check enabled="true" name="MISRAC++2008-7-1-1" />
+ <check enabled="true" name="MISRAC++2008-7-1-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-2">
+ <check enabled="true" name="MISRAC++2008-7-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-4">
+ <check enabled="true" name="MISRAC++2008-7-4-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-5">
+ <check enabled="true" name="MISRAC++2008-7-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_c" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_d" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_a" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-0">
+ <check enabled="true" name="MISRAC++2008-8-0-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-4">
+ <check enabled="true" name="MISRAC++2008-8-4-1" />
+ <check enabled="true" name="MISRAC++2008-8-4-3" />
+ <check enabled="true" name="MISRAC++2008-8-4-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-5">
+ <check enabled="true" name="MISRAC++2008-8-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_c" />
+ <check enabled="true" name="MISRAC++2008-8-5-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-3">
+ <check enabled="true" name="MISRAC++2008-9-3-1" />
+ <check enabled="true" name="MISRAC++2008-9-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-5">
+ <check enabled="true" name="MISRAC++2008-9-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-6">
+ <check enabled="true" name="MISRAC++2008-9-6-2" />
+ <check enabled="true" name="MISRAC++2008-9-6-3" />
+ <check enabled="true" name="MISRAC++2008-9-6-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-12-1">
+ <check enabled="true" name="MISRAC++2008-12-1-1_a" />
+ <check enabled="true" name="MISRAC++2008-12-1-1_b" />
+ <check enabled="true" name="MISRAC++2008-12-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-0">
+ <check enabled="false" name="MISRAC++2008-15-0-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-1">
+ <check enabled="true" name="MISRAC++2008-15-1-2" />
+ <check enabled="true" name="MISRAC++2008-15-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-3">
+ <check enabled="true" name="MISRAC++2008-15-3-1" />
+ <check enabled="false" name="MISRAC++2008-15-3-2" />
+ <check enabled="true" name="MISRAC++2008-15-3-3" />
+ <check enabled="true" name="MISRAC++2008-15-3-4" />
+ <check enabled="true" name="MISRAC++2008-15-3-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-5">
+ <check enabled="true" name="MISRAC++2008-15-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-0">
+ <check enabled="true" name="MISRAC++2008-16-0-3" />
+ <check enabled="true" name="MISRAC++2008-16-0-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-2">
+ <check enabled="true" name="MISRAC++2008-16-2-2" />
+ <check enabled="true" name="MISRAC++2008-16-2-3" />
+ <check enabled="true" name="MISRAC++2008-16-2-4" />
+ <check enabled="false" name="MISRAC++2008-16-2-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-3">
+ <check enabled="true" name="MISRAC++2008-16-3-1" />
+ <check enabled="false" name="MISRAC++2008-16-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-17-0">
+ <check enabled="true" name="MISRAC++2008-17-0-1" />
+ <check enabled="true" name="MISRAC++2008-17-0-3" />
+ <check enabled="true" name="MISRAC++2008-17-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-0">
+ <check enabled="true" name="MISRAC++2008-18-0-1" />
+ <check enabled="true" name="MISRAC++2008-18-0-2" />
+ <check enabled="true" name="MISRAC++2008-18-0-3" />
+ <check enabled="true" name="MISRAC++2008-18-0-4" />
+ <check enabled="true" name="MISRAC++2008-18-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-2">
+ <check enabled="true" name="MISRAC++2008-18-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-4">
+ <check enabled="true" name="MISRAC++2008-18-4-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-7">
+ <check enabled="true" name="MISRAC++2008-18-7-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-19-3">
+ <check enabled="true" name="MISRAC++2008-19-3-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-27-0">
+ <check enabled="true" name="MISRAC++2008-27-0-1" />
+ </group>
+ </package>
+ </checks_tree>
+ </cstat_settings>
+ </data>
+ </settings>
+ <settings>
+ <name>RuntimeChecking</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>1</debug>
+ <option>
+ <name>GenRtcDebugHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnableBoundsChecking</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrMem</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcTrackPointerBounds</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcCheckAccesses</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcGenerateEntries</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcNrTrackedPointers</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>GenRtcIntOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIncUnsigned</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntConversion</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclExplicit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclUnsignedShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcUnhandledCase</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcDivByZero</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrFunc</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ </configuration>
+ <configuration>
+ <name>Release</name>
+ <toolchain>
+ <name>ARM</name>
+ </toolchain>
+ <debug>0</debug>
+ <settings>
+ <name>C-STAT</name>
+ <archiveVersion>263</archiveVersion>
+ <data>
+ <version>263</version>
+ <cstatargs>
+ <useExtraArgs>0</useExtraArgs>
+ <extraArgs></extraArgs>
+ <analyzeTimeoutEnabled>1</analyzeTimeoutEnabled>
+ <analyzeTimeout>600</analyzeTimeout>
+ <enableParallel>0</enableParallel>
+ <parallelThreads>2</parallelThreads>
+ <enableFalsePositives>0</enableFalsePositives>
+ <messagesLimitEnabled>1</messagesLimitEnabled>
+ <messagesLimit>100</messagesLimit>
+ </cstatargs>
+ <cstat_settings>
+ <cstat_version>1.7.0</cstat_version>
+ <checks_tree>
+ <package enabled="true" name="STDCHECKS">
+ <group enabled="true" name="ARR">
+ <check enabled="true" name="ARR-inv-index-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr-pos" />
+ <check enabled="true" name="ARR-inv-index-ptr" />
+ <check enabled="true" name="ARR-inv-index" />
+ <check enabled="true" name="ARR-neg-index" />
+ <check enabled="true" name="ARR-uninit-index" />
+ </group>
+ <group enabled="true" name="ATH">
+ <check enabled="true" name="ATH-cmp-float" />
+ <check enabled="true" name="ATH-cmp-unsign-neg" />
+ <check enabled="true" name="ATH-cmp-unsign-pos" />
+ <check enabled="true" name="ATH-div-0-assign" />
+ <check enabled="false" name="ATH-div-0-cmp-aft" />
+ <check enabled="true" name="ATH-div-0-cmp-bef" />
+ <check enabled="true" name="ATH-div-0-interval" />
+ <check enabled="true" name="ATH-div-0-pos" />
+ <check enabled="true" name="ATH-div-0-unchk-global" />
+ <check enabled="true" name="ATH-div-0-unchk-local" />
+ <check enabled="true" name="ATH-div-0-unchk-param" />
+ <check enabled="true" name="ATH-div-0" />
+ <check enabled="true" name="ATH-inc-bool" />
+ <check enabled="true" name="ATH-malloc-overrun" />
+ <check enabled="true" name="ATH-neg-check-nonneg" />
+ <check enabled="true" name="ATH-neg-check-pos" />
+ <check enabled="true" name="ATH-new-overrun" />
+ <check enabled="false" name="ATH-overflow-cast" />
+ <check enabled="true" name="ATH-overflow" />
+ <check enabled="true" name="ATH-shift-bounds" />
+ <check enabled="true" name="ATH-shift-neg" />
+ <check enabled="true" name="ATH-sizeof-by-sizeof" />
+ </group>
+ <group enabled="true" name="CAST">
+ <check enabled="false" name="CAST-old-style" />
+ </group>
+ <group enabled="true" name="CATCH">
+ <check enabled="true" name="CATCH-object-slicing" />
+ <check enabled="false" name="CATCH-xtor-bad-member" />
+ </group>
+ <group enabled="true" name="COMMA">
+ <check enabled="false" name="COMMA-overload" />
+ </group>
+ <group enabled="true" name="COMMENT">
+ <check enabled="true" name="COMMENT-nested" />
+ </group>
+ <group enabled="true" name="CONST">
+ <check enabled="true" name="CONST-member-ret" />
+ </group>
+ <group enabled="true" name="COP">
+ <check enabled="false" name="COP-alloc-ctor" />
+ <check enabled="true" name="COP-assign-op-ret" />
+ <check enabled="true" name="COP-assign-op-self" />
+ <check enabled="true" name="COP-assign-op" />
+ <check enabled="true" name="COP-copy-ctor" />
+ <check enabled="false" name="COP-dealloc-dtor" />
+ <check enabled="true" name="COP-dtor-throw" />
+ <check enabled="true" name="COP-dtor" />
+ <check enabled="true" name="COP-init-order" />
+ <check enabled="true" name="COP-init-uninit" />
+ <check enabled="true" name="COP-member-uninit" />
+ </group>
+ <group enabled="true" name="CPU">
+ <check enabled="true" name="CPU-ctor-call-virt" />
+ <check enabled="false" name="CPU-ctor-implicit" />
+ <check enabled="true" name="CPU-delete-throw" />
+ <check enabled="true" name="CPU-delete-void" />
+ <check enabled="true" name="CPU-dtor-call-virt" />
+ <check enabled="true" name="CPU-malloc-class" />
+ <check enabled="true" name="CPU-nonvirt-dtor" />
+ <check enabled="true" name="CPU-return-ref-to-class-data" />
+ </group>
+ <group enabled="true" name="DECL">
+ <check enabled="false" name="DECL-implicit-int" />
+ </group>
+ <group enabled="true" name="DEFINE">
+ <check enabled="true" name="DEFINE-hash-multiple" />
+ </group>
+ <group enabled="true" name="ENUM">
+ <check enabled="false" name="ENUM-bounds" />
+ </group>
+ <group enabled="true" name="EXP">
+ <check enabled="true" name="EXP-cond-assign" />
+ <check enabled="true" name="EXP-dangling-else" />
+ <check enabled="true" name="EXP-loop-exit" />
+ <check enabled="false" name="EXP-main-ret-int" />
+ <check enabled="false" name="EXP-null-stmt" />
+ <check enabled="false" name="EXP-stray-semicolon" />
+ </group>
+ <group enabled="true" name="EXPR">
+ <check enabled="true" name="EXPR-const-overflow" />
+ </group>
+ <group enabled="true" name="FPT">
+ <check enabled="true" name="FPT-cmp-null" />
+ <check enabled="false" name="FPT-literal" />
+ <check enabled="true" name="FPT-misuse" />
+ </group>
+ <group enabled="true" name="FUNC">
+ <check enabled="false" name="FUNC-implicit-decl" />
+ <check enabled="false" name="FUNC-unprototyped-all" />
+ <check enabled="true" name="FUNC-unprototyped-used" />
+ </group>
+ <group enabled="true" name="INCLUDE">
+ <check enabled="false" name="INCLUDE-c-file" />
+ </group>
+ <group enabled="true" name="INT">
+ <check enabled="false" name="INT-use-signed-as-unsigned-pos" />
+ <check enabled="true" name="INT-use-signed-as-unsigned" />
+ </group>
+ <group enabled="true" name="ITR">
+ <check enabled="true" name="ITR-end-cmp-aft" />
+ <check enabled="true" name="ITR-end-cmp-bef" />
+ <check enabled="true" name="ITR-invalidated" />
+ <check enabled="false" name="ITR-mismatch-alg" />
+ <check enabled="false" name="ITR-store" />
+ <check enabled="true" name="ITR-uninit" />
+ </group>
+ <group enabled="true" name="LIB">
+ <check enabled="false" name="LIB-bsearch-overrun-pos" />
+ <check enabled="false" name="LIB-bsearch-overrun" />
+ <check enabled="false" name="LIB-fn-unsafe" />
+ <check enabled="false" name="LIB-fread-overrun-pos" />
+ <check enabled="true" name="LIB-fread-overrun" />
+ <check enabled="false" name="LIB-memchr-overrun-pos" />
+ <check enabled="true" name="LIB-memchr-overrun" />
+ <check enabled="false" name="LIB-memcpy-overrun-pos" />
+ <check enabled="true" name="LIB-memcpy-overrun" />
+ <check enabled="false" name="LIB-memset-overrun-pos" />
+ <check enabled="true" name="LIB-memset-overrun" />
+ <check enabled="false" name="LIB-putenv" />
+ <check enabled="false" name="LIB-qsort-overrun-pos" />
+ <check enabled="false" name="LIB-qsort-overrun" />
+ <check enabled="true" name="LIB-return-const" />
+ <check enabled="true" name="LIB-return-error" />
+ <check enabled="true" name="LIB-return-leak" />
+ <check enabled="true" name="LIB-return-neg" />
+ <check enabled="true" name="LIB-return-null" />
+ <check enabled="false" name="LIB-sprintf-overrun" />
+ <check enabled="false" name="LIB-std-sort-overrun-pos" />
+ <check enabled="true" name="LIB-std-sort-overrun" />
+ <check enabled="false" name="LIB-strcat-overrun-pos" />
+ <check enabled="true" name="LIB-strcat-overrun" />
+ <check enabled="false" name="LIB-strcpy-overrun-pos" />
+ <check enabled="true" name="LIB-strcpy-overrun" />
+ <check enabled="false" name="LIB-strncat-overrun-pos" />
+ <check enabled="true" name="LIB-strncat-overrun" />
+ <check enabled="false" name="LIB-strncmp-overrun-pos" />
+ <check enabled="true" name="LIB-strncmp-overrun" />
+ <check enabled="false" name="LIB-strncpy-overrun-pos" />
+ <check enabled="true" name="LIB-strncpy-overrun" />
+ </group>
+ <group enabled="true" name="LOGIC">
+ <check enabled="false" name="LOGIC-overload" />
+ </group>
+ <group enabled="true" name="MEM">
+ <check enabled="true" name="MEM-delete-array-op" />
+ <check enabled="true" name="MEM-delete-op" />
+ <check enabled="true" name="MEM-double-free-alias" />
+ <check enabled="true" name="MEM-double-free-some" />
+ <check enabled="true" name="MEM-double-free" />
+ <check enabled="true" name="MEM-free-field" />
+ <check enabled="true" name="MEM-free-fptr" />
+ <check enabled="false" name="MEM-free-no-alloc-struct" />
+ <check enabled="false" name="MEM-free-no-alloc" />
+ <check enabled="true" name="MEM-free-no-use" />
+ <check enabled="true" name="MEM-free-op" />
+ <check enabled="true" name="MEM-free-struct-field" />
+ <check enabled="true" name="MEM-free-variable-alias" />
+ <check enabled="true" name="MEM-free-variable" />
+ <check enabled="true" name="MEM-leak-alias" />
+ <check enabled="false" name="MEM-leak" />
+ <check enabled="false" name="MEM-malloc-arith" />
+ <check enabled="true" name="MEM-malloc-diff-type" />
+ <check enabled="true" name="MEM-malloc-sizeof-ptr" />
+ <check enabled="true" name="MEM-malloc-sizeof" />
+ <check enabled="false" name="MEM-malloc-strlen" />
+ <check enabled="true" name="MEM-realloc-diff-type" />
+ <check enabled="true" name="MEM-return-free" />
+ <check enabled="true" name="MEM-return-no-assign" />
+ <check enabled="true" name="MEM-stack-global-field" />
+ <check enabled="true" name="MEM-stack-global" />
+ <check enabled="true" name="MEM-stack-param-ref" />
+ <check enabled="true" name="MEM-stack-param" />
+ <check enabled="true" name="MEM-stack-pos" />
+ <check enabled="true" name="MEM-stack-ref" />
+ <check enabled="true" name="MEM-stack" />
+ <check enabled="true" name="MEM-use-free-all" />
+ <check enabled="true" name="MEM-use-free-some" />
+ </group>
+ <group enabled="true" name="PTR">
+ <check enabled="true" name="PTR-arith-field" />
+ <check enabled="true" name="PTR-arith-stack" />
+ <check enabled="true" name="PTR-arith-var" />
+ <check enabled="true" name="PTR-cmp-str-lit" />
+ <check enabled="false" name="PTR-null-assign-fun-pos" />
+ <check enabled="false" name="PTR-null-assign-pos" />
+ <check enabled="true" name="PTR-null-assign" />
+ <check enabled="true" name="PTR-null-cmp-aft" />
+ <check enabled="true" name="PTR-null-cmp-bef-fun" />
+ <check enabled="true" name="PTR-null-cmp-bef" />
+ <check enabled="true" name="PTR-null-fun-pos" />
+ <check enabled="false" name="PTR-null-literal-pos" />
+ <check enabled="false" name="PTR-overload" />
+ <check enabled="false" name="PTR-singleton-arith-pos" />
+ <check enabled="true" name="PTR-singleton-arith" />
+ <check enabled="true" name="PTR-unchk-param-some" />
+ <check enabled="false" name="PTR-unchk-param" />
+ <check enabled="false" name="PTR-uninit-pos" />
+ <check enabled="true" name="PTR-uninit" />
+ </group>
+ <group enabled="true" name="RED">
+ <check enabled="false" name="RED-alloc-zero-bytes" />
+ <check enabled="false" name="RED-case-reach" />
+ <check enabled="false" name="RED-cmp-always" />
+ <check enabled="false" name="RED-cmp-never" />
+ <check enabled="false" name="RED-cond-always" />
+ <check enabled="true" name="RED-cond-const-assign" />
+ <check enabled="false" name="RED-cond-const-expr" />
+ <check enabled="false" name="RED-cond-const" />
+ <check enabled="false" name="RED-cond-never" />
+ <check enabled="true" name="RED-dead" />
+ <check enabled="false" name="RED-expr" />
+ <check enabled="false" name="RED-func-no-effect" />
+ <check enabled="true" name="RED-local-hides-global" />
+ <check enabled="false" name="RED-local-hides-local" />
+ <check enabled="false" name="RED-local-hides-member" />
+ <check enabled="true" name="RED-local-hides-param" />
+ <check enabled="false" name="RED-no-effect" />
+ <check enabled="true" name="RED-self-assign" />
+ <check enabled="true" name="RED-unused-assign" />
+ <check enabled="false" name="RED-unused-param" />
+ <check enabled="false" name="RED-unused-return-val" />
+ <check enabled="false" name="RED-unused-val" />
+ <check enabled="true" name="RED-unused-var-all" />
+ </group>
+ <group enabled="true" name="RESOURCE">
+ <check enabled="false" name="RESOURCE-deref-file" />
+ <check enabled="true" name="RESOURCE-double-close" />
+ <check enabled="true" name="RESOURCE-file-no-close-all" />
+ <check enabled="false" name="RESOURCE-file-pos-neg" />
+ <check enabled="true" name="RESOURCE-file-use-after-close" />
+ <check enabled="false" name="RESOURCE-implicit-deref-file" />
+ <check enabled="true" name="RESOURCE-write-ronly-file" />
+ </group>
+ <group enabled="true" name="SIZEOF">
+ <check enabled="true" name="SIZEOF-side-effect" />
+ </group>
+ <group enabled="true" name="SPC">
+ <check enabled="true" name="SPC-order" />
+ <check enabled="false" name="SPC-uninit-arr-all" />
+ <check enabled="true" name="SPC-uninit-struct-field-heap" />
+ <check enabled="false" name="SPC-uninit-struct-field" />
+ <check enabled="true" name="SPC-uninit-struct" />
+ <check enabled="true" name="SPC-uninit-var-all" />
+ <check enabled="true" name="SPC-uninit-var-some" />
+ <check enabled="false" name="SPC-volatile-reads" />
+ <check enabled="false" name="SPC-volatile-writes" />
+ </group>
+ <group enabled="true" name="STRUCT">
+ <check enabled="false" name="STRUCT-signed-bit" />
+ </group>
+ <group enabled="true" name="SWITCH">
+ <check enabled="true" name="SWITCH-fall-through" />
+ </group>
+ <group enabled="true" name="THROW">
+ <check enabled="false" name="THROW-empty" />
+ <check enabled="false" name="THROW-main" />
+ <check enabled="true" name="THROW-null" />
+ <check enabled="true" name="THROW-ptr" />
+ <check enabled="true" name="THROW-static" />
+ <check enabled="true" name="THROW-unhandled" />
+ </group>
+ <group enabled="true" name="UNION">
+ <check enabled="true" name="UNION-overlap-assign" />
+ <check enabled="true" name="UNION-type-punning" />
+ </group>
+ </package>
+ <package enabled="false" name="CERT">
+ <group enabled="true" name="CERT-ARR">
+ <check enabled="true" name="CERT-ARR30-C_a" />
+ <check enabled="true" name="CERT-ARR30-C_b" />
+ <check enabled="true" name="CERT-ARR30-C_c" />
+ <check enabled="true" name="CERT-ARR30-C_d" />
+ <check enabled="true" name="CERT-ARR30-C_e" />
+ <check enabled="true" name="CERT-ARR30-C_f" />
+ <check enabled="true" name="CERT-ARR30-C_g" />
+ <check enabled="true" name="CERT-ARR30-C_h" />
+ <check enabled="true" name="CERT-ARR30-C_i" />
+ <check enabled="true" name="CERT-ARR30-C_j" />
+ <check enabled="true" name="CERT-ARR32-C" />
+ <check enabled="true" name="CERT-ARR36-C_a" />
+ <check enabled="true" name="CERT-ARR36-C_b" />
+ <check enabled="true" name="CERT-ARR37-C" />
+ <check enabled="true" name="CERT-ARR38-C_a" />
+ <check enabled="true" name="CERT-ARR38-C_b" />
+ <check enabled="true" name="CERT-ARR38-C_c" />
+ <check enabled="true" name="CERT-ARR38-C_d" />
+ <check enabled="true" name="CERT-ARR38-C_e" />
+ <check enabled="true" name="CERT-ARR38-C_f" />
+ <check enabled="true" name="CERT-ARR39-C" />
+ </group>
+ <group enabled="true" name="CERT-DCL">
+ <check enabled="true" name="CERT-DCL30-C_a" />
+ <check enabled="true" name="CERT-DCL30-C_b" />
+ <check enabled="true" name="CERT-DCL30-C_c" />
+ <check enabled="true" name="CERT-DCL30-C_d" />
+ <check enabled="true" name="CERT-DCL30-C_e" />
+ <check enabled="true" name="CERT-DCL31-C" />
+ <check enabled="true" name="CERT-DCL36-C" />
+ <check enabled="true" name="CERT-DCL37-C_a" />
+ <check enabled="true" name="CERT-DCL37-C_b" />
+ <check enabled="false" name="CERT-DCL37-C_c" />
+ <check enabled="true" name="CERT-DCL38-C" />
+ <check enabled="true" name="CERT-DCL39-C" />
+ <check enabled="true" name="CERT-DCL40-C" />
+ <check enabled="true" name="CERT-DCL41-C" />
+ </group>
+ <group enabled="true" name="CERT-ENV">
+ <check enabled="true" name="CERT-ENV30-C" />
+ <check enabled="true" name="CERT-ENV31-C" />
+ <check enabled="true" name="CERT-ENV32-C" />
+ <check enabled="true" name="CERT-ENV33-C" />
+ <check enabled="true" name="CERT-ENV34-C" />
+ </group>
+ <group enabled="true" name="CERT-ERR">
+ <check enabled="true" name="CERT-ERR30-C_a" />
+ <check enabled="true" name="CERT-ERR30-C_b" />
+ <check enabled="true" name="CERT-ERR30-C_c" />
+ <check enabled="true" name="CERT-ERR30-C_d" />
+ <check enabled="true" name="CERT-ERR32-C" />
+ <check enabled="true" name="CERT-ERR33-C_a" />
+ <check enabled="true" name="CERT-ERR33-C_b" />
+ <check enabled="true" name="CERT-ERR33-C_c" />
+ <check enabled="true" name="CERT-ERR33-C_d" />
+ <check enabled="true" name="CERT-ERR34-C_a" />
+ <check enabled="true" name="CERT-ERR34-C_b" />
+ </group>
+ <group enabled="true" name="CERT-EXP">
+ <check enabled="true" name="CERT-EXP19-C" />
+ <check enabled="true" name="CERT-EXP30-C_a" />
+ <check enabled="true" name="CERT-EXP30-C_b" />
+ <check enabled="true" name="CERT-EXP32-C" />
+ <check enabled="true" name="CERT-EXP33-C_a" />
+ <check enabled="true" name="CERT-EXP33-C_b" />
+ <check enabled="true" name="CERT-EXP33-C_c" />
+ <check enabled="true" name="CERT-EXP33-C_d" />
+ <check enabled="true" name="CERT-EXP33-C_e" />
+ <check enabled="true" name="CERT-EXP33-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_a" />
+ <check enabled="true" name="CERT-EXP34-C_b" />
+ <check enabled="true" name="CERT-EXP34-C_c" />
+ <check enabled="true" name="CERT-EXP34-C_d" />
+ <check enabled="true" name="CERT-EXP34-C_e" />
+ <check enabled="true" name="CERT-EXP34-C_f" />
+ <check enabled="true" name="CERT-EXP34-C_g" />
+ <check enabled="true" name="CERT-EXP35-C" />
+ <check enabled="true" name="CERT-EXP36-C_a" />
+ <check enabled="true" name="CERT-EXP36-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_a" />
+ <check enabled="true" name="CERT-EXP37-C_b" />
+ <check enabled="true" name="CERT-EXP37-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_a" />
+ <check enabled="true" name="CERT-EXP39-C_b" />
+ <check enabled="true" name="CERT-EXP39-C_c" />
+ <check enabled="true" name="CERT-EXP39-C_d" />
+ <check enabled="true" name="CERT-EXP39-C_e" />
+ <check enabled="true" name="CERT-EXP40-C_a" />
+ <check enabled="true" name="CERT-EXP40-C_b" />
+ <check enabled="true" name="CERT-EXP42-C" />
+ <check enabled="true" name="CERT-EXP43-C_a" />
+ <check enabled="true" name="CERT-EXP43-C_b" />
+ <check enabled="true" name="CERT-EXP43-C_c" />
+ <check enabled="true" name="CERT-EXP43-C_d" />
+ <check enabled="true" name="CERT-EXP44-C" />
+ <check enabled="true" name="CERT-EXP45-C" />
+ <check enabled="true" name="CERT-EXP46-C" />
+ <check enabled="true" name="CERT-EXP47-C_a" />
+ <check enabled="true" name="CERT-EXP47-C_b" />
+ </group>
+ <group enabled="true" name="CERT-FIO">
+ <check enabled="true" name="CERT-FIO30-C" />
+ <check enabled="true" name="CERT-FIO32-C" />
+ <check enabled="true" name="CERT-FIO34-C" />
+ <check enabled="true" name="CERT-FIO37-C" />
+ <check enabled="true" name="CERT-FIO38-C" />
+ <check enabled="true" name="CERT-FIO39-C" />
+ <check enabled="true" name="CERT-FIO40-C" />
+ <check enabled="true" name="CERT-FIO41-C" />
+ <check enabled="true" name="CERT-FIO42-C_a" />
+ <check enabled="false" name="CERT-FIO42-C_b" />
+ <check enabled="true" name="CERT-FIO44-C" />
+ <check enabled="true" name="CERT-FIO45-C" />
+ <check enabled="true" name="CERT-FIO46-C_a" />
+ <check enabled="true" name="CERT-FIO46-C_b" />
+ <check enabled="true" name="CERT-FIO46-C_c" />
+ <check enabled="true" name="CERT-FIO47-C_a" />
+ <check enabled="true" name="CERT-FIO47-C_b" />
+ <check enabled="true" name="CERT-FIO47-C_c" />
+ </group>
+ <group enabled="true" name="CERT-FLP">
+ <check enabled="true" name="CERT-FLP30-C_a" />
+ <check enabled="true" name="CERT-FLP30-C_b" />
+ <check enabled="true" name="CERT-FLP32-C_a" />
+ <check enabled="true" name="CERT-FLP32-C_b" />
+ <check enabled="true" name="CERT-FLP34-C" />
+ <check enabled="true" name="CERT-FLP36-C" />
+ <check enabled="true" name="CERT-FLP37-C" />
+ </group>
+ <group enabled="true" name="CERT-INT">
+ <check enabled="true" name="CERT-INT30-C_a" />
+ <check enabled="false" name="CERT-INT30-C_b" />
+ <check enabled="true" name="CERT-INT31-C_a" />
+ <check enabled="true" name="CERT-INT31-C_b" />
+ <check enabled="true" name="CERT-INT31-C_c" />
+ <check enabled="true" name="CERT-INT32-C_a" />
+ <check enabled="false" name="CERT-INT32-C_b" />
+ <check enabled="true" name="CERT-INT33-C_a" />
+ <check enabled="true" name="CERT-INT33-C_b" />
+ <check enabled="true" name="CERT-INT33-C_c" />
+ <check enabled="true" name="CERT-INT33-C_d" />
+ <check enabled="true" name="CERT-INT33-C_e" />
+ <check enabled="true" name="CERT-INT33-C_f" />
+ <check enabled="true" name="CERT-INT33-C_g" />
+ <check enabled="true" name="CERT-INT33-C_h" />
+ <check enabled="true" name="CERT-INT33-C_i" />
+ <check enabled="true" name="CERT-INT34-C_a" />
+ <check enabled="true" name="CERT-INT34-C_b" />
+ <check enabled="true" name="CERT-INT34-C_c" />
+ <check enabled="true" name="CERT-INT35-C" />
+ <check enabled="true" name="CERT-INT36-C" />
+ </group>
+ <group enabled="true" name="CERT-MEM">
+ <check enabled="true" name="CERT-MEM30-C_a" />
+ <check enabled="true" name="CERT-MEM30-C_b" />
+ <check enabled="true" name="CERT-MEM30-C_c" />
+ <check enabled="true" name="CERT-MEM31-C" />
+ <check enabled="true" name="CERT-MEM33-C_a" />
+ <check enabled="true" name="CERT-MEM33-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_a" />
+ <check enabled="true" name="CERT-MEM34-C_b" />
+ <check enabled="true" name="CERT-MEM34-C_c" />
+ <check enabled="true" name="CERT-MEM35-C_a" />
+ <check enabled="true" name="CERT-MEM35-C_b" />
+ <check enabled="true" name="CERT-MEM35-C_c" />
+ <check enabled="true" name="CERT-MEM36-C" />
+ </group>
+ <group enabled="true" name="CERT-MSC">
+ <check enabled="true" name="CERT-MSC30-C" />
+ <check enabled="true" name="CERT-MSC32-C" />
+ <check enabled="false" name="CERT-MSC33-C" />
+ <check enabled="true" name="CERT-MSC37-C" />
+ <check enabled="true" name="CERT-MSC38-C" />
+ <check enabled="true" name="CERT-MSC39-C" />
+ <check enabled="true" name="CERT-MSC40-C_a" />
+ <check enabled="true" name="CERT-MSC40-C_b" />
+ <check enabled="true" name="CERT-MSC40-C_c" />
+ <check enabled="true" name="CERT-MSC40-C_d" />
+ <check enabled="false" name="CERT-MSC40-C_e" />
+ <check enabled="true" name="CERT-MSC41-C_a" />
+ <check enabled="true" name="CERT-MSC41-C_b" />
+ <check enabled="true" name="CERT-MSC41-C_c" />
+ </group>
+ <group enabled="true" name="CERT-PRE">
+ <check enabled="true" name="CERT-PRE31-C" />
+ <check enabled="true" name="CERT-PRE32-C_a" />
+ <check enabled="true" name="CERT-PRE32-C_b" />
+ </group>
+ <group enabled="true" name="CERT-SIG">
+ <check enabled="true" name="CERT-SIG30-C" />
+ <check enabled="true" name="CERT-SIG31-C" />
+ <check enabled="true" name="CERT-SIG34-C" />
+ <check enabled="true" name="CERT-SIG35-C" />
+ </group>
+ <group enabled="true" name="CERT-STR">
+ <check enabled="true" name="CERT-STR30-C" />
+ <check enabled="true" name="CERT-STR31-C_a" />
+ <check enabled="true" name="CERT-STR31-C_b" />
+ <check enabled="true" name="CERT-STR31-C_c" />
+ <check enabled="true" name="CERT-STR31-C_d" />
+ <check enabled="true" name="CERT-STR31-C_e" />
+ <check enabled="true" name="CERT-STR31-C_f" />
+ <check enabled="true" name="CERT-STR31-C_g" />
+ <check enabled="true" name="CERT-STR31-C_h" />
+ <check enabled="true" name="CERT-STR32-C" />
+ <check enabled="true" name="CERT-STR34-C" />
+ <check enabled="true" name="CERT-STR37-C" />
+ </group>
+ </package>
+ <package enabled="false" name="SECURITY">
+ <group enabled="true" name="SEC-BUFFER">
+ <check enabled="true" name="SEC-BUFFER-memory-leak-alias" />
+ <check enabled="false" name="SEC-BUFFER-memory-leak" />
+ <check enabled="false" name="SEC-BUFFER-memset-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-memset-overrun" />
+ <check enabled="false" name="SEC-BUFFER-qsort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-qsort-overrun" />
+ <check enabled="true" name="SEC-BUFFER-sprintf-overrun" />
+ <check enabled="false" name="SEC-BUFFER-std-sort-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-std-sort-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strcpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strcpy-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncat-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncat-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncmp-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncmp-overrun" />
+ <check enabled="false" name="SEC-BUFFER-strncpy-overrun-pos" />
+ <check enabled="true" name="SEC-BUFFER-strncpy-overrun" />
+ <check enabled="true" name="SEC-BUFFER-tainted-alloc-size" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy-length" />
+ <check enabled="true" name="SEC-BUFFER-tainted-copy" />
+ <check enabled="true" name="SEC-BUFFER-tainted-index" />
+ <check enabled="true" name="SEC-BUFFER-tainted-offset" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-all" />
+ <check enabled="true" name="SEC-BUFFER-use-after-free-some" />
+ </group>
+ <group enabled="true" name="SEC-DIV-0">
+ <check enabled="true" name="SEC-DIV-0-compare-after" />
+ <check enabled="true" name="SEC-DIV-0-compare-before" />
+ <check enabled="true" name="SEC-DIV-0-tainted" />
+ </group>
+ <group enabled="true" name="SEC-FILEOP">
+ <check enabled="true" name="SEC-FILEOP-open-no-close" />
+ <check enabled="false" name="SEC-FILEOP-path-traversal" />
+ <check enabled="true" name="SEC-FILEOP-use-after-close" />
+ </group>
+ <group enabled="true" name="SEC-INJECTION">
+ <check enabled="false" name="SEC-INJECTION-sql" />
+ <check enabled="false" name="SEC-INJECTION-xpath" />
+ </group>
+ <group enabled="true" name="SEC-LOOP">
+ <check enabled="true" name="SEC-LOOP-tainted-bound" />
+ </group>
+ <group enabled="true" name="SEC-NULL">
+ <check enabled="false" name="SEC-NULL-assignment-fun-pos" />
+ <check enabled="true" name="SEC-NULL-assignment" />
+ <check enabled="true" name="SEC-NULL-cmp-aft" />
+ <check enabled="true" name="SEC-NULL-cmp-bef-fun" />
+ <check enabled="true" name="SEC-NULL-cmp-bef" />
+ <check enabled="false" name="SEC-NULL-literal-pos" />
+ </group>
+ <group enabled="true" name="SEC-STRING">
+ <check enabled="true" name="SEC-STRING-format-string" />
+ <check enabled="false" name="SEC-STRING-hard-coded-credentials" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2004">
+ <group enabled="true" name="MISRAC2004-1">
+ <check enabled="true" name="MISRAC2004-1.1" />
+ <check enabled="true" name="MISRAC2004-1.2_a" />
+ <check enabled="true" name="MISRAC2004-1.2_b" />
+ <check enabled="true" name="MISRAC2004-1.2_c" />
+ <check enabled="true" name="MISRAC2004-1.2_d" />
+ <check enabled="true" name="MISRAC2004-1.2_e" />
+ <check enabled="true" name="MISRAC2004-1.2_f" />
+ <check enabled="true" name="MISRAC2004-1.2_g" />
+ <check enabled="true" name="MISRAC2004-1.2_h" />
+ <check enabled="true" name="MISRAC2004-1.2_i" />
+ <check enabled="true" name="MISRAC2004-1.2_j" />
+ </group>
+ <group enabled="true" name="MISRAC2004-2">
+ <check enabled="true" name="MISRAC2004-2.1" />
+ <check enabled="true" name="MISRAC2004-2.2" />
+ <check enabled="true" name="MISRAC2004-2.3" />
+ <check enabled="false" name="MISRAC2004-2.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-5">
+ <check enabled="true" name="MISRAC2004-5.1" />
+ <check enabled="true" name="MISRAC2004-5.2" />
+ <check enabled="true" name="MISRAC2004-5.3" />
+ <check enabled="true" name="MISRAC2004-5.4" />
+ <check enabled="false" name="MISRAC2004-5.5" />
+ <check enabled="false" name="MISRAC2004-5.6" />
+ <check enabled="false" name="MISRAC2004-5.7" />
+ </group>
+ <group enabled="true" name="MISRAC2004-6">
+ <check enabled="true" name="MISRAC2004-6.1" />
+ <check enabled="true" name="MISRAC2004-6.2" />
+ <check enabled="false" name="MISRAC2004-6.3" />
+ <check enabled="true" name="MISRAC2004-6.4" />
+ <check enabled="true" name="MISRAC2004-6.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-7">
+ <check enabled="true" name="MISRAC2004-7.1" />
+ </group>
+ <group enabled="true" name="MISRAC2004-8">
+ <check enabled="true" name="MISRAC2004-8.1" />
+ <check enabled="true" name="MISRAC2004-8.2" />
+ <check enabled="true" name="MISRAC2004-8.3" />
+ <check enabled="true" name="MISRAC2004-8.5_a" />
+ <check enabled="true" name="MISRAC2004-8.5_b" />
+ <check enabled="true" name="MISRAC2004-8.6" />
+ <check enabled="true" name="MISRAC2004-8.7" />
+ <check enabled="true" name="MISRAC2004-8.8_a" />
+ <check enabled="true" name="MISRAC2004-8.8_b" />
+ <check enabled="true" name="MISRAC2004-8.10" />
+ <check enabled="true" name="MISRAC2004-8.12" />
+ </group>
+ <group enabled="true" name="MISRAC2004-9">
+ <check enabled="true" name="MISRAC2004-9.1_a" />
+ <check enabled="true" name="MISRAC2004-9.1_b" />
+ <check enabled="true" name="MISRAC2004-9.1_c" />
+ <check enabled="true" name="MISRAC2004-9.2" />
+ <check enabled="true" name="MISRAC2004-9.3" />
+ </group>
+ <group enabled="true" name="MISRAC2004-10">
+ <check enabled="true" name="MISRAC2004-10.1_a" />
+ <check enabled="true" name="MISRAC2004-10.1_b" />
+ <check enabled="true" name="MISRAC2004-10.1_c" />
+ <check enabled="true" name="MISRAC2004-10.1_d" />
+ <check enabled="true" name="MISRAC2004-10.2_a" />
+ <check enabled="true" name="MISRAC2004-10.2_b" />
+ <check enabled="true" name="MISRAC2004-10.2_c" />
+ <check enabled="true" name="MISRAC2004-10.2_d" />
+ <check enabled="true" name="MISRAC2004-10.3" />
+ <check enabled="true" name="MISRAC2004-10.4" />
+ <check enabled="true" name="MISRAC2004-10.5" />
+ <check enabled="true" name="MISRAC2004-10.6" />
+ </group>
+ <group enabled="true" name="MISRAC2004-11">
+ <check enabled="true" name="MISRAC2004-11.1" />
+ <check enabled="false" name="MISRAC2004-11.3" />
+ <check enabled="false" name="MISRAC2004-11.4" />
+ <check enabled="true" name="MISRAC2004-11.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-12">
+ <check enabled="false" name="MISRAC2004-12.1" />
+ <check enabled="true" name="MISRAC2004-12.2_a" />
+ <check enabled="true" name="MISRAC2004-12.2_b" />
+ <check enabled="true" name="MISRAC2004-12.2_c" />
+ <check enabled="true" name="MISRAC2004-12.3" />
+ <check enabled="true" name="MISRAC2004-12.4" />
+ <check enabled="true" name="MISRAC2004-12.5" />
+ <check enabled="false" name="MISRAC2004-12.6_a" />
+ <check enabled="false" name="MISRAC2004-12.6_b" />
+ <check enabled="true" name="MISRAC2004-12.7" />
+ <check enabled="true" name="MISRAC2004-12.8" />
+ <check enabled="true" name="MISRAC2004-12.9" />
+ <check enabled="true" name="MISRAC2004-12.10" />
+ <check enabled="false" name="MISRAC2004-12.11" />
+ <check enabled="true" name="MISRAC2004-12.12_a" />
+ <check enabled="true" name="MISRAC2004-12.12_b" />
+ <check enabled="false" name="MISRAC2004-12.13" />
+ </group>
+ <group enabled="true" name="MISRAC2004-13">
+ <check enabled="true" name="MISRAC2004-13.1" />
+ <check enabled="false" name="MISRAC2004-13.2_a" />
+ <check enabled="false" name="MISRAC2004-13.2_b" />
+ <check enabled="false" name="MISRAC2004-13.2_c" />
+ <check enabled="false" name="MISRAC2004-13.2_d" />
+ <check enabled="false" name="MISRAC2004-13.2_e" />
+ <check enabled="true" name="MISRAC2004-13.3" />
+ <check enabled="true" name="MISRAC2004-13.4" />
+ <check enabled="true" name="MISRAC2004-13.5" />
+ <check enabled="true" name="MISRAC2004-13.6" />
+ <check enabled="true" name="MISRAC2004-13.7_a" />
+ <check enabled="true" name="MISRAC2004-13.7_b" />
+ </group>
+ <group enabled="true" name="MISRAC2004-14">
+ <check enabled="true" name="MISRAC2004-14.1" />
+ <check enabled="true" name="MISRAC2004-14.2" />
+ <check enabled="true" name="MISRAC2004-14.3" />
+ <check enabled="true" name="MISRAC2004-14.4" />
+ <check enabled="true" name="MISRAC2004-14.5" />
+ <check enabled="true" name="MISRAC2004-14.6" />
+ <check enabled="true" name="MISRAC2004-14.7" />
+ <check enabled="true" name="MISRAC2004-14.8_a" />
+ <check enabled="true" name="MISRAC2004-14.8_b" />
+ <check enabled="true" name="MISRAC2004-14.8_c" />
+ <check enabled="true" name="MISRAC2004-14.8_d" />
+ <check enabled="true" name="MISRAC2004-14.9" />
+ <check enabled="true" name="MISRAC2004-14.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-15">
+ <check enabled="true" name="MISRAC2004-15.0" />
+ <check enabled="true" name="MISRAC2004-15.1" />
+ <check enabled="true" name="MISRAC2004-15.2" />
+ <check enabled="true" name="MISRAC2004-15.3" />
+ <check enabled="true" name="MISRAC2004-15.4" />
+ <check enabled="true" name="MISRAC2004-15.5" />
+ </group>
+ <group enabled="true" name="MISRAC2004-16">
+ <check enabled="true" name="MISRAC2004-16.1" />
+ <check enabled="true" name="MISRAC2004-16.2_a" />
+ <check enabled="true" name="MISRAC2004-16.2_b" />
+ <check enabled="true" name="MISRAC2004-16.3" />
+ <check enabled="true" name="MISRAC2004-16.4" />
+ <check enabled="true" name="MISRAC2004-16.5" />
+ <check enabled="true" name="MISRAC2004-16.7" />
+ <check enabled="true" name="MISRAC2004-16.8" />
+ <check enabled="true" name="MISRAC2004-16.9" />
+ <check enabled="true" name="MISRAC2004-16.10" />
+ </group>
+ <group enabled="true" name="MISRAC2004-17">
+ <check enabled="true" name="MISRAC2004-17.1_a" />
+ <check enabled="true" name="MISRAC2004-17.1_b" />
+ <check enabled="true" name="MISRAC2004-17.1_c" />
+ <check enabled="true" name="MISRAC2004-17.2" />
+ <check enabled="true" name="MISRAC2004-17.3" />
+ <check enabled="true" name="MISRAC2004-17.4_a" />
+ <check enabled="true" name="MISRAC2004-17.4_b" />
+ <check enabled="true" name="MISRAC2004-17.5" />
+ <check enabled="true" name="MISRAC2004-17.6_a" />
+ <check enabled="true" name="MISRAC2004-17.6_b" />
+ <check enabled="true" name="MISRAC2004-17.6_c" />
+ <check enabled="true" name="MISRAC2004-17.6_d" />
+ </group>
+ <group enabled="true" name="MISRAC2004-18">
+ <check enabled="true" name="MISRAC2004-18.1" />
+ <check enabled="true" name="MISRAC2004-18.2" />
+ <check enabled="true" name="MISRAC2004-18.4" />
+ </group>
+ <group enabled="true" name="MISRAC2004-19">
+ <check enabled="false" name="MISRAC2004-19.1" />
+ <check enabled="false" name="MISRAC2004-19.2" />
+ <check enabled="true" name="MISRAC2004-19.4" />
+ <check enabled="true" name="MISRAC2004-19.5" />
+ <check enabled="true" name="MISRAC2004-19.6" />
+ <check enabled="false" name="MISRAC2004-19.7" />
+ <check enabled="true" name="MISRAC2004-19.10" />
+ <check enabled="true" name="MISRAC2004-19.12" />
+ <check enabled="false" name="MISRAC2004-19.13" />
+ <check enabled="true" name="MISRAC2004-19.15" />
+ </group>
+ <group enabled="true" name="MISRAC2004-20">
+ <check enabled="true" name="MISRAC2004-20.1" />
+ <check enabled="true" name="MISRAC2004-20.2" />
+ <check enabled="true" name="MISRAC2004-20.3_a" />
+ <check enabled="true" name="MISRAC2004-20.3_b" />
+ <check enabled="true" name="MISRAC2004-20.3_c" />
+ <check enabled="true" name="MISRAC2004-20.3_d" />
+ <check enabled="true" name="MISRAC2004-20.3_e" />
+ <check enabled="true" name="MISRAC2004-20.3_f" />
+ <check enabled="true" name="MISRAC2004-20.3_g" />
+ <check enabled="true" name="MISRAC2004-20.3_h" />
+ <check enabled="true" name="MISRAC2004-20.3_i" />
+ <check enabled="true" name="MISRAC2004-20.4" />
+ <check enabled="true" name="MISRAC2004-20.5" />
+ <check enabled="true" name="MISRAC2004-20.6" />
+ <check enabled="true" name="MISRAC2004-20.7" />
+ <check enabled="true" name="MISRAC2004-20.8" />
+ <check enabled="true" name="MISRAC2004-20.9" />
+ <check enabled="true" name="MISRAC2004-20.10" />
+ <check enabled="true" name="MISRAC2004-20.11" />
+ <check enabled="true" name="MISRAC2004-20.12" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC2012">
+ <group enabled="true" name="MISRAC2012-Dir-4">
+ <check enabled="true" name="MISRAC2012-Dir-4.3" />
+ <check enabled="false" name="MISRAC2012-Dir-4.4" />
+ <check enabled="false" name="MISRAC2012-Dir-4.5" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.6_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.7_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.8" />
+ <check enabled="false" name="MISRAC2012-Dir-4.9" />
+ <check enabled="true" name="MISRAC2012-Dir-4.10" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_a" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_b" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_c" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_d" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_e" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_f" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_h" />
+ <check enabled="false" name="MISRAC2012-Dir-4.11_i" />
+ <check enabled="false" name="MISRAC2012-Dir-4.12" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_b" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_c" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_d" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_e" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_f" />
+ <check enabled="true" name="MISRAC2012-Dir-4.13_g" />
+ <check enabled="false" name="MISRAC2012-Dir-4.13_h" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-1">
+ <check enabled="true" name="MISRAC2012-Rule-1.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_c" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_d" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_e" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_f" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_g" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_h" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_i" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_j" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_k" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_m" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_n" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_o" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_p" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_q" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_r" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_s" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_t" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_u" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_v" />
+ <check enabled="true" name="MISRAC2012-Rule-1.3_w" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-2">
+ <check enabled="true" name="MISRAC2012-Rule-2.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-2.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-2.3" />
+ <check enabled="false" name="MISRAC2012-Rule-2.4" />
+ <check enabled="false" name="MISRAC2012-Rule-2.5" />
+ <check enabled="false" name="MISRAC2012-Rule-2.6" />
+ <check enabled="false" name="MISRAC2012-Rule-2.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-3">
+ <check enabled="true" name="MISRAC2012-Rule-3.1" />
+ <check enabled="true" name="MISRAC2012-Rule-3.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-5">
+ <check enabled="true" name="MISRAC2012-Rule-5.1" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.2_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.3_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.4_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-5.5_c99" />
+ <check enabled="true" name="MISRAC2012-Rule-5.6" />
+ <check enabled="true" name="MISRAC2012-Rule-5.7" />
+ <check enabled="true" name="MISRAC2012-Rule-5.8" />
+ <check enabled="false" name="MISRAC2012-Rule-5.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-6">
+ <check enabled="true" name="MISRAC2012-Rule-6.1" />
+ <check enabled="true" name="MISRAC2012-Rule-6.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-7">
+ <check enabled="true" name="MISRAC2012-Rule-7.1" />
+ <check enabled="true" name="MISRAC2012-Rule-7.2" />
+ <check enabled="true" name="MISRAC2012-Rule-7.3" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-7.4_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-8">
+ <check enabled="true" name="MISRAC2012-Rule-8.1" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.3" />
+ <check enabled="true" name="MISRAC2012-Rule-8.4" />
+ <check enabled="false" name="MISRAC2012-Rule-8.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-8.5_b" />
+ <check enabled="false" name="MISRAC2012-Rule-8.7" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_a" />
+ <check enabled="false" name="MISRAC2012-Rule-8.9_b" />
+ <check enabled="true" name="MISRAC2012-Rule-8.10" />
+ <check enabled="false" name="MISRAC2012-Rule-8.11" />
+ <check enabled="true" name="MISRAC2012-Rule-8.12" />
+ <check enabled="false" name="MISRAC2012-Rule-8.13" />
+ <check enabled="true" name="MISRAC2012-Rule-8.14" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-9">
+ <check enabled="true" name="MISRAC2012-Rule-9.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_e" />
+ <check enabled="true" name="MISRAC2012-Rule-9.1_f" />
+ <check enabled="true" name="MISRAC2012-Rule-9.2" />
+ <check enabled="true" name="MISRAC2012-Rule-9.3" />
+ <check enabled="true" name="MISRAC2012-Rule-9.4" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-9.5_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-10">
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R4" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.1_R8" />
+ <check enabled="true" name="MISRAC2012-Rule-10.2" />
+ <check enabled="true" name="MISRAC2012-Rule-10.3" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-10.4_b" />
+ <check enabled="false" name="MISRAC2012-Rule-10.5" />
+ <check enabled="true" name="MISRAC2012-Rule-10.6" />
+ <check enabled="true" name="MISRAC2012-Rule-10.7" />
+ <check enabled="true" name="MISRAC2012-Rule-10.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-11">
+ <check enabled="true" name="MISRAC2012-Rule-11.1" />
+ <check enabled="true" name="MISRAC2012-Rule-11.2" />
+ <check enabled="true" name="MISRAC2012-Rule-11.3" />
+ <check enabled="false" name="MISRAC2012-Rule-11.4" />
+ <check enabled="false" name="MISRAC2012-Rule-11.5" />
+ <check enabled="true" name="MISRAC2012-Rule-11.6" />
+ <check enabled="true" name="MISRAC2012-Rule-11.7" />
+ <check enabled="true" name="MISRAC2012-Rule-11.8" />
+ <check enabled="true" name="MISRAC2012-Rule-11.9" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-12">
+ <check enabled="false" name="MISRAC2012-Rule-12.1" />
+ <check enabled="true" name="MISRAC2012-Rule-12.2" />
+ <check enabled="false" name="MISRAC2012-Rule-12.3" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-13">
+ <check enabled="true" name="MISRAC2012-Rule-13.1" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.2_c" />
+ <check enabled="false" name="MISRAC2012-Rule-13.3" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_a" />
+ <check enabled="false" name="MISRAC2012-Rule-13.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-13.5" />
+ <check enabled="true" name="MISRAC2012-Rule-13.6" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-14">
+ <check enabled="true" name="MISRAC2012-Rule-14.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.2" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.3_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_a" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_b" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_c" />
+ <check enabled="true" name="MISRAC2012-Rule-14.4_d" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-15">
+ <check enabled="false" name="MISRAC2012-Rule-15.1" />
+ <check enabled="true" name="MISRAC2012-Rule-15.2" />
+ <check enabled="true" name="MISRAC2012-Rule-15.3" />
+ <check enabled="false" name="MISRAC2012-Rule-15.4" />
+ <check enabled="false" name="MISRAC2012-Rule-15.5" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-15.6_e" />
+ <check enabled="true" name="MISRAC2012-Rule-15.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-16">
+ <check enabled="true" name="MISRAC2012-Rule-16.1" />
+ <check enabled="true" name="MISRAC2012-Rule-16.2" />
+ <check enabled="true" name="MISRAC2012-Rule-16.3" />
+ <check enabled="true" name="MISRAC2012-Rule-16.4" />
+ <check enabled="true" name="MISRAC2012-Rule-16.5" />
+ <check enabled="true" name="MISRAC2012-Rule-16.6" />
+ <check enabled="true" name="MISRAC2012-Rule-16.7" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-17">
+ <check enabled="true" name="MISRAC2012-Rule-17.1" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-17.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-17.3" />
+ <check enabled="true" name="MISRAC2012-Rule-17.4" />
+ <check enabled="false" name="MISRAC2012-Rule-17.5" />
+ <check enabled="true" name="MISRAC2012-Rule-17.6" />
+ <check enabled="true" name="MISRAC2012-Rule-17.7" />
+ <check enabled="false" name="MISRAC2012-Rule-17.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-18">
+ <check enabled="true" name="MISRAC2012-Rule-18.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.1_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.2" />
+ <check enabled="true" name="MISRAC2012-Rule-18.3" />
+ <check enabled="true" name="MISRAC2012-Rule-18.4" />
+ <check enabled="false" name="MISRAC2012-Rule-18.5" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_c" />
+ <check enabled="true" name="MISRAC2012-Rule-18.6_d" />
+ <check enabled="true" name="MISRAC2012-Rule-18.7" />
+ <check enabled="true" name="MISRAC2012-Rule-18.8" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-19">
+ <check enabled="true" name="MISRAC2012-Rule-19.1" />
+ <check enabled="false" name="MISRAC2012-Rule-19.2" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-20">
+ <check enabled="false" name="MISRAC2012-Rule-20.1" />
+ <check enabled="true" name="MISRAC2012-Rule-20.2" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c89" />
+ <check enabled="true" name="MISRAC2012-Rule-20.4_c99" />
+ <check enabled="false" name="MISRAC2012-Rule-20.5" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_a" />
+ <check enabled="true" name="MISRAC2012-Rule-20.6_b" />
+ <check enabled="true" name="MISRAC2012-Rule-20.7" />
+ <check enabled="false" name="MISRAC2012-Rule-20.10" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-21">
+ <check enabled="true" name="MISRAC2012-Rule-21.1" />
+ <check enabled="true" name="MISRAC2012-Rule-21.2" />
+ <check enabled="true" name="MISRAC2012-Rule-21.3" />
+ <check enabled="true" name="MISRAC2012-Rule-21.4" />
+ <check enabled="true" name="MISRAC2012-Rule-21.5" />
+ <check enabled="true" name="MISRAC2012-Rule-21.6" />
+ <check enabled="true" name="MISRAC2012-Rule-21.7" />
+ <check enabled="true" name="MISRAC2012-Rule-21.8" />
+ <check enabled="true" name="MISRAC2012-Rule-21.9" />
+ <check enabled="true" name="MISRAC2012-Rule-21.10" />
+ <check enabled="true" name="MISRAC2012-Rule-21.11" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_a" />
+ <check enabled="false" name="MISRAC2012-Rule-21.12_b" />
+ </group>
+ <group enabled="true" name="MISRAC2012-Rule-22">
+ <check enabled="true" name="MISRAC2012-Rule-22.1_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.1_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.2_c" />
+ <check enabled="true" name="MISRAC2012-Rule-22.3" />
+ <check enabled="true" name="MISRAC2012-Rule-22.4" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_a" />
+ <check enabled="true" name="MISRAC2012-Rule-22.5_b" />
+ <check enabled="true" name="MISRAC2012-Rule-22.6" />
+ </group>
+ </package>
+ <package enabled="false" name="MISRAC++2008">
+ <group enabled="true" name="MISRAC++2008-0-1">
+ <check enabled="true" name="MISRAC++2008-0-1-1" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-2_c" />
+ <check enabled="true" name="MISRAC++2008-0-1-3" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_a" />
+ <check enabled="true" name="MISRAC++2008-0-1-4_b" />
+ <check enabled="true" name="MISRAC++2008-0-1-6" />
+ <check enabled="true" name="MISRAC++2008-0-1-7" />
+ <check enabled="false" name="MISRAC++2008-0-1-8" />
+ <check enabled="true" name="MISRAC++2008-0-1-9" />
+ <check enabled="true" name="MISRAC++2008-0-1-11" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-2">
+ <check enabled="true" name="MISRAC++2008-0-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-0-3">
+ <check enabled="true" name="MISRAC++2008-0-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-7">
+ <check enabled="true" name="MISRAC++2008-2-7-1" />
+ <check enabled="true" name="MISRAC++2008-2-7-2" />
+ <check enabled="false" name="MISRAC++2008-2-7-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-10">
+ <check enabled="true" name="MISRAC++2008-2-10-1" />
+ <check enabled="true" name="MISRAC++2008-2-10-2" />
+ <check enabled="true" name="MISRAC++2008-2-10-3" />
+ <check enabled="true" name="MISRAC++2008-2-10-4" />
+ <check enabled="false" name="MISRAC++2008-2-10-5" />
+ <check enabled="true" name="MISRAC++2008-2-10-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-2-13">
+ <check enabled="true" name="MISRAC++2008-2-13-2" />
+ <check enabled="true" name="MISRAC++2008-2-13-3" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_a" />
+ <check enabled="true" name="MISRAC++2008-2-13-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-1">
+ <check enabled="true" name="MISRAC++2008-3-1-1" />
+ <check enabled="true" name="MISRAC++2008-3-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-3-9">
+ <check enabled="false" name="MISRAC++2008-3-9-2" />
+ <check enabled="true" name="MISRAC++2008-3-9-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-4-5">
+ <check enabled="true" name="MISRAC++2008-4-5-1" />
+ <check enabled="true" name="MISRAC++2008-4-5-2" />
+ <check enabled="true" name="MISRAC++2008-4-5-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-0">
+ <check enabled="true" name="MISRAC++2008-5-0-1_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-1_c" />
+ <check enabled="false" name="MISRAC++2008-5-0-2" />
+ <check enabled="true" name="MISRAC++2008-5-0-3" />
+ <check enabled="true" name="MISRAC++2008-5-0-4" />
+ <check enabled="true" name="MISRAC++2008-5-0-5" />
+ <check enabled="true" name="MISRAC++2008-5-0-6" />
+ <check enabled="true" name="MISRAC++2008-5-0-7" />
+ <check enabled="true" name="MISRAC++2008-5-0-8" />
+ <check enabled="true" name="MISRAC++2008-5-0-9" />
+ <check enabled="true" name="MISRAC++2008-5-0-10" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-13_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-14" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-15_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_a" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_b" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_c" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_d" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_e" />
+ <check enabled="true" name="MISRAC++2008-5-0-16_f" />
+ <check enabled="true" name="MISRAC++2008-5-0-19" />
+ <check enabled="true" name="MISRAC++2008-5-0-21" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-2">
+ <check enabled="true" name="MISRAC++2008-5-2-4" />
+ <check enabled="true" name="MISRAC++2008-5-2-5" />
+ <check enabled="true" name="MISRAC++2008-5-2-6" />
+ <check enabled="true" name="MISRAC++2008-5-2-7" />
+ <check enabled="false" name="MISRAC++2008-5-2-9" />
+ <check enabled="false" name="MISRAC++2008-5-2-10" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_a" />
+ <check enabled="true" name="MISRAC++2008-5-2-11_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-3">
+ <check enabled="true" name="MISRAC++2008-5-3-1" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_a" />
+ <check enabled="true" name="MISRAC++2008-5-3-2_b" />
+ <check enabled="true" name="MISRAC++2008-5-3-3" />
+ <check enabled="true" name="MISRAC++2008-5-3-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-8">
+ <check enabled="true" name="MISRAC++2008-5-8-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-14">
+ <check enabled="true" name="MISRAC++2008-5-14-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-18">
+ <check enabled="true" name="MISRAC++2008-5-18-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-5-19">
+ <check enabled="false" name="MISRAC++2008-5-19-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-2">
+ <check enabled="true" name="MISRAC++2008-6-2-1" />
+ <check enabled="true" name="MISRAC++2008-6-2-2" />
+ <check enabled="false" name="MISRAC++2008-6-2-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-3">
+ <check enabled="true" name="MISRAC++2008-6-3-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_c" />
+ <check enabled="true" name="MISRAC++2008-6-3-1_d" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-4">
+ <check enabled="true" name="MISRAC++2008-6-4-1" />
+ <check enabled="true" name="MISRAC++2008-6-4-2" />
+ <check enabled="true" name="MISRAC++2008-6-4-3" />
+ <check enabled="true" name="MISRAC++2008-6-4-4" />
+ <check enabled="true" name="MISRAC++2008-6-4-5" />
+ <check enabled="true" name="MISRAC++2008-6-4-6" />
+ <check enabled="true" name="MISRAC++2008-6-4-7" />
+ <check enabled="true" name="MISRAC++2008-6-4-8" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-5">
+ <check enabled="true" name="MISRAC++2008-6-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-6-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-6-5-2" />
+ <check enabled="true" name="MISRAC++2008-6-5-3" />
+ <check enabled="true" name="MISRAC++2008-6-5-4" />
+ <check enabled="true" name="MISRAC++2008-6-5-5" />
+ <check enabled="true" name="MISRAC++2008-6-5-6" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-6-6">
+ <check enabled="true" name="MISRAC++2008-6-6-1" />
+ <check enabled="true" name="MISRAC++2008-6-6-2" />
+ <check enabled="true" name="MISRAC++2008-6-6-4" />
+ <check enabled="true" name="MISRAC++2008-6-6-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-1">
+ <check enabled="true" name="MISRAC++2008-7-1-1" />
+ <check enabled="true" name="MISRAC++2008-7-1-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-2">
+ <check enabled="true" name="MISRAC++2008-7-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-4">
+ <check enabled="true" name="MISRAC++2008-7-4-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-7-5">
+ <check enabled="true" name="MISRAC++2008-7-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_a" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_b" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_c" />
+ <check enabled="true" name="MISRAC++2008-7-5-2_d" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_a" />
+ <check enabled="false" name="MISRAC++2008-7-5-4_b" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-0">
+ <check enabled="true" name="MISRAC++2008-8-0-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-4">
+ <check enabled="true" name="MISRAC++2008-8-4-1" />
+ <check enabled="true" name="MISRAC++2008-8-4-3" />
+ <check enabled="true" name="MISRAC++2008-8-4-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-8-5">
+ <check enabled="true" name="MISRAC++2008-8-5-1_a" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_b" />
+ <check enabled="true" name="MISRAC++2008-8-5-1_c" />
+ <check enabled="true" name="MISRAC++2008-8-5-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-3">
+ <check enabled="true" name="MISRAC++2008-9-3-1" />
+ <check enabled="true" name="MISRAC++2008-9-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-5">
+ <check enabled="true" name="MISRAC++2008-9-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-9-6">
+ <check enabled="true" name="MISRAC++2008-9-6-2" />
+ <check enabled="true" name="MISRAC++2008-9-6-3" />
+ <check enabled="true" name="MISRAC++2008-9-6-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-12-1">
+ <check enabled="true" name="MISRAC++2008-12-1-1_a" />
+ <check enabled="true" name="MISRAC++2008-12-1-1_b" />
+ <check enabled="true" name="MISRAC++2008-12-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-0">
+ <check enabled="false" name="MISRAC++2008-15-0-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-1">
+ <check enabled="true" name="MISRAC++2008-15-1-2" />
+ <check enabled="true" name="MISRAC++2008-15-1-3" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-3">
+ <check enabled="true" name="MISRAC++2008-15-3-1" />
+ <check enabled="false" name="MISRAC++2008-15-3-2" />
+ <check enabled="true" name="MISRAC++2008-15-3-3" />
+ <check enabled="true" name="MISRAC++2008-15-3-4" />
+ <check enabled="true" name="MISRAC++2008-15-3-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-15-5">
+ <check enabled="true" name="MISRAC++2008-15-5-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-0">
+ <check enabled="true" name="MISRAC++2008-16-0-3" />
+ <check enabled="true" name="MISRAC++2008-16-0-4" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-2">
+ <check enabled="true" name="MISRAC++2008-16-2-2" />
+ <check enabled="true" name="MISRAC++2008-16-2-3" />
+ <check enabled="true" name="MISRAC++2008-16-2-4" />
+ <check enabled="false" name="MISRAC++2008-16-2-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-16-3">
+ <check enabled="true" name="MISRAC++2008-16-3-1" />
+ <check enabled="false" name="MISRAC++2008-16-3-2" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-17-0">
+ <check enabled="true" name="MISRAC++2008-17-0-1" />
+ <check enabled="true" name="MISRAC++2008-17-0-3" />
+ <check enabled="true" name="MISRAC++2008-17-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-0">
+ <check enabled="true" name="MISRAC++2008-18-0-1" />
+ <check enabled="true" name="MISRAC++2008-18-0-2" />
+ <check enabled="true" name="MISRAC++2008-18-0-3" />
+ <check enabled="true" name="MISRAC++2008-18-0-4" />
+ <check enabled="true" name="MISRAC++2008-18-0-5" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-2">
+ <check enabled="true" name="MISRAC++2008-18-2-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-4">
+ <check enabled="true" name="MISRAC++2008-18-4-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-18-7">
+ <check enabled="true" name="MISRAC++2008-18-7-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-19-3">
+ <check enabled="true" name="MISRAC++2008-19-3-1" />
+ </group>
+ <group enabled="true" name="MISRAC++2008-27-0">
+ <check enabled="true" name="MISRAC++2008-27-0-1" />
+ </group>
+ </package>
+ </checks_tree>
+ </cstat_settings>
+ </data>
+ </settings>
+ <settings>
+ <name>RuntimeChecking</name>
+ <archiveVersion>0</archiveVersion>
+ <data>
+ <version>2</version>
+ <wantNonLocal>1</wantNonLocal>
+ <debug>0</debug>
+ <option>
+ <name>GenRtcDebugHeap</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnableBoundsChecking</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrMem</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcTrackPointerBounds</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcCheckAccesses</name>
+ <state>1</state>
+ </option>
+ <option>
+ <name>GenRtcGenerateEntries</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcNrTrackedPointers</name>
+ <state>1000</state>
+ </option>
+ <option>
+ <name>GenRtcIntOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIncUnsigned</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntConversion</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclExplicit</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcIntShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcInclUnsignedShiftOverflow</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcUnhandledCase</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcDivByZero</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcEnable</name>
+ <state>0</state>
+ </option>
+ <option>
+ <name>GenRtcCheckPtrsNonInstrFunc</name>
+ <state>1</state>
+ </option>
+ </data>
+ </settings>
+ </configuration>
+ <group>
+ <name>inc</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_api.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_block_pool.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_byte_pool.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_event_flags.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_initialize.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_mutex.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\inc\tx_port.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_queue.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_semaphore.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_thread.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_timer.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_trace.h</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\inc\tx_user_sample.h</name>
+ </file>
+ </group>
+ <group>
+ <name>src</name>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_block_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_pool_search.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_byte_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_event_flags_set_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_iar.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_high_level.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_kernel_enter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_initialize_kernel_setup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_misra.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_mutex_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_flush.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_front_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_receive.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_queue_send_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_ceiling_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_cleanup.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_semaphore_put_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_context_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_entry_exit_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_context_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_nesting_end.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_fiq_nesting_start.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_identify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_control.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_disable.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_interrupt_restore.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_irq_nesting_end.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_irq_nesting_start.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_preemption_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_relinquish.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_reset.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_schedule.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_shell_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_sleep.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_analyze.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_stack_build.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_error_handler.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_stack_error_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_preempt_check.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_system_return.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_system_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_terminate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_time_slice.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_time_slice_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_timeout.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_thread_vectored_context_save.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_thread_wait_abort.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_time_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_time_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_expiration_process.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\src\tx_timer_interrupt.s</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_performance_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_performance_system_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_system_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_system_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_timer_thread_entry.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_buffer_full_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_disable.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_enable.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_event_filter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_event_unfilter.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_initialize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_interrupt_control.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_isr_enter_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_isr_exit_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_object_register.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_object_unregister.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\tx_trace_user_event_insert.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_block_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_allocate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_pool_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_byte_release.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_set.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_event_flags_set_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_mutex_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_flush.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_front_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_receive.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_send.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_queue_send_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_ceiling_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_prioritize.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_put.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_semaphore_put_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_entry_exit_notify.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_info_get.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_preemption_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_priority_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_relinquish.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_reset.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_resume.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_suspend.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_terminate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_time_slice_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_thread_wait_abort.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_activate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_change.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_create.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_deactivate.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_delete.c</name>
+ </file>
+ <file>
+ <name>$PROJ_DIR$\..\..\..\..\common\src\txe_timer_info_get.c</name>
+ </file>
+ </group>
+</project>
diff --git a/ports/arm11/iar/example_build/tx_initialize_low_level.s b/ports/arm11/iar/example_build/tx_initialize_low_level.s
new file mode 100644
index 00000000..1ff234c9
--- /dev/null
+++ b/ports/arm11/iar/example_build/tx_initialize_low_level.s
@@ -0,0 +1,339 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Initialize */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_initialize.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+SVC_MODE DEFINE 0xD3 ; Disable irq,fiq SVC mode
+IRQ_MODE DEFINE 0xD2 ; Disable irq,fiq IRQ mode
+FIQ_MODE DEFINE 0xD1 ; Disable irq,fiq FIQ mode
+SYS_MODE DEFINE 0xDF ; Disable irq,fiq SYS mode
+;
+;
+
+ EXTERN _tx_thread_system_stack_ptr
+ EXTERN _tx_initialize_unused_memory
+ EXTERN _tx_thread_context_save
+; EXTERN _tx_thread_vectored_context_save
+ EXTERN _tx_thread_context_restore
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ EXTERN _tx_thread_fiq_context_save
+ EXTERN _tx_thread_fiq_context_restore
+#endif
+#ifdef TX_ENABLE_IRQ_NESTING
+ EXTERN _tx_thread_irq_nesting_start
+ EXTERN _tx_thread_irq_nesting_end
+#endif
+#ifdef TX_ENABLE_FIQ_NESTING
+ EXTERN _tx_thread_fiq_nesting_start
+ EXTERN _tx_thread_fiq_nesting_end
+#endif
+ EXTERN _tx_timer_interrupt
+ EXTERN ?cstartup
+ EXTERN _tx_build_options
+ EXTERN _tx_version_id
+;
+;
+;
+;/* Define the FREE_MEM segment that will specify where free memory is
+; defined. This must also be located in at the end of other RAM segments
+; in the linker control file. The value of this segment is what is passed
+; to tx_application_define. */
+;
+ RSEG FREE_MEM:DATA
+ PUBLIC __tx_free_memory_start
+__tx_free_memory_start
+ DS32 4
+;
+;
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_initialize_low_level ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for any low-level processor */
+;/* initialization, including setting up interrupt vectors, setting */
+;/* up a periodic timer interrupt source, saving the system stack */
+;/* pointer for use in ISR processing later, and finding the first */
+;/* available RAM memory address for tx_application_define. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_initialize_low_level(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ CODE32
+ PUBLIC _tx_initialize_low_level
+_tx_initialize_low_level
+;
+; /****** NOTE ****** The IAR 4.11a and above releases call main in SYS mode. */
+;
+; /* Remember the stack pointer, link register, and switch to SVC mode. */
+;
+ MOV r0, sp ; Remember the SP
+ MOV r1, lr ; Remember the LR
+ MOV r3, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_cxsf, r3 ; Switch to SVC mode
+ MOV sp, r0 ; Inherit the stack pointer setup by cstartup
+ MOV lr, r1 ; Inherit the link register
+;
+; /* Pickup the start of free memory. */
+;
+ LDR r0, =__tx_free_memory_start ; Get end of non-initialized RAM area
+;
+; /* Save the system stack pointer. */
+; _tx_thread_system_stack_ptr = (VOID_PTR) (sp);
+;
+; /* Save the first available memory address. */
+; _tx_initialize_unused_memory = (VOID_PTR) FREE_MEM;
+;
+ LDR r2, =_tx_initialize_unused_memory ; Pickup unused memory ptr address
+ STR r0, [r2, #0] ; Save first free memory address
+;
+; /* Setup Timer for periodic interrupts. */
+;
+; /* Done, return to caller. */
+;
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;}
+;
+;/* Define shells for each of the interrupt vectors. */
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_undefined
+__tx_undefined
+ B __tx_undefined ; Undefined handler
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_swi_interrupt
+__tx_swi_interrupt
+ B __tx_swi_interrupt ; Software interrupt handler
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_prefetch_handler
+__tx_prefetch_handler
+ B __tx_prefetch_handler ; Prefetch exception handler
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_abort_handler
+__tx_abort_handler
+ B __tx_abort_handler ; Abort exception handler
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_reserved_handler
+__tx_reserved_handler
+ B __tx_reserved_handler ; Reserved exception handler
+;
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_irq_handler
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. In
+; addition, IRQ interrupts may be re-enabled - with certain restrictions -
+; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+; small code sequences where lr is saved before enabling interrupts and
+; restored after interrupts are again disabled. */
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; from IRQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; prior to enabling nested IRQ interrupts. */
+#ifdef TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_start
+#endif
+;
+; /* For debug purpose, execute the timer interrupt processing here. In
+; a real system, some kind of status indication would have to be checked
+; before the timer interrupt handler could be called. */
+;
+ BL _tx_timer_interrupt ; Timer interrupt handler
+;
+; /* Application IRQ handlers can be called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_context_restore.
+; This routine returns in processing in IRQ mode with interrupts disabled. */
+#ifdef TX_ENABLE_IRQ_NESTING
+ BL _tx_thread_irq_nesting_end
+#endif
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+;
+;
+; /* This is an example of a vectored IRQ handler. */
+;
+; RSEG .text:CODE:NOROOT(2)
+; PUBLIC __tx_example_vectored_irq_handler
+;__tx_example_vectored_irq_handler
+;
+; /* Jump to context save to save system context. */
+; STMDB sp!, {r0-r3} ; Save some scratch registers
+; MRS r0, SPSR ; Pickup saved SPSR
+; SUB lr, lr, #4 ; Adjust point of interrupt
+; STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+; BL _tx_thread_vectored_context_save
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. In
+; addition, IRQ interrupts may be re-enabled - with certain restrictions -
+; if nested IRQ interrupts are desired. Interrupts may be re-enabled over
+; small code sequences where lr is saved before enabling interrupts and
+; restored after interrupts are again disabled. */
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; from IRQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; prior to enabling nested IRQ interrupts. */
+;#ifdef TX_ENABLE_IRQ_NESTING
+; BL _tx_thread_irq_nesting_start
+;#endif
+;
+; /* Application IRQ handler is called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_context_restore.
+; This routine returns in processing in IRQ mode with interrupts disabled. */
+;#ifdef TX_ENABLE_IRQ_NESTING
+; BL _tx_thread_irq_nesting_end
+;#endif
+;
+; /* Jump to context restore to restore system context. */
+; B _tx_thread_context_restore
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_handler
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_fiq_nesting_start
+; from FIQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with FIQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all FIQ interrupts are cleared
+; prior to enabling nested FIQ interrupts. */
+#ifdef TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_start
+#endif
+;
+; /* Application FIQ handlers can be called here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_fiq_context_restore. */
+#ifdef TX_ENABLE_FIQ_NESTING
+ BL _tx_thread_fiq_nesting_end
+#endif
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+;
+;
+#else
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_handler
+__tx_fiq_handler
+ B __tx_fiq_handler ; FIQ interrupt handler
+#endif
+;
+;
+BUILD_OPTIONS
+ DC32 _tx_build_options ; Reference to ensure it comes in
+VERSION_ID
+ DC32 _tx_version_id ; Reference to ensure it comes in
+ END
+
diff --git a/ports/arm11/iar/inc/tx_port.h b/ports/arm11/iar/inc/tx_port.h
new file mode 100644
index 00000000..9a305c69
--- /dev/null
+++ b/ports/arm11/iar/inc/tx_port.h
@@ -0,0 +1,401 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 1996-2018 by Express Logic Inc. */
+/* */
+/* This software is copyrighted by and is the sole property of Express */
+/* Logic, Inc. All rights, title, ownership, or other interests */
+/* in the software remain the property of Express Logic, Inc. This */
+/* software may only be used in accordance with the corresponding */
+/* license agreement. Any unauthorized use, duplication, transmission, */
+/* distribution, or disclosure of this software is expressly forbidden. */
+/* */
+/* This Copyright notice may not be removed or modified without prior */
+/* written consent of Express Logic, Inc. */
+/* */
+/* Express Logic, Inc. reserves the right to modify this software */
+/* without notice. */
+/* */
+/* Express Logic, Inc. [email protected] */
+/* 11423 West Bernardo Court http://www.expresslogic.com */
+/* San Diego, CA 92127 */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** Port Specific */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+
+/**************************************************************************/
+/* */
+/* PORT SPECIFIC C INFORMATION RELEASE */
+/* */
+/* tx_port.h ARM11/IAR */
+/* 6.0.1 */
+/* */
+/* AUTHOR */
+/* */
+/* William E. Lamie, Express Logic, Inc. */
+/* */
+/* DESCRIPTION */
+/* */
+/* This file contains data type definitions that make the ThreadX */
+/* real-time kernel function identically on a variety of different */
+/* processor architectures. For example, the size or number of bits */
+/* in an "int" data type vary between microprocessor architectures and */
+/* even C compilers for the same microprocessor. ThreadX does not */
+/* directly use native C data types. Instead, ThreadX creates its */
+/* own special types that can be mapped to actual data types by this */
+/* file to guarantee consistency in the interface and functionality. */
+/* */
+/* RELEASE HISTORY */
+/* */
+/* DATE NAME DESCRIPTION */
+/* */
+/* 06-30-2020 William E. Lamie Initial ARM11 IAR */
+/* Support Version 6.0.1 */
+/* */
+/**************************************************************************/
+
+#ifndef TX_PORT_H
+#define TX_PORT_H
+
+
+/* Determine if the optional ThreadX user define file should be used. */
+
+#ifdef TX_INCLUDE_USER_DEFINE_FILE
+
+
+/* Yes, include the user defines in tx_user.h. The defines in this file may
+ alternately be defined on the command line. */
+
+#include "tx_user.h"
+#endif
+
+
+/* Define compiler library include files. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <intrinsics.h>
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#include <yvals.h>
+#endif
+
+
+/* Define ThreadX basic types for this port. */
+
+#define VOID void
+typedef char CHAR;
+typedef unsigned char UCHAR;
+typedef int INT;
+typedef unsigned int UINT;
+typedef long LONG;
+typedef unsigned long ULONG;
+typedef short SHORT;
+typedef unsigned short USHORT;
+
+
+/* Define the priority levels for ThreadX. Legal values range
+ from 32 to 1024 and MUST be evenly divisible by 32. */
+
+#ifndef TX_MAX_PRIORITIES
+#define TX_MAX_PRIORITIES 32
+#endif
+
+
+/* Define the minimum stack for a ThreadX thread on this processor. If the size supplied during
+ thread creation is less than this value, the thread create call will return an error. */
+
+#ifndef TX_MINIMUM_STACK
+#define TX_MINIMUM_STACK 200 /* Minimum stack size for this port */
+#endif
+
+
+/* Define the system timer thread's default stack size and priority. These are only applicable
+ if TX_TIMER_PROCESS_IN_ISR is not defined. */
+
+#ifndef TX_TIMER_THREAD_STACK_SIZE
+#define TX_TIMER_THREAD_STACK_SIZE 1024 /* Default timer thread stack size */
+#endif
+
+#ifndef TX_TIMER_THREAD_PRIORITY
+#define TX_TIMER_THREAD_PRIORITY 0 /* Default timer thread priority */
+#endif
+
+
+/* Define various constants for the ThreadX ARM port. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_INT_DISABLE 0xC0 /* Disable IRQ & FIQ interrupts */
+#else
+#define TX_INT_DISABLE 0x80 /* Disable IRQ interrupts */
+#endif
+#define TX_INT_ENABLE 0x00 /* Enable IRQ interrupts */
+
+
+/* Define the clock source for trace event entry time stamp. The following two item are port specific.
+ For example, if the time source is at the address 0x0a800024 and is 16-bits in size, the clock
+ source constants would be:
+
+#define TX_TRACE_TIME_SOURCE *((ULONG *) 0x0a800024)
+#define TX_TRACE_TIME_MASK 0x0000FFFFUL
+
+*/
+
+#ifndef TX_MISRA_ENABLE
+#ifndef TX_TRACE_TIME_SOURCE
+#define TX_TRACE_TIME_SOURCE ++_tx_trace_simulated_time
+#endif
+#else
+ULONG _tx_misra_time_stamp_get(VOID);
+#define TX_TRACE_TIME_SOURCE _tx_misra_time_stamp_get()
+#endif
+
+#ifndef TX_TRACE_TIME_MASK
+#define TX_TRACE_TIME_MASK 0xFFFFFFFFUL
+#endif
+
+
+/* Define the port specific options for the _tx_build_options variable. This variable indicates
+ how the ThreadX library was built. */
+
+#ifdef TX_ENABLE_FIQ_SUPPORT
+#define TX_FIQ_ENABLED 1
+#else
+#define TX_FIQ_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_IRQ_NESTING
+#define TX_IRQ_NESTING_ENABLED 2
+#else
+#define TX_IRQ_NESTING_ENABLED 0
+#endif
+
+#ifdef TX_ENABLE_FIQ_NESTING
+#define TX_FIQ_NESTING_ENABLED 4
+#else
+#define TX_FIQ_NESTING_ENABLED 0
+#endif
+
+#define TX_PORT_SPECIFIC_BUILD_OPTIONS (TX_FIQ_ENABLED | TX_IRQ_NESTING_ENABLED | TX_FIQ_NESTING_ENABLED)
+
+
+/* Define the in-line initialization constant so that modules with in-line
+ initialization capabilities can prevent their initialization from being
+ a function call. */
+
+#ifdef TX_MISRA_ENABLE
+#define TX_DISABLE_INLINE
+#else
+#define TX_INLINE_INITIALIZATION
+#endif
+
+
+/* Determine whether or not stack checking is enabled. By default, ThreadX stack checking is
+ disabled. When the following is defined, ThreadX thread stack checking is enabled. If stack
+ checking is enabled (TX_ENABLE_STACK_CHECKING is defined), the TX_DISABLE_STACK_FILLING
+ define is negated, thereby forcing the stack fill which is necessary for the stack checking
+ logic. */
+
+#ifndef TX_MISRA_ENABLE
+#ifdef TX_ENABLE_STACK_CHECKING
+#undef TX_DISABLE_STACK_FILLING
+#endif
+#endif
+
+
+/* Define the TX_THREAD control block extensions for this port. The main reason
+ for the multiple macros is so that backward compatibility can be maintained with
+ existing ThreadX kernel awareness modules. */
+
+#define TX_THREAD_EXTENSION_0
+#define TX_THREAD_EXTENSION_1
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#else
+#define TX_THREAD_EXTENSION_2
+#endif
+#define TX_THREAD_EXTENSION_3
+
+
+/* Define the port extensions of the remaining ThreadX objects. */
+
+#define TX_BLOCK_POOL_EXTENSION
+#define TX_BYTE_POOL_EXTENSION
+#define TX_EVENT_FLAGS_GROUP_EXTENSION
+#define TX_MUTEX_EXTENSION
+#define TX_QUEUE_EXTENSION
+#define TX_SEMAPHORE_EXTENSION
+#define TX_TIMER_EXTENSION
+
+
+/* Define the user extension field of the thread control block. Nothing
+ additional is needed for this port so it is defined as white space. */
+
+#ifndef TX_THREAD_USER_EXTENSION
+#define TX_THREAD_USER_EXTENSION
+#endif
+
+
+/* Define the macros for processing extensions in tx_thread_create, tx_thread_delete,
+ tx_thread_shell_entry, and tx_thread_terminate. */
+
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#if (__VER__ < 8000000)
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
+#else
+void *_tx_iar_create_per_thread_tls_area(void);
+void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
+void __iar_Initlocks(void);
+
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = _tx_iar_create_per_thread_tls_area();
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {_tx_iar_destroy_per_thread_tls_area(thread_ptr -> tx_thread_iar_tls_pointer); \
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#endif
+#else
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#endif
+#define TX_THREAD_COMPLETED_EXTENSION(thread_ptr)
+#define TX_THREAD_TERMINATED_EXTENSION(thread_ptr)
+
+
+/* Define the ThreadX object creation extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_CREATE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_CREATE_EXTENSION(group_ptr)
+#define TX_MUTEX_CREATE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_CREATE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_CREATE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_CREATE_EXTENSION(timer_ptr)
+
+
+/* Define the ThreadX object deletion extensions for the remaining objects. */
+
+#define TX_BLOCK_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_BYTE_POOL_DELETE_EXTENSION(pool_ptr)
+#define TX_EVENT_FLAGS_GROUP_DELETE_EXTENSION(group_ptr)
+#define TX_MUTEX_DELETE_EXTENSION(mutex_ptr)
+#define TX_QUEUE_DELETE_EXTENSION(queue_ptr)
+#define TX_SEMAPHORE_DELETE_EXTENSION(semaphore_ptr)
+#define TX_TIMER_DELETE_EXTENSION(timer_ptr)
+
+
+/* Determine if the ARM architecture has the CLZ instruction. This is available on
+ architectures v5 and above. If available, redefine the macro for calculating the
+ lowest bit set. */
+
+#ifndef TX_DISABLE_INLINE
+
+#if __CORE__ > __ARM4TM__
+
+#if __CPU_MODE__ == 2
+
+#define TX_LOWEST_SET_BIT_CALCULATE(m, b) m = m & ((ULONG) (-((LONG) m))); \
+ b = (UINT) __CLZ(m); \
+ b = 31 - b;
+#endif
+#endif
+#endif
+
+
+/* Define ThreadX interrupt lockout and restore macros for protection on
+ access of critical kernel information. The restore interrupt macro must
+ restore the interrupt posture of the running thread prior to the value
+ present prior to the disable macro. In most cases, the save area macro
+ is used to define a local function save area for the disable and restore
+ macros. */
+
+
+/* First, check and see what mode the file is being compiled in. The IAR compiler
+ defines __CPU_MODE__ to 1, if the Thumb mode is present, and 2 if ARM 32-bit mode
+ is present. If ARM 32-bit mode is present, the fast CPSR manipulation macros
+ are available. Otherwise, if Thumb mode is present, we must use function calls. */
+
+#ifdef TX_DISABLE_INLINE
+
+UINT _tx_thread_interrupt_disable(void);
+void _tx_thread_interrupt_restore(UINT old_posture);
+
+
+#define TX_INTERRUPT_SAVE_AREA UINT interrupt_save;
+
+#define TX_DISABLE interrupt_save = _tx_thread_interrupt_disable();
+#define TX_RESTORE _tx_thread_interrupt_restore(interrupt_save);
+
+#else
+#if __CPU_MODE__ == 2
+
+#if (__VER__ < 8002000)
+__intrinsic unsigned long __get_CPSR();
+__intrinsic void __set_CPSR( unsigned long );
+#endif
+
+
+#if (__VER__ < 8002000)
+#define TX_INTERRUPT_SAVE_AREA unsigned long interrupt_save;
+#else
+#define TX_INTERRUPT_SAVE_AREA unsigned int interrupt_save;
+#endif
+
+#define TX_DISABLE interrupt_save = __get_CPSR(); \
+ __set_CPSR(interrupt_save | TX_INT_DISABLE);
+#define TX_RESTORE __set_CPSR(interrupt_save);
+
+#else
+
+UINT _tx_thread_interrupt_disable(void);
+void _tx_thread_interrupt_restore(UINT old_posture);
+
+
+#define TX_INTERRUPT_SAVE_AREA UINT interrupt_save;
+
+#define TX_DISABLE interrupt_save = _tx_thread_interrupt_disable();
+#define TX_RESTORE _tx_thread_interrupt_restore(interrupt_save);
+
+#endif
+#endif
+
+
+/* Define the interrupt lockout macros for each ThreadX object. */
+
+#define TX_BLOCK_POOL_DISABLE TX_DISABLE
+#define TX_BYTE_POOL_DISABLE TX_DISABLE
+#define TX_EVENT_FLAGS_GROUP_DISABLE TX_DISABLE
+#define TX_MUTEX_DISABLE TX_DISABLE
+#define TX_QUEUE_DISABLE TX_DISABLE
+#define TX_SEMAPHORE_DISABLE TX_DISABLE
+
+
+/* Define the version ID of ThreadX. This may be utilized by the application. */
+
+#ifdef TX_THREAD_INIT
+CHAR _tx_version_id[] =
+ "Copyright (c) Microsoft Corporation. All rights reserved. * ThreadX ARM11/IAR Version 6.0.1 *";
+#else
+#ifdef TX_MISRA_ENABLE
+extern CHAR _tx_version_id[100];
+#else
+extern CHAR _tx_version_id[];
+#endif
+#endif
+
+
+#endif
+
+
+
diff --git a/ports/arm11/iar/readme_threadx.txt b/ports/arm11/iar/readme_threadx.txt
new file mode 100644
index 00000000..d585f517
--- /dev/null
+++ b/ports/arm11/iar/readme_threadx.txt
@@ -0,0 +1,527 @@
+ Microsoft's Azure RTOS ThreadX for ARM11
+
+ Thumb & 32-bit Mode
+
+ Using the IAR Tools
+
+1. Building the ThreadX run-time Library
+
+Building the ThreadX library is easy. First, open the Azure RTOS workspace
+azure_rtos.eww. Next, make the TX project the "active project" in the
+IAR Embedded Workbench and select the "Make" button. You should observe
+assembly and compilation of a series of ThreadX source files. This
+results in the ThreadX run-time library file tx.a, which is needed by
+the application.
+
+
+2. Demonstration System
+
+The ThreadX demonstration is designed to execute under the IAR
+Windows-based ARM11 simulator.
+
+Building the demonstration is easy; simply make the sample_threadx.ewp project
+the "active project" in the IAR Embedded Workbench and select the
+"Make" button.
+
+You should observe the compilation of sample_threadx.c (which is the demonstration
+application) and linking with tx.a. The resulting file sample_threadx.out is a
+binary file that can be downloaded and executed on IAR's ARM11 simulator.
+
+A SPECIAL NOTE: The IAR ARM simulator does simulate interrupts. In order
+for the ThreadX demonstration to run properly, a periodic IRQ interrupt must
+be setup in the IAR debugging environment. We recommend setting an IRQ
+interrupt to execute every 9999 cycles.
+
+
+3. System Initialization
+
+The entry point in ThreadX for the ARM11 using IAR tools is at label
+?cstartup. This is defined within the IAR compiler's startup code. In
+addition, this is where all static and global preset C variable
+initialization processing takes place.
+
+The ThreadX tx_initialize_low_level.s file is responsible for setting up
+various system data structures, and a periodic timer interrupt source.
+By default, the vector area is defined at the top of cstartup.s, which is
+a slightly modified from the base IAR file.
+
+The _tx_initialize_low_level function inside of tx_initialize_low_level.s
+also determines the first available address for use by the application, which
+is supplied as the sole input parameter to your application definition function,
+tx_application_define. To accomplish this, a section is created in
+tx_initialize_low_level.s called FREE_MEM, which must be located after all
+other RAM sections in memory.
+
+
+4. Register Usage and Stack Frames
+
+The IAR ARM compiler assumes that registers r0-r3 (a1-a4) and r12 (ip) are
+scratch registers for each function. All other registers used by a C function
+must be preserved by the function. ThreadX takes advantage of this in
+situations where a context switch happens as a result of making a ThreadX
+service call (which is itself a C function). In such cases, the saved
+context of a thread is only the non-scratch registers.
+
+The following defines the saved context stack frames for context switches
+that occur as a result of interrupt handling or from thread-level API calls.
+All suspended threads have one of these two types of stack frames. The top
+of the suspended thread's stack is pointed to by tx_thread_stack_ptr in the
+associated thread control block TX_THREAD.
+
+
+
+ Offset Interrupted Stack Frame Non-Interrupt Stack Frame
+
+ 0x00 1 0
+ 0x04 CPSR CPSR
+ 0x08 r0 (a1) r4 (v1)
+ 0x0C r1 (a2) r5 (v2)
+ 0x10 r2 (a3) r6 (v3)
+ 0x14 r3 (a4) r7 (v4)
+ 0x18 r4 (v1) r8 (v5)
+ 0x1C r5 (v2) r9 (v6)
+ 0x20 r6 (v3) r10 (v7)
+ 0x24 r7 (v4) r11 (fp)
+ 0x28 r8 (v5) r14 (lr)
+ 0x2C r9 (v6)
+ 0x30 r10 (v7)
+ 0x34 r11 (fp)
+ 0x38 r12 (ip)
+ 0x3C r14 (lr)
+ 0x40 PC
+
+
+5. Conditional Compilation Switches
+
+The following are conditional compilation options for building the ThreadX library
+and application:
+
+
+ TX_ENABLE_FIQ_SUPPORT This assembler/compiler define enables
+ FIQ interrupt handling support in the
+ ThreadX assembly files. If used,
+ it should be used on all assembly
+ files and the generic C source of
+ ThreadX should be compiled with
+ TX_ENABLE_FIQ_SUPPORT defined as well.
+
+ TX_ENABLE_IRQ_NESTING This assembler define enables IRQ
+ nested support. If IRQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.s.
+
+ TX_ENABLE_FIQ_NESTING This assembler define enables FIQ
+ nested support. If FIQ nested
+ interrupt support is needed, this
+ define should be applied to
+ tx_initialize_low_level.s. In addition,
+ IRQ nesting should also be enabled.
+
+ TX_DISABLE_ERROR_CHECKING If defined before tx_api.h is included,
+ this define causes basic ThreadX error
+ checking to be disabled. Please see
+ Chapter 2 in the "ThreadX User Guide"
+ for more details.
+
+ TX_MAX_PRIORITIES Defines the priority levels for ThreadX.
+ Legal values range from 32 through
+ 1024 (inclusive) and MUST be evenly divisible
+ by 32. Increasing the number of priority levels
+ supported increases the RAM usage by 128 bytes
+ for every group of 32 priorities. However, there
+ is only a negligible effect on performance. By
+ default, this value is set to 32 priority levels.
+
+ TX_MINIMUM_STACK Defines the minimum stack size (in bytes). It is
+ used for error checking when threads are created.
+ The default value is port-specific and is found
+ in tx_port.h.
+
+ TX_TIMER_THREAD_STACK_SIZE Defines the stack size (in bytes) of the internal
+ ThreadX timer thread. This thread processes all
+ thread sleep requests as well as all service call
+ timeouts. In addition, all application timer callback
+ routines are invoked from this context. The default
+ value is port-specific and is found in tx_port.h.
+
+ TX_TIMER_THREAD_PRIORITY Defines the priority of the internal ThreadX timer
+ thread. The default value is priority 0 - the highest
+ priority in ThreadX. The default value is defined
+ in tx_port.h.
+
+ TX_TIMER_PROCESS_IN_ISR Defined, this option eliminates the internal system
+ timer thread for ThreadX. This results in improved
+ performance on timer events and smaller RAM requirements
+ because the timer stack and control block are no
+ longer needed. However, using this option moves all
+ the timer expiration processing to the timer ISR level.
+ By default, this option is not defined.
+
+ TX_REACTIVATE_INLINE Defined, this option performs reactivation of ThreadX
+ timers in-line instead of using a function call. This
+ improves performance but slightly increases code size.
+ By default, this option is not defined.
+
+ TX_DISABLE_STACK_FILLING Defined, placing the 0xEF value in each byte of each
+ thread's stack is disabled. By default, this option is
+ not defined.
+
+ TX_ENABLE_STACK_CHECKING Defined, this option enables ThreadX run-time stack checking,
+ which includes analysis of how much stack has been used and
+ examination of data pattern "fences" before and after the
+ stack area. If a stack error is detected, the registered
+ application stack error handler is called. This option does
+ result in slightly increased overhead and code size. Please
+ review the tx_thread_stack_error_notify API for more information.
+ By default, this option is not defined.
+
+ TX_DISABLE_PREEMPTION_THRESHOLD Defined, this option disables the preemption-threshold feature
+ and slightly reduces code size and improves performance. Of course,
+ the preemption-threshold capabilities are no longer available.
+ By default, this option is not defined.
+
+ TX_DISABLE_REDUNDANT_CLEARING Defined, this option removes the logic for initializing ThreadX
+ global C data structures to zero. This should only be used if
+ the compiler's initialization code sets all un-initialized
+ C global data to zero. Using this option slightly reduces
+ code size and improves performance during initialization.
+ By default, this option is not defined.
+
+ TX_DISABLE_NOTIFY_CALLBACKS Defined, this option disables the notify callbacks for various
+ ThreadX objects. Using this option slightly reduces code size
+ and improves performance.
+
+ TX_BLOCK_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on block pools. By default, this option is
+ not defined.
+
+ TX_BYTE_POOL_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on byte pools. By default, this option is
+ not defined.
+
+ TX_EVENT_FLAGS_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on event flags groups. By default, this option
+ is not defined.
+
+ TX_MUTEX_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on mutexes. By default, this option is
+ not defined.
+
+ TX_QUEUE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on queues. By default, this option is
+ not defined.
+
+ TX_SEMAPHORE_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on semaphores. By default, this option is
+ not defined.
+
+ TX_THREAD_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on threads. By default, this option is
+ not defined.
+
+ TX_TIMER_ENABLE_PERFORMANCE_INFO Defined, this option enables the gathering of performance
+ information on timers. By default, this option is
+ not defined.
+
+ TX_ENABLE_EVENT_TRACE Defined, this option enables the internal ThreadX trace
+ feature. The trace buffer is supplied at a later time
+ via an application call to tx_trace_enable.
+
+ TX_TRACE_TIME_SOURCE This defines the time-stamp source for event tracing.
+ This define is only pertinent if the ThreadX library is
+ built with TX_ENABLE_EVENT_TRACE defined.
+
+ TX_TRACE_TIME_MASK This defines the number of valid bits in the event trace
+ time-stamp source defined previously. If the time-stamp
+ source is 16-bits, this value should be 0xFFFF. Alternatively,
+ if the time-stamp source is 32-bits, this value should be
+ 0xFFFFFFFF. This define is only pertinent if the ThreadX
+ library is built with TX_ENABLE_EVENT_TRACE defined.
+
+ TX_THUMB Defined, this option enables the BX LR calling return sequence
+ in assembly files, to ensure correct operation on systems that
+ use both ARM and Thumb mode. By default, this option is
+ not defined
+
+
+
+
+
+6. Improving Performance
+
+The distribution version of ThreadX is built without any compiler
+optimizations. This makes it easy to debug because you can trace or set
+breakpoints inside of ThreadX itself. Of course, this costs some
+performance. To make it run faster, you can change the ThreadX library
+project to enable various compiler optimizations.
+
+In addition, you can eliminate the ThreadX basic API error checking by
+compiling your application code with the symbol TX_DISABLE_ERROR_CHECKING
+defined.
+
+
+7. Interrupt Handling
+
+ThreadX provides complete and high-performance interrupt handling for ARM11
+targets. There are a certain set of requirements that are defined in the
+following sub-sections:
+
+
+7.1 Vector Area
+
+The ARM11 vectors start at address zero. The demonstration system startup
+cstartup.s file contains the vectors and is loaded at address zero.
+On actual hardware platforms, this area might have to be copied to address 0.
+
+
+7.2 IRQ ISRs
+
+ThreadX fully manages standard and vectored IRQ interrupts. ThreadX also supports nested
+IRQ interrupts. The following sub-sections define the IRQ capabilities.
+
+
+7.2.1 Standard IRQ ISRs
+
+The standard ARM IRQ mechanism has a single interrupt vector at address 0x18. This IRQ
+interrupt is managed by the __tx_irq_handler code in tx_initialize_low_level. The following
+is the default IRQ handler defined in tx_initialize_low_level.s:
+
+ PUBLIC __tx_irq_handler
+ PUBLIC __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. Note
+; that IRQ interrupts are still disabled upon return from the context
+; save function. */
+;
+; /* Application ISR dispatch call goes here! */
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.2 Vectored IRQ ISRs
+
+The vectored ARM IRQ mechanism has multiple interrupt vectors at addresses specified
+by the particular implementation. The following is an example IRQ handler defined in
+tx_initialize_low_level.s:
+
+
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_example_vectored_irq_handler
+__tx_example_vectored_irq_handler
+;
+; /* Jump to context save to save system context. */
+ STMDB sp!, {r0-r3} ; Save some scratch registers
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+ BL _tx_thread_vectored_context_save
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. Note
+; that IRQ interrupts are still disabled upon return from the context
+; save function. */
+;
+; /* Application ISR dispatch call goes here! */
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.2.3 Nested IRQ Support
+
+By default, nested IRQ interrupt support is not enabled. To enable nested
+IRQ support, the entire library should be built with TX_ENABLE_IRQ_NESTING
+defined. With this defined, two new IRQ interrupt management services are
+available, namely _tx_thread_irq_nesting_start and _tx_thread_irq_nesting_end.
+These function should be called between the IRQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_irq_nesting_start and
+_tx_thread_irq_nesting_end is enabled for IRQ nesting. This is achieved
+by switching from IRQ mode to SYS mode and enabling IRQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested IRQ interrupts are no
+longer required, calling the _tx_thread_irq_nesting_end service disables
+nesting by disabling IRQ interrupts and switching back to IRQ mode in
+preparation for the IRQ context restore service.
+
+The following is an example of enabling IRQ nested interrupts in a standard
+IRQ handler:
+
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_irq_handler
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_irq_processing_return
+__tx_irq_handler
+;
+; /* Jump to context save to save system context. */
+ B _tx_thread_context_save
+__tx_irq_processing_return
+;
+; /* At this point execution is still in the IRQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. Note
+; that IRQ interrupts are still disabled upon return from the context
+; save function. */
+;
+; /* Interrupt nesting is allowed after calling _tx_thread_irq_nesting_start
+; from IRQ mode with interrupts disabled. This routine switches to the
+; system mode and returns with IRQ interrupts enabled.
+;
+; NOTE: It is very important to ensure all IRQ interrupts are cleared
+; prior to enabling nested IRQ interrupts. */
+;
+ BL _tx_thread_irq_nesting_start
+
+; /* Application ISR dispatch call goes here! */
+;
+; /* If interrupt nesting was started earlier, the end of interrupt nesting
+; service must be called before returning to _tx_thread_context_restore.
+; This routine returns in processing in IRQ mode with interrupts disabled. */
+;
+ BL _tx_thread_irq_nesting_end
+;
+; /* Jump to context restore to restore system context. */
+ B _tx_thread_context_restore
+
+
+7.3 FIQ Interrupts
+
+By default, ARM11 FIQ interrupts are left alone by ThreadX. Of course, this
+means that the application is fully responsible for enabling the FIQ interrupt
+and saving/restoring any registers used in the FIQ ISR processing. To globally
+enable FIQ interrupts, the application should enable FIQ interrupts at the
+beginning of each thread or before any threads are created in tx_application_define.
+In addition, the application must ensure that no ThreadX service calls are made
+from default FIQ ISRs, which is located in tx_initialize_low_level.s.
+
+
+7.3.1 Managed FIQ Interrupts
+
+Full ThreadX management of FIQ interrupts is provided if the ThreadX sources
+are built with the TX_ENABLE_FIQ_SUPPORT defined. If the library is built
+this way, the FIQ interrupt handlers are very similar to the IRQ interrupt
+handlers defined previously. The following is default FIQ handler
+defined in tx_initialize_low_level.s:
+
+
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_handler
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Application FIQ dispatch call goes here! */
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+
+7.3.1.1 Nested FIQ Support
+
+By default, nested FIQ interrupt support is not enabled. To enable nested
+FIQ support, the entire library should be built with TX_ENABLE_FIQ_NESTING
+defined. With this defined, two new FIQ interrupt management services are
+available, namely _tx_thread_fiq_nesting_start and _tx_thread_fiq_nesting_end.
+These function should be called between the FIQ context save and restore
+calls.
+
+Execution between the calls to _tx_thread_fiq_nesting_start and
+_tx_thread_fiq_nesting_end is enabled for FIQ nesting. This is achieved
+by switching from FIQ mode to SYS mode and enabling FIQ interrupts.
+The SYS mode stack is used during the SYS mode operation, which was
+setup in tx_initialize_low_level.s. When nested FIQ interrupts are no
+longer required, calling the _tx_thread_fiq_nesting_end service disables
+nesting by disabling FIQ interrupts and switching back to FIQ mode in
+preparation for the FIQ context restore service.
+
+The following is an example of enabling FIQ nested interrupts in the
+typical FIQ handler:
+
+
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_handler
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC __tx_fiq_processing_return
+__tx_fiq_handler
+;
+; /* Jump to fiq context save to save system context. */
+ B _tx_thread_fiq_context_save
+__tx_fiq_processing_return:
+;
+; /* At this point execution is still in the FIQ mode. The CPSR, point of
+; interrupt, and all C scratch registers are available for use. */
+;
+; /* Enable nested FIQ interrupts. NOTE: Since this service returns
+; with FIQ interrupts enabled, all FIQ interrupt sources must be
+; cleared prior to calling this service. */
+ BL _tx_thread_fiq_nesting_start
+;
+; /* Application FIQ dispatch call goes here! */
+;
+; /* Disable nested FIQ interrupts. The mode is switched back to
+; FIQ mode and FIQ interrupts are disable upon return. */
+ BL _tx_thread_fiq_nesting_end
+;
+; /* Jump to fiq context restore to restore system context. */
+ B _tx_thread_fiq_context_restore
+
+
+8. ThreadX Timer Interrupt
+
+ThreadX requires a periodic interrupt source to manage all time-slicing,
+thread sleeps, timeouts, and application timers. Without such a timer
+interrupt source, these services are not functional. However, all other
+ThreadX services are operational without a periodic timer source.
+
+To add the timer interrupt processing, simply make a call to _tx_timer_interrupt
+in the IRQ processing.
+
+
+9. Thumb/ARM11 Mixed Mode
+
+By default, ThreadX is setup for running in ARM11 32-bit mode. This is
+also true for the demonstration system. It is possible to build any
+ThreadX file and/or the application in Thumb mode. The only exception
+to this is the file tx_thread_shell_entry.c. This file must always be
+built in 32-bit mode. In addition, if any Thumb code is used the entire
+ThreadX assembly source should be built with TX_THUMB defined.
+
+
+10. IAR Thread-safe Library Support
+
+Thread-safe support for the IAR tools is easily enabled by building the ThreadX library
+and the application with TX_ENABLE_IAR_LIBRARY_SUPPORT. Also, the linker control file
+should have the following line added (if not already in place):
+
+initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
+
+The project options "General Options -> Library Configuration" should also have the
+"Enable thread support in library" box selected.
+
+
+11. Revision History
+
+06/30/2020 Initial ThreadX 6.0.1 version for ARM11 using IAR's ARM tools.
+
+
+Copyright(c) 1996-2020 Microsoft Corporation
+
+
+https://azure.com/rtos
+
diff --git a/ports/arm11/iar/src/tx_iar.c b/ports/arm11/iar/src/tx_iar.c
new file mode 100644
index 00000000..95592d4b
--- /dev/null
+++ b/ports/arm11/iar/src/tx_iar.c
@@ -0,0 +1,816 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 1996-2018 by Express Logic Inc. */
+/* */
+/* This software is copyrighted by and is the sole property of Express */
+/* Logic, Inc. All rights, title, ownership, or other interests */
+/* in the software remain the property of Express Logic, Inc. This */
+/* software may only be used in accordance with the corresponding */
+/* license agreement. Any unauthorized use, duplication, transmission, */
+/* distribution, or disclosure of this software is expressly forbidden. */
+/* */
+/* This Copyright notice may not be removed or modified without prior */
+/* written consent of Express Logic, Inc. */
+/* */
+/* Express Logic, Inc. reserves the right to modify this software */
+/* without notice. */
+/* */
+/* Express Logic, Inc. [email protected] */
+/* 11423 West Bernardo Court www.expresslogic.com */
+/* San Diego, CA 92127 */
+/* */
+/**************************************************************************/
+
+
+/**************************************************************************/
+/**************************************************************************/
+/** */
+/** ThreadX Component */
+/** */
+/** IAR Multithreaded Library Support */
+/** */
+/**************************************************************************/
+/**************************************************************************/
+
+#define TX_SOURCE_CODE
+
+
+/* Define IAR library for tools prior to version 8. */
+
+#if (__VER__ < 8000000)
+
+
+/* IAR version 7 and below. */
+
+/* Include necessary system files. */
+
+#include "tx_api.h"
+#include "tx_initialize.h"
+#include "tx_thread.h"
+#include "tx_mutex.h"
+
+
+/* This implementation requires that the following macros are defined in the
+ tx_port.h file and <yvals.h> is included with the following code segments:
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#include <yvals.h>
+#endif
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#else
+#define TX_THREAD_EXTENSION_2
+#endif
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr) __iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL;
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION __iar_dlib_perthread_access(0);
+#else
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#endif
+
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
+
+ Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
+*/
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+
+#include <yvals.h>
+
+
+#if _MULTI_THREAD
+
+TX_MUTEX __tx_iar_system_lock_mutexes[_MAX_LOCK];
+UINT __tx_iar_system_lock_next_free_mutex = 0;
+
+
+/* Define error counters, just for debug purposes. */
+
+UINT __tx_iar_system_lock_no_mutexes;
+UINT __tx_iar_system_lock_internal_errors;
+UINT __tx_iar_system_lock_isr_caller;
+
+
+/* Define the TLS access function for the IAR library. */
+
+void _DLIB_TLS_MEMORY *__iar_dlib_perthread_access(void _DLIB_TLS_MEMORY *symbp)
+{
+
+char _DLIB_TLS_MEMORY *p = 0;
+
+ /* Is there a current thread? */
+ if (_tx_thread_current_ptr)
+ p = (char _DLIB_TLS_MEMORY *) _tx_thread_current_ptr -> tx_thread_iar_tls_pointer;
+ else
+ p = (void _DLIB_TLS_MEMORY *) __segment_begin("__DLIB_PERTHREAD");
+ p += __IAR_DLIB_PERTHREAD_SYMBOL_OFFSET(symbp);
+ return (void _DLIB_TLS_MEMORY *) p;
+}
+
+
+/* Define mutexes for IAR library. */
+
+void __iar_system_Mtxinit(__iar_Rmtx *m)
+{
+
+UINT i;
+UINT status;
+TX_MUTEX *mutex_ptr;
+
+
+ /* First, find a free mutex in the list. */
+ for (i = 0; i < _MAX_LOCK; i++)
+ {
+
+ /* Setup a pointer to the start of the next free mutex. */
+ mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
+
+ /* Check for wrap-around on the next free mutex. */
+ if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
+ {
+
+ /* Yes, set the free index back to 0. */
+ __tx_iar_system_lock_next_free_mutex = 0;
+ }
+
+ /* Is this mutex free? */
+ if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
+ {
+
+ /* Yes, this mutex is free, get out of the loop! */
+ break;
+ }
+ }
+
+ /* Determine if a free mutex was found. */
+ if (i >= _MAX_LOCK)
+ {
+
+ /* Error! No more free mutexes! */
+
+ /* Increment the no mutexes error counter. */
+ __tx_iar_system_lock_no_mutexes++;
+
+ /* Set return pointer to NULL. */
+ *m = TX_NULL;
+
+ /* Return. */
+ return;
+ }
+
+ /* Now create the ThreadX mutex for the IAR library. */
+ status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
+
+ /* Determine if the creation was successful. */
+ if (status == TX_SUCCESS)
+ {
+
+ /* Yes, successful creation, return mutex pointer. */
+ *m = (VOID *) mutex_ptr;
+ }
+ else
+ {
+
+ /* Increment the internal error counter. */
+ __tx_iar_system_lock_internal_errors++;
+
+ /* Return a NULL pointer to indicate an error. */
+ *m = TX_NULL;
+ }
+}
+
+void __iar_system_Mtxdst(__iar_Rmtx *m)
+{
+
+ /* Simply delete the mutex. */
+ _tx_mutex_delete((TX_MUTEX *) *m);
+}
+
+void __iar_system_Mtxlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex locks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Get the mutex. */
+ status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_system_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_system_lock_isr_caller++;
+ }
+}
+
+void __iar_system_Mtxunlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Release the mutex. */
+ status = _tx_mutex_put((TX_MUTEX *) *m);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_system_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_system_lock_isr_caller++;
+ }
+}
+
+
+#if _DLIB_FILE_DESCRIPTOR
+
+TX_MUTEX __tx_iar_file_lock_mutexes[_MAX_FLOCK];
+UINT __tx_iar_file_lock_next_free_mutex = 0;
+
+
+/* Define error counters, just for debug purposes. */
+
+UINT __tx_iar_file_lock_no_mutexes;
+UINT __tx_iar_file_lock_internal_errors;
+UINT __tx_iar_file_lock_isr_caller;
+
+
+void __iar_file_Mtxinit(__iar_Rmtx *m)
+{
+
+UINT i;
+UINT status;
+TX_MUTEX *mutex_ptr;
+
+
+ /* First, find a free mutex in the list. */
+ for (i = 0; i < _MAX_FLOCK; i++)
+ {
+
+ /* Setup a pointer to the start of the next free mutex. */
+ mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
+
+ /* Check for wrap-around on the next free mutex. */
+ if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
+ {
+
+ /* Yes, set the free index back to 0. */
+ __tx_iar_file_lock_next_free_mutex = 0;
+ }
+
+ /* Is this mutex free? */
+ if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
+ {
+
+ /* Yes, this mutex is free, get out of the loop! */
+ break;
+ }
+ }
+
+ /* Determine if a free mutex was found. */
+ if (i >= _MAX_LOCK)
+ {
+
+ /* Error! No more free mutexes! */
+
+ /* Increment the no mutexes error counter. */
+ __tx_iar_file_lock_no_mutexes++;
+
+ /* Set return pointer to NULL. */
+ *m = TX_NULL;
+
+ /* Return. */
+ return;
+ }
+
+ /* Now create the ThreadX mutex for the IAR library. */
+ status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
+
+ /* Determine if the creation was successful. */
+ if (status == TX_SUCCESS)
+ {
+
+ /* Yes, successful creation, return mutex pointer. */
+ *m = (VOID *) mutex_ptr;
+ }
+ else
+ {
+
+ /* Increment the internal error counter. */
+ __tx_iar_file_lock_internal_errors++;
+
+ /* Return a NULL pointer to indicate an error. */
+ *m = TX_NULL;
+ }
+}
+
+void __iar_file_Mtxdst(__iar_Rmtx *m)
+{
+
+ /* Simply delete the mutex. */
+ _tx_mutex_delete((TX_MUTEX *) *m);
+}
+
+void __iar_file_Mtxlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex locks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Get the mutex. */
+ status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_file_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_file_lock_isr_caller++;
+ }
+}
+
+void __iar_file_Mtxunlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Release the mutex. */
+ status = _tx_mutex_put((TX_MUTEX *) *m);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_file_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_file_lock_isr_caller++;
+ }
+}
+#endif /* _DLIB_FILE_DESCRIPTOR */
+
+#endif /* _MULTI_THREAD */
+
+#endif /* TX_ENABLE_IAR_LIBRARY_SUPPORT */
+
+#else /* IAR version 8 and above. */
+
+
+/* Include necessary system files. */
+
+#include "tx_api.h"
+#include "tx_initialize.h"
+#include "tx_thread.h"
+#include "tx_mutex.h"
+
+/* This implementation requires that the following macros are defined in the
+ tx_port.h file and <yvals.h> is included with the following code segments:
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#include <yvals.h>
+#endif
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+#define TX_THREAD_EXTENSION_2 VOID *tx_thread_iar_tls_pointer;
+#else
+#define TX_THREAD_EXTENSION_2
+#endif
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+void *_tx_iar_create_per_thread_tls_area(void);
+void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
+void __iar_Initlocks(void);
+
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr) thread_ptr -> tx_thread_iar_tls_pointer = __iar_dlib_perthread_allocate();
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr) do {__iar_dlib_perthread_deallocate(thread_ptr -> tx_thread_iar_tls_pointer); \
+ thread_ptr -> tx_thread_iar_tls_pointer = TX_NULL; } while(0);
+#define TX_PORT_SPECIFIC_PRE_SCHEDULER_INITIALIZATION do {__iar_Initlocks();} while(0);
+#else
+#define TX_THREAD_CREATE_EXTENSION(thread_ptr)
+#define TX_THREAD_DELETE_EXTENSION(thread_ptr)
+#endif
+
+ This should be done automatically if TX_ENABLE_IAR_LIBRARY_SUPPORT is defined while building the ThreadX library and the
+ application.
+
+ Finally, the project options General Options -> Library Configuration should have the "Enable thread support in library" box selected.
+*/
+
+#ifdef TX_ENABLE_IAR_LIBRARY_SUPPORT
+
+#include <DLib_threads.h>
+
+
+void * __aeabi_read_tp();
+
+void* _tx_iar_create_per_thread_tls_area();
+void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr);
+
+#pragma section="__iar_tls$$DATA"
+
+/* Define the TLS access function for the IAR library. */
+void * __aeabi_read_tp(void)
+{
+ void *p = 0;
+ TX_THREAD *thread_ptr = _tx_thread_current_ptr;
+ if (thread_ptr)
+ {
+ p = thread_ptr->tx_thread_iar_tls_pointer;
+ }
+ else
+ {
+ p = __section_begin("__iar_tls$$DATA");
+ }
+ return p;
+}
+
+/* Define the TLS creation and destruction to use malloc/free. */
+
+void* _tx_iar_create_per_thread_tls_area()
+{
+ UINT tls_size = __iar_tls_size();
+
+ /* Get memory for TLS. */
+ void *p = malloc(tls_size);
+
+ /* Initialize TLS-area and run constructors for objects in TLS */
+ __iar_tls_init(p);
+ return p;
+}
+
+void _tx_iar_destroy_per_thread_tls_area(void *tls_ptr)
+{
+ /* Destroy objects living in TLS */
+ __call_thread_dtors();
+ free(tls_ptr);
+}
+
+#ifndef _MAX_LOCK
+#define _MAX_LOCK 4
+#endif
+
+static TX_MUTEX __tx_iar_system_lock_mutexes[_MAX_LOCK];
+static UINT __tx_iar_system_lock_next_free_mutex = 0;
+
+
+/* Define error counters, just for debug purposes. */
+
+UINT __tx_iar_system_lock_no_mutexes;
+UINT __tx_iar_system_lock_internal_errors;
+UINT __tx_iar_system_lock_isr_caller;
+
+
+/* Define mutexes for IAR library. */
+
+void __iar_system_Mtxinit(__iar_Rmtx *m)
+{
+
+UINT i;
+UINT status;
+TX_MUTEX *mutex_ptr;
+
+
+ /* First, find a free mutex in the list. */
+ for (i = 0; i < _MAX_LOCK; i++)
+ {
+
+ /* Setup a pointer to the start of the next free mutex. */
+ mutex_ptr = &__tx_iar_system_lock_mutexes[__tx_iar_system_lock_next_free_mutex++];
+
+ /* Check for wrap-around on the next free mutex. */
+ if (__tx_iar_system_lock_next_free_mutex >= _MAX_LOCK)
+ {
+
+ /* Yes, set the free index back to 0. */
+ __tx_iar_system_lock_next_free_mutex = 0;
+ }
+
+ /* Is this mutex free? */
+ if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
+ {
+
+ /* Yes, this mutex is free, get out of the loop! */
+ break;
+ }
+ }
+
+ /* Determine if a free mutex was found. */
+ if (i >= _MAX_LOCK)
+ {
+
+ /* Error! No more free mutexes! */
+
+ /* Increment the no mutexes error counter. */
+ __tx_iar_system_lock_no_mutexes++;
+
+ /* Set return pointer to NULL. */
+ *m = TX_NULL;
+
+ /* Return. */
+ return;
+ }
+
+ /* Now create the ThreadX mutex for the IAR library. */
+ status = _tx_mutex_create(mutex_ptr, "IAR System Library Lock", TX_NO_INHERIT);
+
+ /* Determine if the creation was successful. */
+ if (status == TX_SUCCESS)
+ {
+
+ /* Yes, successful creation, return mutex pointer. */
+ *m = (VOID *) mutex_ptr;
+ }
+ else
+ {
+
+ /* Increment the internal error counter. */
+ __tx_iar_system_lock_internal_errors++;
+
+ /* Return a NULL pointer to indicate an error. */
+ *m = TX_NULL;
+ }
+}
+
+void __iar_system_Mtxdst(__iar_Rmtx *m)
+{
+
+ /* Simply delete the mutex. */
+ _tx_mutex_delete((TX_MUTEX *) *m);
+}
+
+void __iar_system_Mtxlock(__iar_Rmtx *m)
+{
+ if (*m)
+ {
+ UINT status;
+
+ /* Determine the caller's context. Mutex locks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Get the mutex. */
+ status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_system_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_system_lock_isr_caller++;
+ }
+ }
+}
+
+void __iar_system_Mtxunlock(__iar_Rmtx *m)
+{
+ if (*m)
+ {
+ UINT status;
+
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Release the mutex. */
+ status = _tx_mutex_put((TX_MUTEX *) *m);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_system_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_system_lock_isr_caller++;
+ }
+ }
+}
+
+
+#if _DLIB_FILE_DESCRIPTOR
+
+#include <stdio.h> /* Added to get access to FOPEN_MAX */
+#ifndef _MAX_FLOCK
+#define _MAX_FLOCK FOPEN_MAX /* Define _MAX_FLOCK as the maximum number of open files */
+#endif
+
+
+TX_MUTEX __tx_iar_file_lock_mutexes[_MAX_FLOCK];
+UINT __tx_iar_file_lock_next_free_mutex = 0;
+
+
+/* Define error counters, just for debug purposes. */
+
+UINT __tx_iar_file_lock_no_mutexes;
+UINT __tx_iar_file_lock_internal_errors;
+UINT __tx_iar_file_lock_isr_caller;
+
+
+void __iar_file_Mtxinit(__iar_Rmtx *m)
+{
+
+UINT i;
+UINT status;
+TX_MUTEX *mutex_ptr;
+
+
+ /* First, find a free mutex in the list. */
+ for (i = 0; i < _MAX_FLOCK; i++)
+ {
+
+ /* Setup a pointer to the start of the next free mutex. */
+ mutex_ptr = &__tx_iar_file_lock_mutexes[__tx_iar_file_lock_next_free_mutex++];
+
+ /* Check for wrap-around on the next free mutex. */
+ if (__tx_iar_file_lock_next_free_mutex >= _MAX_LOCK)
+ {
+
+ /* Yes, set the free index back to 0. */
+ __tx_iar_file_lock_next_free_mutex = 0;
+ }
+
+ /* Is this mutex free? */
+ if (mutex_ptr -> tx_mutex_id != TX_MUTEX_ID)
+ {
+
+ /* Yes, this mutex is free, get out of the loop! */
+ break;
+ }
+ }
+
+ /* Determine if a free mutex was found. */
+ if (i >= _MAX_LOCK)
+ {
+
+ /* Error! No more free mutexes! */
+
+ /* Increment the no mutexes error counter. */
+ __tx_iar_file_lock_no_mutexes++;
+
+ /* Set return pointer to NULL. */
+ *m = TX_NULL;
+
+ /* Return. */
+ return;
+ }
+
+ /* Now create the ThreadX mutex for the IAR library. */
+ status = _tx_mutex_create(mutex_ptr, "IAR File Library Lock", TX_NO_INHERIT);
+
+ /* Determine if the creation was successful. */
+ if (status == TX_SUCCESS)
+ {
+
+ /* Yes, successful creation, return mutex pointer. */
+ *m = (VOID *) mutex_ptr;
+ }
+ else
+ {
+
+ /* Increment the internal error counter. */
+ __tx_iar_file_lock_internal_errors++;
+
+ /* Return a NULL pointer to indicate an error. */
+ *m = TX_NULL;
+ }
+}
+
+void __iar_file_Mtxdst(__iar_Rmtx *m)
+{
+
+ /* Simply delete the mutex. */
+ _tx_mutex_delete((TX_MUTEX *) *m);
+}
+
+void __iar_file_Mtxlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex locks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Get the mutex. */
+ status = _tx_mutex_get((TX_MUTEX *) *m, TX_WAIT_FOREVER);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_file_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_file_lock_isr_caller++;
+ }
+}
+
+void __iar_file_Mtxunlock(__iar_Rmtx *m)
+{
+
+UINT status;
+
+
+ /* Determine the caller's context. Mutex unlocks are only available from initialization and
+ threads. */
+ if ((_tx_thread_system_state == 0) || (_tx_thread_system_state >= TX_INITIALIZE_IN_PROGRESS))
+ {
+
+ /* Release the mutex. */
+ status = _tx_mutex_put((TX_MUTEX *) *m);
+
+ /* Check the status of the mutex release. */
+ if (status)
+ {
+
+ /* Internal error, increment the counter. */
+ __tx_iar_file_lock_internal_errors++;
+ }
+ }
+ else
+ {
+
+ /* Increment the ISR caller error. */
+ __tx_iar_file_lock_isr_caller++;
+ }
+}
+#endif /* _DLIB_FILE_DESCRIPTOR */
+
+#endif /* TX_ENABLE_IAR_LIBRARY_SUPPORT */
+
+#endif /* IAR version 8 and above. */
diff --git a/ports/arm11/iar/src/tx_thread_context_restore.s b/ports/arm11/iar/src/tx_thread_context_restore.s
new file mode 100644
index 00000000..a66ecdc5
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_context_restore.s
@@ -0,0 +1,258 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+SVC_MODE DEFINE 0xD3 ; SVC mode
+IRQ_MODE DEFINE 0xD2 ; IRQ mode
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; Disable IRQ interrupts
+#else
+DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
+#endif
+MODE_MASK DEFINE 0x1F ; Mode mask
+THUMB_MASK DEFINE 0x20 ; Thumb bit mask
+SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
+
+;
+ EXTERN _tx_thread_system_state
+ EXTERN _tx_thread_current_ptr
+ EXTERN _tx_thread_execute_ptr
+ EXTERN _tx_timer_time_slice
+ EXTERN _tx_thread_schedule
+ EXTERN _tx_thread_preempt_disable
+ EXTERN _tx_execution_isr_exit
+;
+;
+
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_restore ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the interrupt context if it is processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs Interrupt Service Routines */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_context_restore(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_context_restore
+ CODE32
+_tx_thread_context_restore
+;
+; /* Lockout interrupts. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ ORR r0, r3, #DISABLE_INTS ; Build interrupt disable value
+ MSR CPSR_cxsf, r0 ; Lockout interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR exit function to indicate an ISR is complete. */
+;
+ BL _tx_execution_isr_exit ; Call the ISR exit function
+#endif
+;
+; /* Determine if interrupts are nested. */
+; if (--_tx_thread_system_state)
+; {
+;
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ SUB r2, r2, #1 ; Decrement the counter
+ STR r2, [r3, #0] ; Store the counter
+ CMP r2, #0 ; Was this the first interrupt?
+ BEQ __tx_thread_not_nested_restore ; If so, not a nested restore
+;
+; /* Interrupts are nested. */
+;
+; /* Just recover the saved registers and return to the point of
+; interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+__tx_thread_not_nested_restore
+;
+; /* Determine if a thread was interrupted and no preemption is required. */
+; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+; || (_tx_thread_preempt_disable))
+; {
+;
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup actual current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_restore ; Yes, idle system was interrupted
+;
+ LDR r3, =_tx_thread_preempt_disable ; Pickup preempt disable address
+ LDR r2, [r3, #0] ; Pickup actual preempt disable flag
+ CMP r2, #0 ; Is it set?
+ BNE __tx_thread_no_preempt_restore ; Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr ; Pickup address of execute thread ptr
+ LDR r2, [r3, #0] ; Pickup actual execute thread pointer
+ CMP r0, r2 ; Is the same thread highest priority?
+ BNE __tx_thread_preempt_restore ; No, preemption needs to happen
+;
+;
+__tx_thread_no_preempt_restore
+;
+; /* Restore interrupted thread or ISR. */
+;
+; /* Pickup the saved stack pointer. */
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+;
+; /* Recover the saved context and return to the point of interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+; else
+; {
+__tx_thread_preempt_restore
+;
+ LDMIA sp!, {r3, r10, r12, lr} ; Recover temporarily saved registers
+ MOV r1, lr ; Save lr (point of interrupt)
+ MOV r2, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_c, r2 ; Enter SVC mode
+ STR r1, [sp, #-4]! ; Save point of interrupt
+ STMDB sp!, {r4-r12, lr} ; Save upper half of registers
+ MOV r4, r3 ; Save SPSR in r4
+ MOV r2, #IRQ_MODE ; Build IRQ mode CPSR
+ MSR CPSR_c, r2 ; Enter IRQ mode
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOV r5, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_c, r5 ; Enter SVC mode
+ STMDB sp!, {r0-r3} ; Save r0-r3 on thread's stack
+ MOV r3, #1 ; Build interrupt stack type
+ STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ STR sp, [r0, #8] ; Save stack pointer in thread control
+ ; block
+ BIC r4, r4, #THUMB_MASK ; Clear the Thumb bit of CPSR
+ ORR r3, r4, #DISABLE_INTS ; Or-in interrupt lockout bit(s)
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+;
+; /* Save the remaining time-slice and disable it. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup time-slice variable address
+ LDR r2, [r3, #0] ; Pickup time-slice
+ CMP r2, #0 ; Is it active?
+ BEQ __tx_thread_dont_save_ts ; No, don't save it
+;
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r2, [r0, #24] ; Save thread's time-slice
+ MOV r2, #0 ; Clear value
+ STR r2, [r3, #0] ; Disable global time-slice flag
+;
+; }
+__tx_thread_dont_save_ts
+;
+;
+; /* Clear the current task pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ MOV r0, #0 ; NULL value
+ STR r0, [r1, #0] ; Clear current thread pointer
+;
+; /* Return to the scheduler. */
+; _tx_thread_schedule();
+;
+ B _tx_thread_schedule ; Return to scheduler
+; }
+;
+__tx_thread_idle_system_restore
+;
+; /* Just return back to the scheduler! */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r3, r3, #MODE_MASK ; Clear the mode portion of the CPSR
+ ORR r3, r3, #SVC_MODE_BITS ; Or-in new interrupt lockout bit
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+ B _tx_thread_schedule ; Return to scheduler
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_context_save.s b/ports/arm11/iar/src/tx_thread_context_save.s
new file mode 100644
index 00000000..71d7347e
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_context_save.s
@@ -0,0 +1,222 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
+#endif
+
+
+ EXTERN _tx_thread_system_state
+ EXTERN _tx_thread_current_ptr
+ EXTERN __tx_irq_processing_return
+ EXTERN _tx_execution_isr_enter
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_context_save ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_context_save(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_context_save
+ CODE32
+_tx_thread_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, and all registers are intact. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+ STMDB sp!, {r0-r3} ; Save some working registers
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+#endif
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+;
+; /* Save the rest of the scratch registers on the stack and return to the
+; calling ISR. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+__tx_thread_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ ; scheduling loop - nothing needs saving!
+;
+; /* Save minimal context of interrupted thread. */
+;
+ MRS r2, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r2, r10, r12, lr} ; Store other registers
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+; }
+; else
+; {
+;
+__tx_thread_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; processing. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ ADD sp, sp, #16 ; Recover saved registers
+ B __tx_irq_processing_return ; Continue IRQ processing
+;
+; }
+;}
+;
+
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_fiq_context_restore.s b/ports/arm11/iar/src/tx_thread_fiq_context_restore.s
new file mode 100644
index 00000000..a8f9f0bd
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_fiq_context_restore.s
@@ -0,0 +1,269 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+SVC_MODE DEFINE 0xD3 ; SVC mode
+FIQ_MODE DEFINE 0xD1 ; FIQ mode
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
+#else
+DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
+#endif
+MODE_MASK DEFINE 0x1F ; Mode mask
+THUMB_MASK DEFINE 0x20 ; Thumb bit mask
+IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
+SVC_MODE_BITS DEFINE 0x13 ; SVC mode value
+
+;
+ EXTERN _tx_thread_system_state
+ EXTERN _tx_thread_current_ptr
+ EXTERN _tx_thread_execute_ptr
+ EXTERN _tx_timer_time_slice
+ EXTERN _tx_thread_schedule
+ EXTERN _tx_thread_preempt_disable
+ EXTERN _tx_execution_isr_exit
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_restore ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function restores the fiq interrupt context when processing a */
+;/* nested interrupt. If not, it returns to the interrupt thread if no */
+;/* preemption is necessary. Otherwise, if preemption is necessary or */
+;/* if no thread was running, the function returns to the scheduler. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling routine */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* FIQ ISR Interrupt Service Routines */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_context_restore(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_fiq_context_restore
+ CODE32
+_tx_thread_fiq_context_restore
+;
+; /* Lockout interrupts. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ ORR r0, r3, #DISABLE_INTS ; Build interrupt disable value
+ MSR CPSR_cxsf, r0 ; Lockout interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR exit function to indicate an ISR is complete. */
+;
+ BL _tx_execution_isr_exit ; Call the ISR exit function
+#endif
+;
+; /* Determine if interrupts are nested. */
+; if (--_tx_thread_system_state)
+; {
+;
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3] ; Pickup system state
+ SUB r2, r2, #1 ; Decrement the counter
+ STR r2, [r3] ; Store the counter
+ CMP r2, #0 ; Was this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_restore ; If so, not a nested restore
+;
+; /* Interrupts are nested. */
+;
+; /* Just recover the saved registers and return to the point of
+; interrupt. */
+;
+ LDMIA sp!, {r0, r10, r12, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+__tx_thread_fiq_not_nested_restore
+;
+; /* Determine if a thread was interrupted and no preemption is required. */
+; else if (((_tx_thread_current_ptr) && (_tx_thread_current_ptr == _tx_thread_execute_ptr)
+; || (_tx_thread_preempt_disable))
+; {
+;
+ LDR r1, [sp] ; Pickup the saved SPSR
+ MOV r2, #MODE_MASK ; Build mask to isolate the interrupted mode
+ AND r1, r1, r2 ; Isolate mode bits
+ CMP r1, #IRQ_MODE_BITS ; Was an interrupt taken in IRQ mode before we
+ ; got to context save? */
+ BEQ __tx_thread_fiq_no_preempt_restore ; Yes, just go back to point of interrupt
+
+
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup actual current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_restore ; Yes, idle system was interrupted
+
+ LDR r3, =_tx_thread_preempt_disable ; Pickup preempt disable address
+ LDR r2, [r3] ; Pickup actual preempt disable flag
+ CMP r2, #0 ; Is it set?
+ BNE __tx_thread_fiq_no_preempt_restore ; Yes, don't preempt this thread
+ LDR r3, =_tx_thread_execute_ptr ; Pickup address of execute thread ptr
+ LDR r2, [r3] ; Pickup actual execute thread pointer
+ CMP r0, r2 ; Is the same thread highest priority?
+ BNE __tx_thread_fiq_preempt_restore ; No, preemption needs to happen
+
+
+__tx_thread_fiq_no_preempt_restore
+;
+; /* Restore interrupted thread or ISR. */
+;
+; /* Pickup the saved stack pointer. */
+; tmp_ptr = _tx_thread_current_ptr -> tx_thread_stack_ptr;
+;
+; /* Recover the saved context and return to the point of interrupt. */
+;
+ LDMIA sp!, {r0, lr} ; Recover SPSR, POI, and scratch regs
+ MSR SPSR_cxsf, r0 ; Put SPSR back
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOVS pc, lr ; Return to point of interrupt
+;
+; }
+; else
+; {
+__tx_thread_fiq_preempt_restore
+;
+ LDMIA sp!, {r3, lr} ; Recover temporarily saved registers
+ MOV r1, lr ; Save lr (point of interrupt)
+ MOV r2, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_cxsf, r2 ; Enter SVC mode
+ STR r1, [sp, #-4]! ; Save point of interrupt
+ STMDB sp!, {r4-r12, lr} ; Save upper half of registers
+ MOV r4, r3 ; Save SPSR in r4
+ MOV r2, #FIQ_MODE ; Build FIQ mode CPSR
+ MSR CPSR_cxsf, r2 ; Re-enter FIQ mode
+ LDMIA sp!, {r0-r3} ; Recover r0-r3
+ MOV r5, #SVC_MODE ; Build SVC mode CPSR
+ MSR CPSR_cxsf, r5 ; Enter SVC mode
+ STMDB sp!, {r0-r3} ; Save r0-r3 on thread's stack
+ MOV r3, #1 ; Build interrupt stack type
+ STMDB sp!, {r3, r4} ; Save interrupt stack type and SPSR
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup current thread pointer
+ STR sp, [r0, #8] ; Save stack pointer in thread control
+ ; block */
+ BIC r4, r4, #THUMB_MASK ; Clear the Thumb bit of CPSR
+ ORR r3, r4, #DISABLE_INTS ; Or-in interrupt lockout bit(s)
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+;
+; /* Save the remaining time-slice and disable it. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup time-slice variable address
+ LDR r2, [r3] ; Pickup time-slice
+ CMP r2, #0 ; Is it active?
+ BEQ __tx_thread_fiq_dont_save_ts ; No, don't save it
+;
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r2, [r0, #24] ; Save thread's time-slice
+ MOV r2, #0 ; Clear value
+ STR r2, [r3] ; Disable global time-slice flag
+;
+; }
+__tx_thread_fiq_dont_save_ts
+;
+;
+; /* Clear the current task pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ MOV r0, #0 ; NULL value
+ STR r0, [r1] ; Clear current thread pointer
+;
+; /* Return to the scheduler. */
+; _tx_thread_schedule();
+;
+ B _tx_thread_schedule ; Return to scheduler
+; }
+;
+__tx_thread_fiq_idle_system_restore
+;
+; /* Just return back to the scheduler! */
+;
+ ADD sp, sp, #24 ; Recover FIQ stack space
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r3, r3, #MODE_MASK ; Clear the mode portion of the CPSR
+ ORR r3, r3, #SVC_MODE_BITS ; Or-in new interrupt lockout bit
+ MSR CPSR_cxsf, r3 ; Lockout interrupts
+ B _tx_thread_schedule ; Return to scheduler
+;
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_fiq_context_save.s b/ports/arm11/iar/src/tx_thread_fiq_context_save.s
new file mode 100644
index 00000000..7745f756
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_fiq_context_save.s
@@ -0,0 +1,215 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+ EXTERN _tx_thread_system_state
+ EXTERN _tx_thread_current_ptr
+ EXTERN __tx_fiq_processing_return
+ EXTERN _tx_execution_isr_enter
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_context_save ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+; VOID _tx_thread_fiq_context_save(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_fiq_context_save
+ CODE32
+_tx_thread_fiq_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, and all registers are intact. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+ STMDB sp!, {r0-r3} ; Save some working registers
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_fiq_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3] ; Store it back in the variable
+;
+; /* Save the rest of the scratch registers on the stack and return to the
+; calling ISR. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, r10, r12, lr} ; Store other registers
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+__tx_thread_fiq_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_fiq_idle_system_save ; If so, interrupt occurred in
+; ; scheduling loop - nothing needs saving!
+;
+; /* Save minimal context of interrupted thread. */
+;
+ MRS r2, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r2, lr} ; Store other registers, Note that we don't
+; ; need to save sl and ip since FIQ has
+; ; copies of these registers. Nested
+; ; interrupt processing does need to save
+; ; these registers.
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+; }
+; else
+; {
+;
+__tx_thread_fiq_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+;
+; /* Not much to do here, save the current SPSR and LR for possible
+; use in IRQ interrupted in idle system conditions, and return to
+; FIQ interrupt processing. */
+;
+ MRS r0, SPSR ; Pickup saved SPSR
+ SUB lr, lr, #4 ; Adjust point of interrupt
+ STMDB sp!, {r0, lr} ; Store other registers that will get used
+; ; or stripped off the stack in context
+; ; restore
+ B __tx_fiq_processing_return ; Continue FIQ processing
+;
+; }
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s b/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s
new file mode 100644
index 00000000..008b3b40
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_fiq_nesting_end.s
@@ -0,0 +1,121 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
+#else
+DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
+#endif
+MODE_MASK DEFINE 0x1F ; Mode mask
+FIQ_MODE_BITS DEFINE 0x11 ; FIQ mode bits
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_end ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_nesting_start has been called and switches the FIQ */
+;/* processing from system mode back to FIQ mode prior to the ISR */
+;/* calling _tx_thread_fiq_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_nesting_end(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_fiq_nesting_end
+ CODE32
+_tx_thread_fiq_nesting_end
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ LDR lr, [sp] ; Pickup saved lr
+ ADD sp, sp, #4 ; Adjust stack pointer
+ BIC r0, r0, #MODE_MASK ; Clear mode bits
+ ORR r0, r0, #FIQ_MODE_BITS ; Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 ; Re-enter IRQ mode
+ MOV pc, r3 ; Return to ISR
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s b/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s
new file mode 100644
index 00000000..f4411d08
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_fiq_nesting_start.s
@@ -0,0 +1,114 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+FIQ_DISABLE DEFINE 0x40 ; FIQ disable bit
+MODE_MASK DEFINE 0x1F ; Mode mask
+SYS_MODE_BITS DEFINE 0x1F ; System mode bits
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_fiq_nesting_start ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from FIQ mode after */
+;/* _tx_thread_fiq_context_save has been called and switches the FIQ */
+;/* processing to the system mode so nested FIQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with FIQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_fiq_nesting_start(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_fiq_nesting_start
+ CODE32
+_tx_thread_fiq_nesting_start
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ BIC r0, r0, #MODE_MASK ; Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS ; Build system mode CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ STR lr, [sp, #-4]! ; Push the system mode lr on the system mode stack
+ BIC r0, r0, #FIQ_DISABLE ; Build enable FIQ CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ MOV pc, r3 ; Return to ISR
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_control.s b/ports/arm11/iar/src/tx_thread_interrupt_control.s
new file mode 100644
index 00000000..f80e31d8
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_interrupt_control.s
@@ -0,0 +1,115 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+INT_MASK DEFINE 0xC0 ; Interrupt bit mask
+#else
+INT_MASK DEFINE 0x80 ; Interrupt bit mask
+#endif
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_control ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for changing the interrupt lockout */
+;/* posture of the system. */
+;/* */
+;/* INPUT */
+;/* */
+;/* new_posture New interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;UINT _tx_thread_interrupt_control(UINT new_posture)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_interrupt_control
+ CODE32
+_tx_thread_interrupt_control
+;
+; /* Pickup current interrupt lockout posture. */
+;
+ MRS r3, CPSR ; Pickup current CPSR
+ BIC r1, r3, #INT_MASK ; Clear interrupt lockout bits
+ ORR r1, r1, r0 ; Or-in new interrupt lockout bits
+;
+; /* Apply the new interrupt posture. */
+;
+ MSR CPSR_cxsf, r1 ; Setup new CPSR
+ AND r0, r3, #INT_MASK ; Return previous interrupt mask
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;
+;}
+;
+;
+ END
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_disable.s b/ports/arm11/iar/src/tx_thread_interrupt_disable.s
new file mode 100644
index 00000000..e3029ecb
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_interrupt_disable.s
@@ -0,0 +1,113 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
+#endif
+;
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_disable ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for disabling interrupts */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;UINT _tx_thread_interrupt_disable(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_interrupt_disable
+ CODE32
+_tx_thread_interrupt_disable??rA
+_tx_thread_interrupt_disable
+;
+; /* Pickup current interrupt lockout posture. */
+;
+ MRS r0, CPSR ; Pickup current CPSR
+;
+; /* Mask interrupts. */
+;
+ ORR r1, r0, #DISABLE_INTS ; Mask interrupts
+ MSR CPSR_cxsf, r1 ; Setup new CPSR
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;}
+;
+;
+ END
diff --git a/ports/arm11/iar/src/tx_thread_interrupt_restore.s b/ports/arm11/iar/src/tx_thread_interrupt_restore.s
new file mode 100644
index 00000000..0c0fdef0
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_interrupt_restore.s
@@ -0,0 +1,99 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_interrupt_restore ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is responsible for restoring interrupts to the state */
+;/* returned by a previous _tx_thread_interrupt_disable call. */
+;/* */
+;/* INPUT */
+;/* */
+;/* old_posture Old interrupt lockout posture */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* Application Code */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;void _tx_thread_interrupt_restore(UINT old_posture)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_interrupt_restore
+ CODE32
+_tx_thread_interrupt_restore
+;
+; /* Apply the new interrupt posture. */
+;
+ MSR CPSR_cxsf, r0 ; Setup new CPSR
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;}
+;
+ END
diff --git a/ports/arm11/iar/src/tx_thread_irq_nesting_end.s b/ports/arm11/iar/src/tx_thread_irq_nesting_end.s
new file mode 100644
index 00000000..50da22c4
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_irq_nesting_end.s
@@ -0,0 +1,122 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; Disable IRQ & FIQ interrupts
+#else
+DISABLE_INTS DEFINE 0x80 ; Disable IRQ interrupts
+#endif
+MODE_MASK DEFINE 0x1F ; Mode mask
+IRQ_MODE_BITS DEFINE 0x12 ; IRQ mode bits
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_end ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_irq_nesting_start has been called and switches the IRQ */
+;/* processing from system mode back to IRQ mode prior to the ISR */
+;/* calling _tx_thread_context_restore. Note that this function */
+;/* assumes the system stack pointer is in the same position after */
+;/* nesting start function was called. */
+;/* */
+;/* This function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts disabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_irq_nesting_end(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_irq_nesting_end
+ CODE32
+_tx_thread_irq_nesting_end
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt value
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+ LDR lr, [sp] ; Pickup saved lr
+ ADD sp, sp, #4 ; Adjust stack pointer
+ BIC r0, r0, #MODE_MASK ; Clear mode bits
+ ORR r0, r0, #IRQ_MODE_BITS ; Build IRQ mode CPSR
+ MSR CPSR_cxsf, r0 ; Re-enter IRQ mode
+ MOV pc, r3 ; Return to ISR
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_irq_nesting_start.s b/ports/arm11/iar/src/tx_thread_irq_nesting_start.s
new file mode 100644
index 00000000..eb1977cc
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_irq_nesting_start.s
@@ -0,0 +1,114 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+IRQ_DISABLE DEFINE 0x80 ; IRQ disable bit
+MODE_MASK DEFINE 0x1F ; Mode mask
+SYS_MODE_BITS DEFINE 0x1F ; System mode bits
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_irq_nesting_start ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is called by the application from IRQ mode after */
+;/* _tx_thread_context_save has been called and switches the IRQ */
+;/* processing to the system mode so nested IRQ interrupt processing */
+;/* is possible (system mode has its own "lr" register). Note that */
+;/* this function assumes that the system mode stack pointer was setup */
+;/* during low-level initialization (tx_initialize_low_level.s79). */
+;/* */
+;/* This function returns with IRQ interrupts enabled. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_irq_nesting_start(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_irq_nesting_start
+ CODE32
+_tx_thread_irq_nesting_start
+ MOV r3,lr ; Save ISR return address
+ MRS r0, CPSR ; Pickup the CPSR
+ BIC r0, r0, #MODE_MASK ; Clear the mode bits
+ ORR r0, r0, #SYS_MODE_BITS ; Build system mode CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ STR lr, [sp, #-4]! ; Push the system mode lr on the system mode stack
+ BIC r0, r0, #IRQ_DISABLE ; Build enable IRQ CPSR
+ MSR CPSR_cxsf, r0 ; Enter system mode
+ MOV pc, r3 ; Return to ISR
+;}
+;
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_schedule.s b/ports/arm11/iar/src/tx_thread_schedule.s
new file mode 100644
index 00000000..db2d2591
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_schedule.s
@@ -0,0 +1,183 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ENABLE_INTS DEFINE 0xC0 ; IRQ & FIQ Interrupts enabled mask
+#else
+ENABLE_INTS DEFINE 0x80 ; IRQ Interrupts enabled mask
+#endif
+;
+;
+ EXTERN _tx_thread_execute_ptr
+ EXTERN _tx_thread_current_ptr
+ EXTERN _tx_timer_time_slice
+ EXTERN _tx_execution_thread_enter
+;
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_schedule ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function waits for a thread control block pointer to appear in */
+;/* the _tx_thread_execute_ptr variable. Once a thread pointer appears */
+;/* in the variable, the corresponding thread is resumed. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_initialize_kernel_enter ThreadX entry function */
+;/* _tx_thread_system_return Return to system from thread */
+;/* _tx_thread_context_restore Restore thread's context */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_schedule(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_schedule
+ CODE32
+_tx_thread_schedule??rA
+_tx_thread_schedule
+;
+; /* Enable interrupts. */
+;
+ MRS r2, CPSR ; Pickup CPSR
+ BIC r0, r2, #ENABLE_INTS ; Clear the disable bit(s)
+ MSR CPSR_cxsf, r0 ; Enable interrupts
+;
+; /* Wait for a thread to execute. */
+; do
+; {
+ LDR r1, =_tx_thread_execute_ptr ; Address of thread execute ptr
+;
+__tx_thread_schedule_loop
+;
+ LDR r0, [r1, #0] ; Pickup next thread to execute
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_schedule_loop ; If so, keep looking for a thread
+;
+; }
+; while(_tx_thread_execute_ptr == TX_NULL);
+;
+; /* Yes! We have a thread to execute. Lockout interrupts and
+; transfer control to it. */
+;
+ MSR CPSR_cxsf, r2 ; Disable interrupts
+;
+; /* Setup the current thread pointer. */
+; _tx_thread_current_ptr = _tx_thread_execute_ptr;
+;
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread
+ STR r0, [r1, #0] ; Setup current thread pointer
+;
+; /* Increment the run count for this thread. */
+; _tx_thread_current_ptr -> tx_thread_run_count++;
+;
+ LDR r2, [r0, #4] ; Pickup run counter
+ LDR r3, [r0, #24] ; Pickup time-slice for this thread
+ ADD r2, r2, #1 ; Increment thread run-counter
+ STR r2, [r0, #4] ; Store the new run counter
+;
+; /* Setup time-slice, if present. */
+; _tx_timer_time_slice = _tx_thread_current_ptr -> tx_thread_time_slice;
+;
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ ; variable
+ LDR sp, [r0, #8] ; Switch stack pointers
+ STR r3, [r2, #0] ; Setup time-slice
+;
+; /* Switch to the thread's stack. */
+; sp = _tx_thread_execute_ptr -> tx_thread_stack_ptr;
+;
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the thread entry function to indicate the thread is executing. */
+;
+ BL _tx_execution_thread_enter ; Call the thread execution enter function
+#endif
+;
+; /* Determine if an interrupt frame or a synchronous task suspension frame
+; is present. */
+;
+ LDMIA sp!, {r0, r1} ; Pickup the stack type and saved CPSR
+ CMP r0, #0 ; Check for synchronous context switch
+ MSRNE SPSR_cxsf, r1 ; Setup SPSR for return
+ LDMNEIA sp!, {r0-r12, lr, pc}^ ; Return to point of thread interrupt
+ LDMIA sp!, {r4-r11, lr} ; Return to thread synchronously
+ MSR CPSR_cxsf, r1 ; Recover CPSR
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;
+;}
+;
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_stack_build.s b/ports/arm11/iar/src/tx_thread_stack_build.s
new file mode 100644
index 00000000..61b3f8a1
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_stack_build.s
@@ -0,0 +1,170 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;
+;
+SVC_MODE DEFINE 0x13 ; SVC mode
+#ifdef TX_ENABLE_FIQ_SUPPORT
+CPSR_MASK DEFINE 0xDF ; Mask initial CPSR, IRQ & FIQ ints enabled
+#else
+CPSR_MASK DEFINE 0x9F ; Mask initial CPSR, IRQ ints enabled
+#endif
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_stack_build ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function builds a stack frame on the supplied thread's stack. */
+;/* The stack frame results in a fake interrupt return to the supplied */
+;/* function pointer. */
+;/* */
+;/* INPUT */
+;/* */
+;/* thread_ptr Pointer to thread control blk */
+;/* function_ptr Pointer to return function */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* _tx_thread_create Create thread service */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_stack_build(TX_THREAD *thread_ptr, VOID (*function_ptr)(VOID))
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_stack_build
+
+ CODE32
+_tx_thread_stack_build
+;
+;
+; /* Build a fake interrupt frame. The form of the fake interrupt stack
+; on the ARM9 should look like the following after it is built:
+;
+; Stack Top: 1 Interrupt stack frame type
+; CPSR Initial value for CPSR
+; a1 (r0) Initial value for a1
+; a2 (r1) Initial value for a2
+; a3 (r2) Initial value for a3
+; a4 (r3) Initial value for a4
+; v1 (r4) Initial value for v1
+; v2 (r5) Initial value for v2
+; v3 (r6) Initial value for v3
+; v4 (r7) Initial value for v4
+; v5 (r8) Initial value for v5
+; sb (r9) Initial value for sb
+; sl (r10) Initial value for sl
+; fp (r11) Initial value for fp
+; ip (r12) Initial value for ip
+; lr (r14) Initial value for lr
+; pc (r15) Initial value for pc
+; 0 For stack backtracing
+;
+; Stack Bottom: (higher memory address) */
+;
+ LDR r2, [r0, #16] ; Pickup end of stack area
+ BIC r2, r2, #7 ; Ensure long-word alignment
+ SUB r2, r2, #76 ; Allocate space for the stack frame
+;
+; /* Actually build the stack frame. */
+;
+ MOV r3, #1 ; Build interrupt stack type
+ STR r3, [r2, #0] ; Store stack type
+ MOV r3, #0 ; Build initial register value
+ STR r3, [r2, #8] ; Store initial r0
+ STR r3, [r2, #12] ; Store initial r1
+ STR r3, [r2, #16] ; Store initial r2
+ STR r3, [r2, #20] ; Store initial r3
+ STR r3, [r2, #24] ; Store initial r4
+ STR r3, [r2, #28] ; Store initial r5
+ STR r3, [r2, #32] ; Store initial r6
+ STR r3, [r2, #36] ; Store initial r7
+ STR r3, [r2, #40] ; Store initial r8
+ STR r3, [r2, #44] ; Store initial r9
+ LDR r3, [r0, #12] ; Pickup stack starting address
+ STR r3, [r2, #48] ; Store initial r10 (sl)
+ MOV r3, #0 ; Build initial register value
+ STR r3, [r2, #52] ; Store initial r11
+ STR r3, [r2, #56] ; Store initial r12
+ STR r3, [r2, #60] ; Store initial lr
+ STR r1, [r2, #64] ; Store initial pc
+ STR r3, [r2, #68] ; 0 for back-trace
+ MRS r1, CPSR ; Pickup CPSR
+ BIC r1, r1, #CPSR_MASK ; Mask mode bits of CPSR
+ ORR r3, r1, #SVC_MODE ; Build CPSR, SVC mode, interrupts enabled
+ STR r3, [r2, #4] ; Store initial CPSR
+;
+; /* Setup stack pointer. */
+; thread_ptr -> tx_thread_stack_ptr = r2;
+;
+ STR r2, [r0, #8] ; Save stack pointer in thread's
+ ; control block
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;}
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_system_return.s b/ports/arm11/iar/src/tx_thread_system_return.s
new file mode 100644
index 00000000..0c6198af
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_system_return.s
@@ -0,0 +1,161 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
+#endif
+;
+;
+ EXTERN _tx_thread_current_ptr
+ EXTERN _tx_timer_time_slice
+ EXTERN _tx_thread_schedule
+ EXTERN _tx_execution_thread_exit
+;
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_system_return ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function is target processor specific. It is used to transfer */
+;/* control from a thread back to the ThreadX system. Only a */
+;/* minimal context is saved since the compiler assumes temp registers */
+;/* are going to get slicked by a function call anyway. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_thread_schedule Thread scheduling loop */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ThreadX components */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_system_return(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_system_return
+ CODE32
+_tx_thread_system_return??rA
+_tx_thread_system_return
+;
+; /* Save minimal context on the stack. */
+;
+ MOV r0, #0 ; Build a solicited stack type
+ MRS r1, CPSR ; Pickup the CPSR
+ STMDB sp!, {r0-r1, r4-r11, lr} ; Save minimal context
+;
+; /* Lockout interrupts. */
+;
+ ORR r2, r1, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r2 ; Disable interrupts
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the thread exit function to indicate the thread is no longer executing. */
+;
+ BL _tx_execution_thread_exit ; Call the thread exit function
+#endif
+
+ LDR r3, =_tx_thread_current_ptr ; Pickup address of current ptr
+ LDR r0, [r3, #0] ; Pickup current thread pointer
+ LDR r2, =_tx_timer_time_slice ; Pickup address of time slice
+ LDR r1, [r2, #0] ; Pickup current time slice
+;
+; /* Save current stack and switch to system stack. */
+; _tx_thread_current_ptr -> tx_thread_stack_ptr = sp;
+; sp = _tx_thread_system_stack_ptr;
+;
+ STR sp, [r0, #8] ; Save thread stack pointer
+;
+; /* Determine if the time-slice is active. */
+; if (_tx_timer_time_slice)
+; {
+;
+ MOV r4, #0 ; Build clear value
+ CMP r1, #0 ; Is a time-slice active?
+ BEQ __tx_thread_dont_save_ts ; No, don't save the time-slice
+;
+; /* Save time-slice for the thread and clear the current time-slice. */
+; _tx_thread_current_ptr -> tx_thread_time_slice = _tx_timer_time_slice;
+; _tx_timer_time_slice = 0;
+;
+ STR r4, [r2, #0] ; Clear time-slice
+ STR r1, [r0, #24] ; Save current time-slice
+;
+; }
+__tx_thread_dont_save_ts
+;
+; /* Clear the current thread pointer. */
+; _tx_thread_current_ptr = TX_NULL;
+;
+ STR r4, [r3, #0] ; Clear current thread pointer
+ B _tx_thread_schedule ; Jump to scheduler!
+;
+;}
+ END
+
diff --git a/ports/arm11/iar/src/tx_thread_vectored_context_save.s b/ports/arm11/iar/src/tx_thread_vectored_context_save.s
new file mode 100644
index 00000000..6bf9209c
--- /dev/null
+++ b/ports/arm11/iar/src/tx_thread_vectored_context_save.s
@@ -0,0 +1,207 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Thread */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_thread.h"
+;#include "tx_timer.h"
+;
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+DISABLE_INTS DEFINE 0xC0 ; IRQ & FIQ interrupts disabled
+#else
+DISABLE_INTS DEFINE 0x80 ; IRQ interrupts disabled
+#endif
+
+ EXTERN _tx_thread_system_state
+ EXTERN _tx_thread_current_ptr
+ EXTERN _tx_execution_isr_enter
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_thread_vectored_context_save ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function saves the context of an executing thread in the */
+;/* beginning of interrupt processing. The function also ensures that */
+;/* the system stack is used upon return to the calling ISR. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* None */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* ISRs */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_thread_vectored_context_save(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_thread_vectored_context_save
+ CODE32
+_tx_thread_vectored_context_save
+;
+; /* Upon entry to this routine, it is assumed that IRQ interrupts are locked
+; out, we are in IRQ mode, the minimal context is already saved, and the
+; lr register contains the return ISR address. */
+;
+; /* Check for a nested interrupt condition. */
+; if (_tx_thread_system_state++)
+; {
+;
+#ifdef TX_ENABLE_FIQ_SUPPORT
+ MRS r0, CPSR ; Pickup the CPSR
+ ORR r0, r0, #DISABLE_INTS ; Build disable interrupt CPSR
+ MSR CPSR_cxsf, r0 ; Disable interrupts
+#endif
+ LDR r3, =_tx_thread_system_state ; Pickup address of system state var
+ LDR r2, [r3, #0] ; Pickup system state
+ CMP r2, #0 ; Is this the first interrupt?
+ BEQ __tx_thread_not_nested_save ; Yes, not a nested context save
+;
+; /* Nested interrupt condition. */
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+;
+; /* Note: Minimal context of interrupted thread is already saved. */
+;
+; /* Return to the ISR. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ MOV pc, lr ; Return to caller
+;
+__tx_thread_not_nested_save
+; }
+;
+; /* Otherwise, not nested, check to see if a thread was running. */
+; else if (_tx_thread_current_ptr)
+; {
+;
+ ADD r2, r2, #1 ; Increment the interrupt counter
+ STR r2, [r3, #0] ; Store it back in the variable
+ LDR r1, =_tx_thread_current_ptr ; Pickup address of current thread ptr
+ LDR r0, [r1, #0] ; Pickup current thread pointer
+ CMP r0, #0 ; Is it NULL?
+ BEQ __tx_thread_idle_system_save ; If so, interrupt occured in
+ ; scheduling loop - nothing needs saving!
+;
+; /* Note: Minimal context of interrupted thread is already saved. */
+;
+; /* Save the current stack pointer in the thread's control block. */
+; _tx_thread_current_ptr -> tx_stack_ptr = sp;
+;
+; /* Switch to the system stack. */
+; sp = _tx_thread_system_stack_ptr;
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ MOV pc, lr ; Return to caller
+;
+; }
+; else
+; {
+;
+__tx_thread_idle_system_save
+;
+; /* Interrupt occurred in the scheduling loop. */
+;
+; /* Not much to do here, just adjust the stack pointer, and return to IRQ
+; processing. */
+;
+ MOV r10, #0 ; Clear stack limit
+
+#ifdef TX_ENABLE_EXECUTION_CHANGE_NOTIFY
+;
+; /* Call the ISR enter function to indicate an ISR is executing. */
+;
+ PUSH {lr} ; Save ISR lr
+ BL _tx_execution_isr_enter ; Call the ISR enter function
+ POP {lr} ; Recover ISR lr
+#endif
+
+ ADD sp, sp, #32 ; Recover saved registers
+ MOV pc, lr ; Return to caller
+;
+; }
+;}
+ END
+
diff --git a/ports/arm11/iar/src/tx_timer_interrupt.s b/ports/arm11/iar/src/tx_timer_interrupt.s
new file mode 100644
index 00000000..7bb4f09f
--- /dev/null
+++ b/ports/arm11/iar/src/tx_timer_interrupt.s
@@ -0,0 +1,272 @@
+;/**************************************************************************/
+;/* */
+;/* Copyright (c) 1996-2018 by Express Logic Inc. */
+;/* */
+;/* This software is copyrighted by and is the sole property of Express */
+;/* Logic, Inc. All rights, title, ownership, or other interests */
+;/* in the software remain the property of Express Logic, Inc. This */
+;/* software may only be used in accordance with the corresponding */
+;/* license agreement. Any unauthorized use, duplication, transmission, */
+;/* distribution, or disclosure of this software is expressly forbidden. */
+;/* */
+;/* This Copyright notice may not be removed or modified without prior */
+;/* written consent of Express Logic, Inc. */
+;/* */
+;/* Express Logic, Inc. reserves the right to modify this software */
+;/* without notice. */
+;/* */
+;/* Express Logic, Inc. [email protected] */
+;/* 11423 West Bernardo Court http://www.expresslogic.com */
+;/* San Diego, CA 92127 */
+;/* */
+;/**************************************************************************/
+;
+;
+;/**************************************************************************/
+;/**************************************************************************/
+;/** */
+;/** ThreadX Component */
+;/** */
+;/** Timer */
+;/** */
+;/**************************************************************************/
+;/**************************************************************************/
+;
+;#define TX_SOURCE_CODE
+;
+;
+;/* Include necessary system files. */
+;
+;#include "tx_api.h"
+;#include "tx_timer.h"
+;#include "tx_thread.h"
+;
+;
+;Define Assembly language external references...
+;
+ EXTERN _tx_timer_time_slice
+ EXTERN _tx_timer_system_clock
+ EXTERN _tx_timer_current_ptr
+ EXTERN _tx_timer_list_start
+ EXTERN _tx_timer_list_end
+ EXTERN _tx_timer_expired_time_slice
+ EXTERN _tx_timer_expired
+ EXTERN _tx_thread_time_slice
+ EXTERN _tx_timer_expiration_process
+;
+;
+;
+;/**************************************************************************/
+;/* */
+;/* FUNCTION RELEASE */
+;/* */
+;/* _tx_timer_interrupt ARM11/IAR */
+;/* 6.0.1 */
+;/* AUTHOR */
+;/* */
+;/* William E. Lamie, Express Logic, Inc. */
+;/* */
+;/* DESCRIPTION */
+;/* */
+;/* This function processes the hardware timer interrupt. This */
+;/* processing includes incrementing the system clock and checking for */
+;/* time slice and/or timer expiration. If either is found, the */
+;/* interrupt context save/restore functions are called along with the */
+;/* expiration functions. */
+;/* */
+;/* INPUT */
+;/* */
+;/* None */
+;/* */
+;/* OUTPUT */
+;/* */
+;/* None */
+;/* */
+;/* CALLS */
+;/* */
+;/* _tx_timer_expiration_process Timer expiration processing */
+;/* _tx_thread_time_slice Time-slice interrupted thread */
+;/* */
+;/* CALLED BY */
+;/* */
+;/* interrupt vector */
+;/* */
+;/* RELEASE HISTORY */
+;/* */
+;/* DATE NAME DESCRIPTION */
+;/* */
+;/* 06-30-2020 William E. Lamie Initial Version 6.0.1 */
+;/* */
+;/**************************************************************************/
+;VOID _tx_timer_interrupt(VOID)
+;{
+ RSEG .text:CODE:NOROOT(2)
+ PUBLIC _tx_timer_interrupt
+ CODE32
+_tx_timer_interrupt
+;
+; /* Upon entry to this routine, it is assumed that context save has already
+; been called, and therefore the compiler scratch registers are available
+; for use. */
+;
+; /* Increment the system clock. */
+; _tx_timer_system_clock++;
+;
+ LDR r1, =_tx_timer_system_clock ; Pickup address of system clock
+ LDR r0, [r1, #0] ; Pickup system clock
+ ADD r0, r0, #1 ; Increment system clock
+ STR r0, [r1, #0] ; Store new system clock
+;
+; /* Test for time-slice expiration. */
+; if (_tx_timer_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_time_slice ; Pickup address of time-slice
+ LDR r2, [r3, #0] ; Pickup time-slice
+ CMP r2, #0 ; Is it non-active?
+ BEQ __tx_timer_no_time_slice ; Yes, skip time-slice processing
+;
+; /* Decrement the time_slice. */
+; _tx_timer_time_slice--;
+;
+ SUB r2, r2, #1 ; Decrement the time-slice
+ STR r2, [r3, #0] ; Store new time-slice value
+;
+; /* Check for expiration. */
+; if (__tx_timer_time_slice == 0)
+;
+ CMP r2, #0 ; Has it expired?
+ BNE __tx_timer_no_time_slice ; No, skip expiration processing
+;
+; /* Set the time-slice expired flag. */
+; _tx_timer_expired_time_slice = TX_TRUE;
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup address of expired flag
+ MOV r0, #1 ; Build expired value
+ STR r0, [r3, #0] ; Set time-slice expiration flag
+;
+; }
+;
+__tx_timer_no_time_slice
+;
+; /* Test for timer expiration. */
+; if (*_tx_timer_current_ptr)
+; {
+;
+ LDR r1, =_tx_timer_current_ptr ; Pickup current timer pointer addr
+ LDR r0, [r1, #0] ; Pickup current timer
+ LDR r2, [r0, #0] ; Pickup timer list entry
+ CMP r2, #0 ; Is there anything in the list?
+ BEQ __tx_timer_no_timer ; No, just increment the timer
+;
+; /* Set expiration flag. */
+; _tx_timer_expired = TX_TRUE;
+;
+ LDR r3, =_tx_timer_expired ; Pickup expiration flag address
+ MOV r2, #1 ; Build expired value
+ STR r2, [r3, #0] ; Set expired flag
+ B __tx_timer_done ; Finished timer processing
+;
+; }
+; else
+; {
+__tx_timer_no_timer
+;
+; /* No timer expired, increment the timer pointer. */
+; _tx_timer_current_ptr++;
+;
+ ADD r0, r0, #4 ; Move to next timer
+;
+; /* Check for wrap-around. */
+; if (_tx_timer_current_ptr == _tx_timer_list_end)
+;
+ LDR r3, =_tx_timer_list_end ; Pickup addr of timer list end
+ LDR r2, [r3, #0] ; Pickup list end
+ CMP r0, r2 ; Are we at list end?
+ BNE __tx_timer_skip_wrap ; No, skip wrap-around logic
+;
+; /* Wrap to beginning of list. */
+; _tx_timer_current_ptr = _tx_timer_list_start;
+;
+ LDR r3, =_tx_timer_list_start ; Pickup addr of timer list start
+ LDR r0, [r3, #0] ; Set current pointer to list start
+;
+__tx_timer_skip_wrap
+;
+ STR r0, [r1, #0] ; Store new current timer pointer
+; }
+;
+__tx_timer_done
+;
+;
+; /* See if anything has expired. */
+; if ((_tx_timer_expired_time_slice) || (_tx_timer_expired))
+; {
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of expired flag
+ LDR r2, [r3, #0] ; Pickup time-slice expired flag
+ CMP r2, #0 ; Did a time-slice expire?
+ BNE __tx_something_expired ; If non-zero, time-slice expired
+ LDR r1, =_tx_timer_expired ; Pickup addr of other expired flag
+ LDR r0, [r1, #0] ; Pickup timer expired flag
+ CMP r0, #0 ; Did a timer expire?
+ BEQ __tx_timer_nothing_expired ; No, nothing expired
+;
+__tx_something_expired
+;
+;
+ STMDB sp!, {r0, lr} ; Save the lr register on the stack
+ ; and save r0 just to keep 8-byte alignment
+;
+; /* Did a timer expire? */
+; if (_tx_timer_expired)
+; {
+;
+ LDR r1, =_tx_timer_expired ; Pickup addr of expired flag
+ LDR r0, [r1, #0] ; Pickup timer expired flag
+ CMP r0, #0 ; Check for timer expiration
+ BEQ __tx_timer_dont_activate ; If not set, skip timer activation
+;
+; /* Process timer expiration. */
+; _tx_timer_expiration_process();
+;
+ BL _tx_timer_expiration_process ; Call the timer expiration handling routine
+;
+; }
+__tx_timer_dont_activate
+;
+; /* Did time slice expire? */
+; if (_tx_timer_expired_time_slice)
+; {
+;
+ LDR r3, =_tx_timer_expired_time_slice ; Pickup addr of time-slice expired
+ LDR r2, [r3, #0] ; Pickup the actual flag
+ CMP r2, #0 ; See if the flag is set
+ BEQ __tx_timer_not_ts_expiration ; No, skip time-slice processing
+;
+; /* Time slice interrupted thread. */
+; _tx_thread_time_slice();
+
+ BL _tx_thread_time_slice ; Call time-slice processing
+;
+; }
+;
+__tx_timer_not_ts_expiration
+;
+;
+ LDMIA sp!, {r0, lr} ; Recover lr register (r0 is just there for
+ ; the 8-byte stack alignment
+;
+; }
+;
+__tx_timer_nothing_expired
+;
+#ifdef TX_THUMB
+ BX lr ; Return to caller
+#else
+ MOV pc, lr ; Return to caller
+#endif
+;
+;}
+ END
+