diff options
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 Binary files differnew file mode 100644 index 00000000..b03b1626 --- /dev/null +++ b/ports/arm11/gnu/example_build/libc.a diff --git a/ports/arm11/gnu/example_build/libgcc.a b/ports/arm11/gnu/example_build/libgcc.a Binary files differnew file mode 100644 index 00000000..da2319e0 --- /dev/null +++ b/ports/arm11/gnu/example_build/libgcc.a diff --git a/ports/arm11/gnu/example_build/libnosys.a b/ports/arm11/gnu/example_build/libnosys.a Binary files differnew file mode 100644 index 00000000..b70de481 --- /dev/null +++ b/ports/arm11/gnu/example_build/libnosys.a 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><ws></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><Right-click on a symbol in the editor to show a call graph></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><ws></ExpandedNode> + <ExpandedNode><ws>/sample_threadx</ExpandedNode> + <ExpandedNode><ws>/sample_threadx/Common sources</ExpandedNode> + <ExpandedNode><ws>/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 + |
