1/**************************************************************************/ 2/* */ 3/* Copyright (c) Microsoft Corporation. All rights reserved. */ 4/* */ 5/* This software is licensed under the Microsoft Software License */ 6/* Terms for Microsoft Azure RTOS. Full text of the license can be */ 7/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */ 8/* and in the root directory of this software. */ 9/* */ 10/**************************************************************************/ 11 12 13/**************************************************************************/ 14/**************************************************************************/ 15/** */ 16/** ThreadX Component */ 17/** */ 18/** ThreadX MISRA Compliance */ 19/** */ 20/**************************************************************************/ 21/**************************************************************************/ 22 23#ifdef TX_INCLUDE_USER_DEFINE_FILE 24#include "tx_user.h" 25#endif 26 27 #define SHT_PROGBITS 0x1 28 29 .global __aeabi_memset 30 .global _tx_thread_current_ptr 31 .global _tx_thread_interrupt_disable 32 .global _tx_thread_interrupt_restore 33 .global _tx_thread_stack_analyze 34 .global _tx_thread_stack_error_handler 35 .global _tx_thread_system_state 36#ifdef TX_ENABLE_EVENT_TRACE 37 .global _tx_trace_buffer_current_ptr 38 .global _tx_trace_buffer_end_ptr 39 .global _tx_trace_buffer_start_ptr 40 .global _tx_trace_event_enable_bits 41 .global _tx_trace_full_notify_function 42 .global _tx_trace_header_ptr 43#endif 44 45 .global _tx_misra_always_true 46 .global _tx_misra_block_pool_to_uchar_pointer_convert 47 .global _tx_misra_byte_pool_to_uchar_pointer_convert 48 .global _tx_misra_char_to_uchar_pointer_convert 49 .global _tx_misra_const_char_to_char_pointer_convert 50#ifdef TX_ENABLE_EVENT_TRACE 51 .global _tx_misra_entry_to_uchar_pointer_convert 52#endif 53 .global _tx_misra_indirect_void_to_uchar_pointer_convert 54 .global _tx_misra_memset 55 .global _tx_misra_message_copy 56#ifdef TX_ENABLE_EVENT_TRACE 57 .global _tx_misra_object_to_uchar_pointer_convert 58#endif 59 .global _tx_misra_pointer_to_ulong_convert 60 .global _tx_misra_status_get 61 .global _tx_misra_thread_stack_check 62#ifdef TX_ENABLE_EVENT_TRACE 63 .global _tx_misra_time_stamp_get 64#endif 65 .global _tx_misra_timer_indirect_to_void_pointer_convert 66 .global _tx_misra_timer_pointer_add 67 .global _tx_misra_timer_pointer_dif 68#ifdef TX_ENABLE_EVENT_TRACE 69 .global _tx_misra_trace_event_insert 70#endif 71 .global _tx_misra_uchar_pointer_add 72 .global _tx_misra_uchar_pointer_dif 73 .global _tx_misra_uchar_pointer_sub 74 .global _tx_misra_uchar_to_align_type_pointer_convert 75 .global _tx_misra_uchar_to_block_pool_pointer_convert 76#ifdef TX_ENABLE_EVENT_TRACE 77 .global _tx_misra_uchar_to_entry_pointer_convert 78 .global _tx_misra_uchar_to_header_pointer_convert 79#endif 80 .global _tx_misra_uchar_to_indirect_byte_pool_pointer_convert 81 .global _tx_misra_uchar_to_indirect_uchar_pointer_convert 82#ifdef TX_ENABLE_EVENT_TRACE 83 .global _tx_misra_uchar_to_object_pointer_convert 84#endif 85 .global _tx_misra_uchar_to_void_pointer_convert 86 .global _tx_misra_ulong_pointer_add 87 .global _tx_misra_ulong_pointer_dif 88 .global _tx_misra_ulong_pointer_sub 89 .global _tx_misra_ulong_to_pointer_convert 90 .global _tx_misra_ulong_to_thread_pointer_convert 91 .global _tx_misra_user_timer_pointer_get 92 .global _tx_misra_void_to_block_pool_pointer_convert 93 .global _tx_misra_void_to_byte_pool_pointer_convert 94 .global _tx_misra_void_to_event_flags_pointer_convert 95 .global _tx_misra_void_to_indirect_uchar_pointer_convert 96 .global _tx_misra_void_to_mutex_pointer_convert 97 .global _tx_misra_void_to_queue_pointer_convert 98 .global _tx_misra_void_to_semaphore_pointer_convert 99 .global _tx_misra_void_to_thread_pointer_convert 100 .global _tx_misra_void_to_uchar_pointer_convert 101 .global _tx_misra_void_to_ulong_pointer_convert 102 .global _tx_misra_ipsr_get 103 .global _tx_misra_control_get 104 .global _tx_misra_control_set 105#ifdef __ARM_FP 106 .global _tx_misra_fpccr_get 107 .global _tx_misra_vfp_touch 108#endif 109 110 .global _tx_misra_event_flags_group_not_used 111 .global _tx_misra_event_flags_set_notify_not_used 112 .global _tx_misra_queue_not_used 113 .global _tx_misra_queue_send_notify_not_used 114 .global _tx_misra_semaphore_not_used 115 .global _tx_misra_semaphore_put_notify_not_used 116 .global _tx_misra_thread_entry_exit_notify_not_used 117 .global _tx_misra_thread_not_used 118 119/**************************************************************************/ 120/**************************************************************************/ 121/** */ 122/** VOID _tx_misra_memset(VOID *ptr, UINT value, UINT size); */ 123/** */ 124/**************************************************************************/ 125/**************************************************************************/ 126 127 .text 128 .align 4 129 .syntax unified 130 .thumb_func 131_tx_misra_memset: 132 PUSH {R4,LR} 133 MOVS R4,R0 134 MOVS R0,R2 135 MOVS R2,R1 136 MOVS R1,R0 137 MOVS R0,R4 138 BL __aeabi_memset 139 POP {R4,PC} // return 140 141/**************************************************************************/ 142/**************************************************************************/ 143/** */ 144/** UCHAR *_tx_misra_uchar_pointer_add(UCHAR *ptr, ULONG amount); */ 145/** */ 146/**************************************************************************/ 147/**************************************************************************/ 148 149 .text 150 .thumb_func 151_tx_misra_uchar_pointer_add: 152 ADD R0,R0,R1 153 BX LR // return 154 155 156/**************************************************************************/ 157/**************************************************************************/ 158/** */ 159/** UCHAR *_tx_misra_uchar_pointer_sub(UCHAR *ptr, ULONG amount); */ 160/** */ 161/**************************************************************************/ 162/**************************************************************************/ 163 164 .text 165 .thumb_func 166_tx_misra_uchar_pointer_sub: 167 RSBS R1,R1,#+0 168 ADD R0,R0,R1 169 BX LR // return 170 171 172/**************************************************************************/ 173/**************************************************************************/ 174/** */ 175/** ULONG _tx_misra_uchar_pointer_dif(UCHAR *ptr1, UCHAR *ptr2); */ 176/** */ 177/**************************************************************************/ 178/**************************************************************************/ 179 180 .text 181 .thumb_func 182_tx_misra_uchar_pointer_dif: 183 SUBS R0,R0,R1 184 BX LR // return 185 186 187/************************************************************************************************************************************/ 188/************************************************************************************************************************************/ 189/** */ 190/** This single function serves all of the below prototypes. */ 191/** */ 192/** ULONG _tx_misra_pointer_to_ulong_convert(VOID *ptr); */ 193/** VOID *_tx_misra_ulong_to_pointer_convert(ULONG input); */ 194/** UCHAR **_tx_misra_indirect_void_to_uchar_pointer_convert(VOID **return_ptr); */ 195/** UCHAR **_tx_misra_uchar_to_indirect_uchar_pointer_convert(UCHAR *pointer); */ 196/** UCHAR *_tx_misra_block_pool_to_uchar_pointer_convert(TX_BLOCK_POOL *pool); */ 197/** TX_BLOCK_POOL *_tx_misra_void_to_block_pool_pointer_convert(VOID *pointer); */ 198/** UCHAR *_tx_misra_void_to_uchar_pointer_convert(VOID *pointer); */ 199/** TX_BLOCK_POOL *_tx_misra_uchar_to_block_pool_pointer_convert(UCHAR *pointer); */ 200/** UCHAR **_tx_misra_void_to_indirect_uchar_pointer_convert(VOID *pointer); */ 201/** TX_BYTE_POOL *_tx_misra_void_to_byte_pool_pointer_convert(VOID *pointer); */ 202/** UCHAR *_tx_misra_byte_pool_to_uchar_pointer_convert(TX_BYTE_POOL *pool); */ 203/** ALIGN_TYPE *_tx_misra_uchar_to_align_type_pointer_convert(UCHAR *pointer); */ 204/** TX_BYTE_POOL **_tx_misra_uchar_to_indirect_byte_pool_pointer_convert(UCHAR *pointer); */ 205/** TX_EVENT_FLAGS_GROUP *_tx_misra_void_to_event_flags_pointer_convert(VOID *pointer); */ 206/** ULONG *_tx_misra_void_to_ulong_pointer_convert(VOID *pointer); */ 207/** TX_MUTEX *_tx_misra_void_to_mutex_pointer_convert(VOID *pointer); */ 208/** TX_QUEUE *_tx_misra_void_to_queue_pointer_convert(VOID *pointer); */ 209/** TX_SEMAPHORE *_tx_misra_void_to_semaphore_pointer_convert(VOID *pointer); */ 210/** VOID *_tx_misra_uchar_to_void_pointer_convert(UCHAR *pointer); */ 211/** TX_THREAD *_tx_misra_ulong_to_thread_pointer_convert(ULONG value); */ 212/** VOID *_tx_misra_timer_indirect_to_void_pointer_convert(TX_TIMER_INTERNAL **pointer); */ 213/** CHAR *_tx_misra_const_char_to_char_pointer_convert(const char *pointer); */ 214/** TX_THREAD *_tx_misra_void_to_thread_pointer_convert(void *pointer); */ 215/** UCHAR *_tx_misra_object_to_uchar_pointer_convert(TX_TRACE_OBJECT_ENTRY *pointer); */ 216/** TX_TRACE_OBJECT_ENTRY *_tx_misra_uchar_to_object_pointer_convert(UCHAR *pointer); */ 217/** TX_TRACE_HEADER *_tx_misra_uchar_to_header_pointer_convert(UCHAR *pointer); */ 218/** TX_TRACE_BUFFER_ENTRY *_tx_misra_uchar_to_entry_pointer_convert(UCHAR *pointer); */ 219/** UCHAR *_tx_misra_entry_to_uchar_pointer_convert(TX_TRACE_BUFFER_ENTRY *pointer); */ 220/** UCHAR *_tx_misra_char_to_uchar_pointer_convert(CHAR *pointer); */ 221/** VOID _tx_misra_event_flags_group_not_used(TX_EVENT_FLAGS_GROUP *group_ptr); */ 222/** VOID _tx_misra_event_flags_set_notify_not_used(VOID (*events_set_notify)(TX_EVENT_FLAGS_GROUP *notify_group_ptr)); */ 223/** VOID _tx_misra_queue_not_used(TX_QUEUE *queue_ptr); */ 224/** VOID _tx_misra_queue_send_notify_not_used(VOID (*queue_send_notify)(TX_QUEUE *notify_queue_ptr)); */ 225/** VOID _tx_misra_semaphore_not_used(TX_SEMAPHORE *semaphore_ptr); */ 226/** VOID _tx_misra_semaphore_put_notify_not_used(VOID (*semaphore_put_notify)(TX_SEMAPHORE *notify_semaphore_ptr)); */ 227/** VOID _tx_misra_thread_not_used(TX_THREAD *thread_ptr); */ 228/** VOID _tx_misra_thread_entry_exit_notify_not_used(VOID (*thread_entry_exit_notify)(TX_THREAD *notify_thread_ptr, UINT id)); */ 229/** */ 230/************************************************************************************************************************************/ 231/************************************************************************************************************************************/ 232 .text 233 .thumb_func 234_tx_misra_pointer_to_ulong_convert: 235_tx_misra_ulong_to_pointer_convert: 236_tx_misra_indirect_void_to_uchar_pointer_convert: 237_tx_misra_uchar_to_indirect_uchar_pointer_convert: 238_tx_misra_block_pool_to_uchar_pointer_convert: 239_tx_misra_void_to_block_pool_pointer_convert: 240_tx_misra_void_to_uchar_pointer_convert: 241_tx_misra_uchar_to_block_pool_pointer_convert: 242_tx_misra_void_to_indirect_uchar_pointer_convert: 243_tx_misra_void_to_byte_pool_pointer_convert: 244_tx_misra_byte_pool_to_uchar_pointer_convert: 245_tx_misra_uchar_to_align_type_pointer_convert: 246_tx_misra_uchar_to_indirect_byte_pool_pointer_convert: 247_tx_misra_void_to_event_flags_pointer_convert: 248_tx_misra_void_to_ulong_pointer_convert: 249_tx_misra_void_to_mutex_pointer_convert: 250_tx_misra_void_to_queue_pointer_convert: 251_tx_misra_void_to_semaphore_pointer_convert: 252_tx_misra_uchar_to_void_pointer_convert: 253_tx_misra_ulong_to_thread_pointer_convert: 254_tx_misra_timer_indirect_to_void_pointer_convert: 255_tx_misra_const_char_to_char_pointer_convert: 256_tx_misra_void_to_thread_pointer_convert: 257#ifdef TX_ENABLE_EVENT_TRACE 258_tx_misra_object_to_uchar_pointer_convert: 259_tx_misra_uchar_to_object_pointer_convert: 260_tx_misra_uchar_to_header_pointer_convert: 261_tx_misra_uchar_to_entry_pointer_convert: 262_tx_misra_entry_to_uchar_pointer_convert: 263#endif 264_tx_misra_char_to_uchar_pointer_convert: 265_tx_misra_event_flags_group_not_used: 266_tx_misra_event_flags_set_notify_not_used: 267_tx_misra_queue_not_used: 268_tx_misra_queue_send_notify_not_used: 269_tx_misra_semaphore_not_used: 270_tx_misra_semaphore_put_notify_not_used: 271_tx_misra_thread_entry_exit_notify_not_used: 272_tx_misra_thread_not_used: 273 274 BX LR // return 275 276 277/**************************************************************************/ 278/**************************************************************************/ 279/** */ 280/** ULONG *_tx_misra_ulong_pointer_add(ULONG *ptr, ULONG amount); */ 281/** */ 282/**************************************************************************/ 283/**************************************************************************/ 284 285 .text 286 .thumb_func 287_tx_misra_ulong_pointer_add: 288 ADD R0,R0,R1, LSL #+2 289 BX LR // return 290 291 292/**************************************************************************/ 293/**************************************************************************/ 294/** */ 295/** ULONG *_tx_misra_ulong_pointer_sub(ULONG *ptr, ULONG amount); */ 296/** */ 297/**************************************************************************/ 298/**************************************************************************/ 299 300 .text 301 .thumb_func 302_tx_misra_ulong_pointer_sub: 303 MVNS R2,#+3 304 MULS R1,R2,R1 305 ADD R0,R0,R1 306 BX LR // return 307 308 309/**************************************************************************/ 310/**************************************************************************/ 311/** */ 312/** ULONG _tx_misra_ulong_pointer_dif(ULONG *ptr1, ULONG *ptr2); */ 313/** */ 314/**************************************************************************/ 315/**************************************************************************/ 316 317 .text 318 .thumb_func 319_tx_misra_ulong_pointer_dif: 320 SUBS R0,R0,R1 321 ASRS R0,R0,#+2 322 BX LR // return 323 324 325/**************************************************************************/ 326/**************************************************************************/ 327/** */ 328/** VOID _tx_misra_message_copy(ULONG **source, ULONG **destination, */ 329/** UINT size); */ 330/** */ 331/**************************************************************************/ 332/**************************************************************************/ 333 334 .text 335 .thumb_func 336_tx_misra_message_copy: 337 PUSH {R4,R5} 338 LDR R3,[R0, #+0] 339 LDR R4,[R1, #+0] 340 LDR R5,[R3, #+0] 341 STR R5,[R4, #+0] 342 ADDS R4,R4,#+4 343 ADDS R3,R3,#+4 344 CMP R2,#+2 345 BCC.N _tx_misra_message_copy_0 346 SUBS R2,R2,#+1 347 B.N _tx_misra_message_copy_1 348_tx_misra_message_copy_2: 349 LDR R5,[R3, #+0] 350 STR R5,[R4, #+0] 351 ADDS R4,R4,#+4 352 ADDS R3,R3,#+4 353 SUBS R2,R2,#+1 354_tx_misra_message_copy_1: 355 CMP R2,#+0 356 BNE.N _tx_misra_message_copy_2 357_tx_misra_message_copy_0: 358 STR R3,[R0, #+0] 359 STR R4,[R1, #+0] 360 POP {R4,R5} 361 BX LR // return 362 363 364/**************************************************************************/ 365/**************************************************************************/ 366/** */ 367/** ULONG _tx_misra_timer_pointer_dif(TX_TIMER_INTERNAL **ptr1, */ 368/** TX_TIMER_INTERNAL **ptr2); */ 369/** */ 370/**************************************************************************/ 371/**************************************************************************/ 372 373 .text 374 .thumb_func 375_tx_misra_timer_pointer_dif: 376 SUBS R0,R0,R1 377 ASRS R0,R0,#+2 378 BX LR // return 379 380 381/**************************************************************************/ 382/**************************************************************************/ 383/** */ 384/** TX_TIMER_INTERNAL **_tx_misra_timer_pointer_add(TX_TIMER_INTERNAL */ 385/** **ptr1, ULONG size); */ 386/** */ 387/**************************************************************************/ 388/**************************************************************************/ 389 390 .text 391 .thumb_func 392_tx_misra_timer_pointer_add: 393 ADD R0,R0,R1, LSL #+2 394 BX LR // return 395 396 397/**************************************************************************/ 398/**************************************************************************/ 399/** */ 400/** VOID _tx_misra_user_timer_pointer_get(TX_TIMER_INTERNAL */ 401/** *internal_timer, TX_TIMER **user_timer); */ 402/** */ 403/**************************************************************************/ 404/**************************************************************************/ 405 406 .text 407 .thumb_func 408_tx_misra_user_timer_pointer_get: 409 SUBS R0,#8 410 STR R0,[R1, #+0] 411 BX LR // return 412 413 414/**************************************************************************/ 415/**************************************************************************/ 416/** */ 417/** VOID _tx_misra_thread_stack_check(TX_THREAD *thread_ptr, */ 418/** VOID **highest_stack); */ 419/** */ 420/**************************************************************************/ 421/**************************************************************************/ 422 423 .text 424 .thumb_func 425_tx_misra_thread_stack_check: 426 PUSH {R3-R5,LR} 427 MOVS R4,R0 428 MOVS R5,R1 429 BL _tx_thread_interrupt_disable 430 CMP R4,#+0 431 BEQ.N _tx_misra_thread_stack_check_0 432 LDR R1,[R4, #+0] 433 LDR R2,=0x54485244 434 CMP R1,R2 435 BNE.N _tx_misra_thread_stack_check_0 436 LDR R1,[R4, #+8] 437 LDR R2,[R5, #+0] 438 CMP R1,R2 439 BCS.N _tx_misra_thread_stack_check_1 440 LDR R1,[R4, #+8] 441 STR R1,[R5, #+0] 442_tx_misra_thread_stack_check_1: 443 LDR R1,[R4, #+12] 444 LDR R1,[R1, #+0] 445 CMP R1,#-269488145 446 BNE.N _tx_misra_thread_stack_check_2 447 LDR R1,[R4, #+16] 448 LDR R1,[R1, #+1] 449 CMP R1,#-269488145 450 BNE.N _tx_misra_thread_stack_check_2 451 LDR R1,[R5, #+0] 452 LDR R2,[R4, #+12] 453 CMP R1,R2 454 BCS.N _tx_misra_thread_stack_check_3 455_tx_misra_thread_stack_check_2: 456 BL _tx_thread_interrupt_restore 457 MOVS R0,R4 458 BL _tx_thread_stack_error_handler 459 BL _tx_thread_interrupt_disable 460_tx_misra_thread_stack_check_3: 461 LDR R1,[R5, #+0] 462 LDR R1,[R1, #-4] 463 CMP R1,#-269488145 464 BEQ.N _tx_misra_thread_stack_check_0 465 BL _tx_thread_interrupt_restore 466 MOVS R0,R4 467 BL _tx_thread_stack_analyze 468 BL _tx_thread_interrupt_disable 469_tx_misra_thread_stack_check_0: 470 BL _tx_thread_interrupt_restore 471 POP {R0,R4,R5,PC} // return 472 473#ifdef TX_ENABLE_EVENT_TRACE 474 475/**************************************************************************/ 476/**************************************************************************/ 477/** */ 478/** VOID _tx_misra_trace_event_insert(ULONG event_id, */ 479/** VOID *info_field_1, ULONG info_field_2, ULONG info_field_3, */ 480/** ULONG info_field_4, ULONG filter, ULONG time_stamp); */ 481/** */ 482/**************************************************************************/ 483/**************************************************************************/ 484 485 .text 486 .thumb_func 487_tx_misra_trace_event_insert: 488 PUSH {R3-R7,LR} 489 LDR.N R4,DataTable2_1 490 LDR R4,[R4, #+0] 491 CMP R4,#+0 492 BEQ.N _tx_misra_trace_event_insert_0 493 LDR.N R5,DataTable2_2 494 LDR R5,[R5, #+0] 495 LDR R6,[SP, #+28] 496 TST R5,R6 497 BEQ.N _tx_misra_trace_event_insert_0 498 LDR.N R5,DataTable2_3 499 LDR R5,[R5, #+0] 500 LDR.N R6,DataTable2_4 501 LDR R6,[R6, #+0] 502 CMP R5,#+0 503 BNE.N _tx_misra_trace_event_insert_1 504 LDR R5,[R6, #+44] 505 LDR R7,[R6, #+60] 506 LSLS R7,R7,#+16 507 ORRS R7,R7,#0x80000000 508 ORRS R5,R7,R5 509 B.N _tx_misra_trace_event_insert_2 510_tx_misra_trace_event_insert_1: 511 CMP R5,#-252645136 512 BCS.N _tx_misra_trace_event_insert_3 513 MOVS R5,R6 514 MOVS R6,#-1 515 B.N _tx_misra_trace_event_insert_2 516_tx_misra_trace_event_insert_3: 517 MOVS R6,#-252645136 518 MOVS R5,#+0 519_tx_misra_trace_event_insert_2: 520 STR R6,[R4, #+0] 521 STR R5,[R4, #+4] 522 STR R0,[R4, #+8] 523 LDR R0,[SP, #+32] 524 STR R0,[R4, #+12] 525 STR R1,[R4, #+16] 526 STR R2,[R4, #+20] 527 STR R3,[R4, #+24] 528 LDR R0,[SP, #+24] 529 STR R0,[R4, #+28] 530 ADDS R4,R4,#+32 531 LDR.N R0,DataTable2_5 532 LDR R0,[R0, #+0] 533 CMP R4,R0 534 BCC.N _tx_misra_trace_event_insert_4 535 LDR.N R0,DataTable2_6 536 LDR R4,[R0, #+0] 537 LDR.N R0,DataTable2_1 538 STR R4,[R0, #+0] 539 LDR.N R0,DataTable2_7 540 LDR R0,[R0, #+0] 541 STR R4,[R0, #+32] 542 LDR.N R0,DataTable2_8 543 LDR R0,[R0, #+0] 544 CMP R0,#+0 545 BEQ.N _tx_misra_trace_event_insert_0 546 LDR.N R0,DataTable2_7 547 LDR R0,[R0, #+0] 548 LDR.N R1,DataTable2_8 549 LDR R1,[R1, #+0] 550 BLX R1 551 B.N _tx_misra_trace_event_insert_0 552_tx_misra_trace_event_insert_4: 553 LDR.N R0,DataTable2_1 554 STR R4,[R0, #+0] 555 LDR.N R0,DataTable2_7 556 LDR R0,[R0, #+0] 557 STR R4,[R0, #+32] 558_tx_misra_trace_event_insert_0: 559 POP {R0,R4-R7,PC} // return 560 561 562 .data 563DataTable2_1: 564 .word _tx_trace_buffer_current_ptr 565 566 .data 567DataTable2_2: 568 .word _tx_trace_event_enable_bits 569 570 .data 571DataTable2_5: 572 .word _tx_trace_buffer_end_ptr 573 574 .data 575DataTable2_6: 576 .word _tx_trace_buffer_start_ptr 577 578 .data 579DataTable2_7: 580 .word _tx_trace_header_ptr 581 582 .data 583DataTable2_8: 584 .word _tx_trace_full_notify_function 585 586 587/**************************************************************************/ 588/**************************************************************************/ 589/** */ 590/** ULONG _tx_misra_time_stamp_get(VOID); */ 591/** */ 592/**************************************************************************/ 593/**************************************************************************/ 594 595 .text 596 .thumb_func 597_tx_misra_time_stamp_get: 598 MOVS R0,#+0 599 BX LR // return 600 601#endif 602 603 .data 604DataTable2_3: 605 .word _tx_thread_system_state 606 607 .data 608DataTable2_4: 609 .word _tx_thread_current_ptr 610 611 612/**************************************************************************/ 613/**************************************************************************/ 614/** */ 615/** UINT _tx_misra_always_true(void); */ 616/** */ 617/**************************************************************************/ 618/**************************************************************************/ 619 620 .text 621 .thumb_func 622_tx_misra_always_true: 623 MOVS R0,#+1 624 BX LR // return 625 626 627/**************************************************************************/ 628/**************************************************************************/ 629/** */ 630/** UINT _tx_misra_status_get(UINT status); */ 631/** */ 632/**************************************************************************/ 633/**************************************************************************/ 634 635 .text 636 .thumb_func 637_tx_misra_status_get: 638 MOVS R0,#+0 639 BX LR // return 640 641 642/***********************************************************************************************/ 643/***********************************************************************************************/ 644/** */ 645/** ULONG _tx_misra_ipsr_get(void); */ 646/** */ 647/***********************************************************************************************/ 648/***********************************************************************************************/ 649 650 .text 651 .thumb_func 652_tx_misra_ipsr_get: 653 MRS R0, IPSR 654 BX LR // return 655 656 657/***********************************************************************************************/ 658/***********************************************************************************************/ 659/** */ 660/** ULONG _tx_misra_control_get(void); */ 661/** */ 662/***********************************************************************************************/ 663/***********************************************************************************************/ 664 665 .text 666 .thumb_func 667_tx_misra_control_get: 668 MRS R0, CONTROL 669 BX LR // return 670 671 672/***********************************************************************************************/ 673/***********************************************************************************************/ 674/** */ 675/** void _tx_misra_control_set(ULONG value); */ 676/** */ 677/***********************************************************************************************/ 678/***********************************************************************************************/ 679 680 .text 681 .thumb_func 682_tx_misra_control_set: 683 MSR CONTROL, R0 684 BX LR // return 685 686 687#ifdef __ARM_FP 688 689/***********************************************************************************************/ 690/***********************************************************************************************/ 691/** */ 692/** ULONG _tx_misra_fpccr_get(void); */ 693/** */ 694/***********************************************************************************************/ 695/***********************************************************************************************/ 696 697 .text 698 .thumb_func 699_tx_misra_fpccr_get: 700 LDR r0, =0xE000EF34 // Build FPCCR address 701 LDR r0, [r0] // Load FPCCR value 702 BX LR // return 703 704 705/***********************************************************************************************/ 706/***********************************************************************************************/ 707/** */ 708/** void _tx_misra_vfp_touch(void); */ 709/** */ 710/***********************************************************************************************/ 711/***********************************************************************************************/ 712 713 .text 714 .thumb_func 715_tx_misra_vfp_touch: 716 vmov.f32 s0, s0 717 BX LR // return 718 719#endif 720 721 722 .data 723 .word 0 724