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