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 ADD R0,R0,R1, LSL #+2 288 BX LR // return 289 290 291/**************************************************************************/ 292/**************************************************************************/ 293/** */ 294/** ULONG *_tx_misra_ulong_pointer_sub(ULONG *ptr, ULONG amount); */ 295/** */ 296/**************************************************************************/ 297/**************************************************************************/ 298 299 .text 300 .thumb_func 301_tx_misra_ulong_pointer_sub: 302 MVNS R2,#+3 303 MULS R1,R2,R1 304 ADD R0,R0,R1 305 BX LR // return 306 307 308/**************************************************************************/ 309/**************************************************************************/ 310/** */ 311/** ULONG _tx_misra_ulong_pointer_dif(ULONG *ptr1, ULONG *ptr2); */ 312/** */ 313/**************************************************************************/ 314/**************************************************************************/ 315 316 .text 317 .thumb_func 318_tx_misra_ulong_pointer_dif: 319 SUBS R0,R0,R1 320 ASRS R0,R0,#+2 321 BX LR // return 322 323 324/**************************************************************************/ 325/**************************************************************************/ 326/** */ 327/** VOID _tx_misra_message_copy(ULONG **source, ULONG **destination, */ 328/** UINT size); */ 329/** */ 330/**************************************************************************/ 331/**************************************************************************/ 332 333 .text 334 .thumb_func 335_tx_misra_message_copy: 336 PUSH {R4,R5} 337 LDR R3,[R0, #+0] 338 LDR R4,[R1, #+0] 339 LDR R5,[R3, #+0] 340 STR R5,[R4, #+0] 341 ADDS R4,R4,#+4 342 ADDS R3,R3,#+4 343 CMP R2,#+2 344 BCC.N _tx_misra_message_copy_0 345 SUBS R2,R2,#+1 346 B.N _tx_misra_message_copy_1 347_tx_misra_message_copy_2: 348 LDR R5,[R3, #+0] 349 STR R5,[R4, #+0] 350 ADDS R4,R4,#+4 351 ADDS R3,R3,#+4 352 SUBS R2,R2,#+1 353_tx_misra_message_copy_1: 354 CMP R2,#+0 355 BNE.N _tx_misra_message_copy_2 356_tx_misra_message_copy_0: 357 STR R3,[R0, #+0] 358 STR R4,[R1, #+0] 359 POP {R4,R5} 360 BX LR // return 361 362 363/**************************************************************************/ 364/**************************************************************************/ 365/** */ 366/** ULONG _tx_misra_timer_pointer_dif(TX_TIMER_INTERNAL **ptr1, */ 367/** TX_TIMER_INTERNAL **ptr2); */ 368/** */ 369/**************************************************************************/ 370/**************************************************************************/ 371 372 .text 373 .thumb_func 374_tx_misra_timer_pointer_dif: 375 SUBS R0,R0,R1 376 ASRS R0,R0,#+2 377 BX LR // return 378 379 380/**************************************************************************/ 381/**************************************************************************/ 382/** */ 383/** TX_TIMER_INTERNAL **_tx_misra_timer_pointer_add(TX_TIMER_INTERNAL */ 384/** **ptr1, ULONG size); */ 385/** */ 386/**************************************************************************/ 387/**************************************************************************/ 388 389 .text 390 .thumb_func 391_tx_misra_timer_pointer_add: 392 ADD R0,R0,R1, LSL #+2 393 BX LR // return 394 395 396/**************************************************************************/ 397/**************************************************************************/ 398/** */ 399/** VOID _tx_misra_user_timer_pointer_get(TX_TIMER_INTERNAL */ 400/** *internal_timer, TX_TIMER **user_timer); */ 401/** */ 402/**************************************************************************/ 403/**************************************************************************/ 404 405 .text 406 .thumb_func 407_tx_misra_user_timer_pointer_get: 408 SUBS R0,#8 409 STR R0,[R1, #+0] 410 BX LR // return 411 412 413/**************************************************************************/ 414/**************************************************************************/ 415/** */ 416/** VOID _tx_misra_thread_stack_check(TX_THREAD *thread_ptr, */ 417/** VOID **highest_stack); */ 418/** */ 419/**************************************************************************/ 420/**************************************************************************/ 421 422 .text 423 .thumb_func 424_tx_misra_thread_stack_check: 425 PUSH {R3-R5,LR} 426 MOVS R4,R0 427 MOVS R5,R1 428 BL _tx_thread_interrupt_disable 429 CMP R4,#+0 430 BEQ.N _tx_misra_thread_stack_check_0 431 LDR R1,[R4, #+0] 432 LDR R2,=0x54485244 433 CMP R1,R2 434 BNE.N _tx_misra_thread_stack_check_0 435 LDR R1,[R4, #+8] 436 LDR R2,[R5, #+0] 437 CMP R1,R2 438 BCS.N _tx_misra_thread_stack_check_1 439 LDR R1,[R4, #+8] 440 STR R1,[R5, #+0] 441_tx_misra_thread_stack_check_1: 442 LDR R1,[R4, #+12] 443 LDR R1,[R1, #+0] 444 CMP R1,#-269488145 445 BNE.N _tx_misra_thread_stack_check_2 446 LDR R1,[R4, #+16] 447 LDR R1,[R1, #+1] 448 CMP R1,#-269488145 449 BNE.N _tx_misra_thread_stack_check_2 450 LDR R1,[R5, #+0] 451 LDR R2,[R4, #+12] 452 CMP R1,R2 453 BCS.N _tx_misra_thread_stack_check_3 454_tx_misra_thread_stack_check_2: 455 BL _tx_thread_interrupt_restore 456 MOVS R0,R4 457 BL _tx_thread_stack_error_handler 458 BL _tx_thread_interrupt_disable 459_tx_misra_thread_stack_check_3: 460 LDR R1,[R5, #+0] 461 LDR R1,[R1, #-4] 462 CMP R1,#-269488145 463 BEQ.N _tx_misra_thread_stack_check_0 464 BL _tx_thread_interrupt_restore 465 MOVS R0,R4 466 BL _tx_thread_stack_analyze 467 BL _tx_thread_interrupt_disable 468_tx_misra_thread_stack_check_0: 469 BL _tx_thread_interrupt_restore 470 POP {R0,R4,R5,PC} // return 471 472#ifdef TX_ENABLE_EVENT_TRACE 473 474/**************************************************************************/ 475/**************************************************************************/ 476/** */ 477/** VOID _tx_misra_trace_event_insert(ULONG event_id, */ 478/** VOID *info_field_1, ULONG info_field_2, ULONG info_field_3, */ 479/** ULONG info_field_4, ULONG filter, ULONG time_stamp); */ 480/** */ 481/**************************************************************************/ 482/**************************************************************************/ 483 484 .text 485 .thumb_func 486_tx_misra_trace_event_insert: 487 PUSH {R3-R7,LR} 488 LDR.N R4,DataTable2_1 489 LDR R4,[R4, #+0] 490 CMP R4,#+0 491 BEQ.N _tx_misra_trace_event_insert_0 492 LDR.N R5,DataTable2_2 493 LDR R5,[R5, #+0] 494 LDR R6,[SP, #+28] 495 TST R5,R6 496 BEQ.N _tx_misra_trace_event_insert_0 497 LDR.N R5,DataTable2_3 498 LDR R5,[R5, #+0] 499 LDR.N R6,DataTable2_4 500 LDR R6,[R6, #+0] 501 CMP R5,#+0 502 BNE.N _tx_misra_trace_event_insert_1 503 LDR R5,[R6, #+44] 504 LDR R7,[R6, #+60] 505 LSLS R7,R7,#+16 506 ORRS R7,R7,#0x80000000 507 ORRS R5,R7,R5 508 B.N _tx_misra_trace_event_insert_2 509_tx_misra_trace_event_insert_1: 510 CMP R5,#-252645136 511 BCS.N _tx_misra_trace_event_insert_3 512 MOVS R5,R6 513 MOVS R6,#-1 514 B.N _tx_misra_trace_event_insert_2 515_tx_misra_trace_event_insert_3: 516 MOVS R6,#-252645136 517 MOVS R5,#+0 518_tx_misra_trace_event_insert_2: 519 STR R6,[R4, #+0] 520 STR R5,[R4, #+4] 521 STR R0,[R4, #+8] 522 LDR R0,[SP, #+32] 523 STR R0,[R4, #+12] 524 STR R1,[R4, #+16] 525 STR R2,[R4, #+20] 526 STR R3,[R4, #+24] 527 LDR R0,[SP, #+24] 528 STR R0,[R4, #+28] 529 ADDS R4,R4,#+32 530 LDR.N R0,DataTable2_5 531 LDR R0,[R0, #+0] 532 CMP R4,R0 533 BCC.N _tx_misra_trace_event_insert_4 534 LDR.N R0,DataTable2_6 535 LDR R4,[R0, #+0] 536 LDR.N R0,DataTable2_1 537 STR R4,[R0, #+0] 538 LDR.N R0,DataTable2_7 539 LDR R0,[R0, #+0] 540 STR R4,[R0, #+32] 541 LDR.N R0,DataTable2_8 542 LDR R0,[R0, #+0] 543 CMP R0,#+0 544 BEQ.N _tx_misra_trace_event_insert_0 545 LDR.N R0,DataTable2_7 546 LDR R0,[R0, #+0] 547 LDR.N R1,DataTable2_8 548 LDR R1,[R1, #+0] 549 BLX R1 550 B.N _tx_misra_trace_event_insert_0 551_tx_misra_trace_event_insert_4: 552 LDR.N R0,DataTable2_1 553 STR R4,[R0, #+0] 554 LDR.N R0,DataTable2_7 555 LDR R0,[R0, #+0] 556 STR R4,[R0, #+32] 557_tx_misra_trace_event_insert_0: 558 POP {R0,R4-R7,PC} // return 559 560 561 .data 562DataTable2_1: 563 .word _tx_trace_buffer_current_ptr 564 565 .data 566DataTable2_2: 567 .word _tx_trace_event_enable_bits 568 569 .data 570DataTable2_5: 571 .word _tx_trace_buffer_end_ptr 572 573 .data 574DataTable2_6: 575 .word _tx_trace_buffer_start_ptr 576 577 .data 578DataTable2_7: 579 .word _tx_trace_header_ptr 580 581 .data 582DataTable2_8: 583 .word _tx_trace_full_notify_function 584 585 586/**************************************************************************/ 587/**************************************************************************/ 588/** */ 589/** ULONG _tx_misra_time_stamp_get(VOID); */ 590/** */ 591/**************************************************************************/ 592/**************************************************************************/ 593 594 .text 595 .thumb_func 596_tx_misra_time_stamp_get: 597 MOVS R0,#+0 598 BX LR // return 599 600#endif 601 602 .data 603DataTable2_3: 604 .word _tx_thread_system_state 605 606 .data 607DataTable2_4: 608 .word _tx_thread_current_ptr 609 610 611/**************************************************************************/ 612/**************************************************************************/ 613/** */ 614/** UINT _tx_misra_always_true(void); */ 615/** */ 616/**************************************************************************/ 617/**************************************************************************/ 618 619 .text 620 .thumb_func 621_tx_misra_always_true: 622 MOVS R0,#+1 623 BX LR // return 624 625 626/**************************************************************************/ 627/**************************************************************************/ 628/** */ 629/** UINT _tx_misra_status_get(UINT status); */ 630/** */ 631/**************************************************************************/ 632/**************************************************************************/ 633 634 .text 635 .thumb_func 636_tx_misra_status_get: 637 MOVS R0,#+0 638 BX LR // return 639 640 641/***********************************************************************************************/ 642/***********************************************************************************************/ 643/** */ 644/** ULONG _tx_misra_ipsr_get(void); */ 645/** */ 646/***********************************************************************************************/ 647/***********************************************************************************************/ 648 649 .text 650 .thumb_func 651_tx_misra_ipsr_get: 652 MRS R0, IPSR 653 BX LR // return 654 655 656/***********************************************************************************************/ 657/***********************************************************************************************/ 658/** */ 659/** ULONG _tx_misra_control_get(void); */ 660/** */ 661/***********************************************************************************************/ 662/***********************************************************************************************/ 663 664 .text 665 .thumb_func 666_tx_misra_control_get: 667 MRS R0, CONTROL 668 BX LR // return 669 670 671/***********************************************************************************************/ 672/***********************************************************************************************/ 673/** */ 674/** void _tx_misra_control_set(ULONG value); */ 675/** */ 676/***********************************************************************************************/ 677/***********************************************************************************************/ 678 679 .text 680 .thumb_func 681_tx_misra_control_set: 682 MSR CONTROL, R0 683 BX LR // return 684 685 686#ifdef __ARM_FP 687 688/***********************************************************************************************/ 689/***********************************************************************************************/ 690/** */ 691/** ULONG _tx_misra_fpccr_get(void); */ 692/** */ 693/***********************************************************************************************/ 694/***********************************************************************************************/ 695 696 .text 697 .thumb_func 698_tx_misra_fpccr_get: 699 LDR r0, =0xE000EF34 // Build FPCCR address 700 LDR r0, [r0] // Load FPCCR value 701 BX LR // return 702 703 704/***********************************************************************************************/ 705/***********************************************************************************************/ 706/** */ 707/** void _tx_misra_vfp_touch(void); */ 708/** */ 709/***********************************************************************************************/ 710/***********************************************************************************************/ 711 712 .text 713 .thumb_func 714_tx_misra_vfp_touch: 715 vmov.f32 s0, s0 716 BX LR // return 717 718#endif 719 720 721 .data 722 .word 0 723