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