Racelogic / Mbed 2 deprecated VIPS_LTC_RAW_IMU

Dependencies:   BufferedSerial FatFileSystemCpp mbed

Committer:
JamieB
Date:
Thu Feb 03 11:50:12 2022 +0000
Revision:
69:47f800793d00
Parent:
22:0dd9c1b5664a
v24, Added TCP upload of VIPS configuration to Rover

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndyA 22:0dd9c1b5664a 1 /* Copyright (C) 2013 - Adam Green (https://github.com/adamgreen)
AndyA 22:0dd9c1b5664a 2
AndyA 22:0dd9c1b5664a 3 Licensed under the Apache License, Version 2.0 (the "License");
AndyA 22:0dd9c1b5664a 4 you may not use this file except in compliance with the License.
AndyA 22:0dd9c1b5664a 5 You may obtain a copy of the License at
AndyA 22:0dd9c1b5664a 6
AndyA 22:0dd9c1b5664a 7 http://www.apache.org/licenses/LICENSE-2.0
AndyA 22:0dd9c1b5664a 8
AndyA 22:0dd9c1b5664a 9 Unless required by applicable law or agreed to in writing, software
AndyA 22:0dd9c1b5664a 10 distributed under the License is distributed on an "AS IS" BASIS,
AndyA 22:0dd9c1b5664a 11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AndyA 22:0dd9c1b5664a 12 See the License for the specific language governing permissions and
AndyA 22:0dd9c1b5664a 13 limitations under the License.
AndyA 22:0dd9c1b5664a 14 */
AndyA 22:0dd9c1b5664a 15 #if defined(TOOLCHAIN_GCC) && defined(__thumb2__)
AndyA 22:0dd9c1b5664a 16
AndyA 22:0dd9c1b5664a 17 #include <stdio.h>
AndyA 22:0dd9c1b5664a 18
AndyA 22:0dd9c1b5664a 19
AndyA 22:0dd9c1b5664a 20 /* This is a hand written Thumb-2 assembly language version of the
AndyA 22:0dd9c1b5664a 21 standard C memcpy() function that can be used by the lwIP networking
AndyA 22:0dd9c1b5664a 22 stack to improve its performance. It copies 4 bytes at a time and
AndyA 22:0dd9c1b5664a 23 unrolls the loop to perform 4 of these copies per loop iteration.
AndyA 22:0dd9c1b5664a 24 */
AndyA 22:0dd9c1b5664a 25 __attribute__((naked)) void thumb2_memcpy(void* pDest, const void* pSource, size_t length)
AndyA 22:0dd9c1b5664a 26 {
AndyA 22:0dd9c1b5664a 27 __asm (
AndyA 22:0dd9c1b5664a 28 ".syntax unified\n"
AndyA 22:0dd9c1b5664a 29 ".thumb\n"
AndyA 22:0dd9c1b5664a 30
AndyA 22:0dd9c1b5664a 31 // Copy 16 bytes at a time first.
AndyA 22:0dd9c1b5664a 32 " lsrs r3, r2, #4\n"
AndyA 22:0dd9c1b5664a 33 " beq.n 2$\n"
AndyA 22:0dd9c1b5664a 34 "1$: ldr r12, [r1], #4\n"
AndyA 22:0dd9c1b5664a 35 " str r12, [r0], #4\n"
AndyA 22:0dd9c1b5664a 36 " ldr r12, [r1], #4\n"
AndyA 22:0dd9c1b5664a 37 " str r12, [r0], #4\n"
AndyA 22:0dd9c1b5664a 38 " ldr r12, [r1], #4\n"
AndyA 22:0dd9c1b5664a 39 " str r12, [r0], #4\n"
AndyA 22:0dd9c1b5664a 40 " ldr r12, [r1], #4\n"
AndyA 22:0dd9c1b5664a 41 " str r12, [r0], #4\n"
AndyA 22:0dd9c1b5664a 42 " subs r3, #1\n"
AndyA 22:0dd9c1b5664a 43 " bne 1$\n"
AndyA 22:0dd9c1b5664a 44
AndyA 22:0dd9c1b5664a 45 // Copy byte by byte for what is left.
AndyA 22:0dd9c1b5664a 46 "2$:\n"
AndyA 22:0dd9c1b5664a 47 " ands r3, r2, #0xf\n"
AndyA 22:0dd9c1b5664a 48 " beq.n 4$\n"
AndyA 22:0dd9c1b5664a 49 "3$: ldrb r12, [r1], #1\n"
AndyA 22:0dd9c1b5664a 50 " strb r12, [r0], #1\n"
AndyA 22:0dd9c1b5664a 51 " subs r3, #1\n"
AndyA 22:0dd9c1b5664a 52 " bne 3$\n"
AndyA 22:0dd9c1b5664a 53
AndyA 22:0dd9c1b5664a 54 // Return to caller.
AndyA 22:0dd9c1b5664a 55 "4$: bx lr\n"
AndyA 22:0dd9c1b5664a 56 );
AndyA 22:0dd9c1b5664a 57 }
AndyA 22:0dd9c1b5664a 58
AndyA 22:0dd9c1b5664a 59 #endif