📄 common.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// IAR ARM ANSI C/C++ Compiler V4.40A/W32 17/Jan/2007 16:16:25 /
// Copyright 1999-2005 IAR Systems. All rights reserved. /
// /
// Cpu mode = arm /
// Endian = little /
// Stack alignment = 4 /
// Source file = D:\lilian\STR71X\application note\IAP using /
// UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\commo /
// n.c /
// Command line = "D:\lilian\STR71X\application note\IAP using /
// UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\commo /
// n.c" -lC "D:\lilian\STR71X\application note\IAP /
// using UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\D /
// ebug\List\" -lA "D:\lilian\STR71X\application /
// note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2 /
// .0\user\Debug\List\" -o "D:\lilian\STR71X\applicati /
// on note\IAP using UART\an2078_IAR(forum)\an2078\IAP /
// _V2.0\user\Debug\Obj\" -z2 --no_cse --no_unroll /
// --no_inline --no_code_motion --no_tbaa /
// --no_clustering --no_scheduling --debug --cpu_mode /
// arm --endian little --cpu ARM7TDMI --stack_align 4 /
// -e --fpu None --dlib_config "C:\Program Files\IAR /
// Systems\Embedded Workbench /
// 4.0\arm\LIB\dl4tpannl8n.h" --segment /
// code=CODE_Flash -I "D:\lilian\STR71X\application /
// note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2 /
// .0\user\..\include\" -I "D:\lilian\STR71X\applicati /
// on note\IAP using UART\an2078_IAR(forum)\an2078\IAP /
// _V2.0\user\..\common\" -I "C:\Program Files\IAR /
// Systems\Embedded Workbench 4.0\arm\INC\" /
// List file = D:\lilian\STR71X\application note\IAP using /
// UART\an2078_IAR(forum)\an2078\IAP_V2.0\user\Debug\L /
// ist\common.s79 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
NAME common
RTMODEL "StackAlign4", "USED"
RTMODEL "__cpu_mode", "__pcs__arm"
RTMODEL "__data_model", "absolute"
RTMODEL "__dlib_file_descriptor", "0"
RTMODEL "__endian", "little"
RTMODEL "__rt_version", "6"
RSEG CSTACK:DATA:NOROOT(2)
EXTERN ??divu32_a
MULTWEAK ??RCCU_RCLKSourceConfig??rA
MULTWEAK ??SerialDownload??rA
MULTWEAK ??UART_ByteSend??rA
MULTWEAK ??UART_FifoReset??rA
MULTWEAK ??rA??divu32_a
PUBWEAK ?init?tab?DATA_Z
PUBLIC FLASH_SectorMask
FUNCTION FLASH_SectorMask,0203H
LOCFRAME CSTACK, 4, STACK
PUBLIC GetInputString
FUNCTION GetInputString,0203H
LOCFRAME CSTACK, 16, STACK
PUBLIC GetIntegerInput
FUNCTION GetIntegerInput,0203H
LOCFRAME CSTACK, 24, STACK
PUBLIC GetKey
FUNCTION GetKey,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC Int2Str
FUNCTION Int2Str,0203H
LOCFRAME CSTACK, 20, STACK
PUBLIC Main_Menu
FUNCTION Main_Menu,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC SerialKeyPressed
FUNCTION SerialKeyPressed,0203H
PUBLIC SerialPutChar
FUNCTION SerialPutChar,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC SerialPutString
FUNCTION SerialPutString,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC Str2Int
FUNCTION Str2Int,0203H
LOCFRAME CSTACK, 8, STACK
PUBLIC gimagesize
PUBLIC jump_function
CFI Names cfiNames0
CFI StackFrame CFA R13 HUGEDATA
CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, CPSR:32, R13:32
CFI Resource R14:32, SPSR:32
CFI VirtualResource ?RET:32
CFI EndNames cfiNames0
CFI Common cfiCommon0 Using cfiNames0
CFI CodeAlign 4
CFI DataAlign 4
CFI ReturnAddress ?RET CODE
CFI CFA R13+0
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 Undefined
CFI CPSR SameValue
CFI R14 Undefined
CFI SPSR SameValue
CFI ?RET R14
CFI EndCommon cfiCommon0
RCCU_RCLKSourceConfig SYMBOL "RCCU_RCLKSourceConfig"
SerialDownload SYMBOL "SerialDownload"
UART_ByteSend SYMBOL "UART_ByteSend"
UART_FifoReset SYMBOL "UART_FifoReset"
??RCCU_RCLKSourceConfig??rA SYMBOL "??rA", RCCU_RCLKSourceConfig
??SerialDownload??rA SYMBOL "??rA", SerialDownload
??UART_ByteSend??rA SYMBOL "??rA", UART_ByteSend
??UART_FifoReset??rA SYMBOL "??rA", UART_FifoReset
EXTERN RCCU_RCLKSourceConfig
FUNCTION RCCU_RCLKSourceConfig,0202H
EXTERN SerialDownload
FUNCTION SerialDownload,0202H
EXTERN UART_ByteSend
FUNCTION UART_ByteSend,0202H
EXTERN UART_FifoReset
FUNCTION UART_FifoReset,0202H
// D:\lilian\STR71X\application note\IAP using UART\an2078_IAR(forum)\an2078\IAP_V2.0\common\common.c
// 1 /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
// 2 * File Name : common.c
// 3 * Author : MCD Application Team
// 4 * Date First Issued : 10/25/2004
// 5 * Description : This file provides all the common functions.
// 6 ********************************************************************************
// 7 * History:
// 8 * 02/01/2006 : IAP Version 2.0
// 9 * 11/24/2004 : IAP Version 1.0
// 10 ********************************************************************************
// 11 THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
// 12 CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A
// 13 RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
// 14 CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT OF SUCH
// 15 SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN
// 16 IN CONNECTION WITH THEIR PRODUCTS.
// 17 ********************************************************************************/
// 18
// 19 #include "common.h"
// 20
RSEG DATA_Z:DATA:SORT:NOROOT(2)
// 21 s32 gimagesize = 0;
gimagesize:
DS8 4
// 22 typedef void (*pointer)(void );
RSEG DATA_Z:DATA:SORT:NOROOT(2)
// 23 pointer jump_function;
jump_function:
DS8 4
// 24 /*******************************************************************************
// 25 * Function Name : Int2Str
// 26 * Description : Convert an Integer to a srting
// 27 * Input 1 : The string
// 28 * Input 2 : The intger to be converted
// 29 * Return : None
// 30 *******************************************************************************/
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock0 Using cfiCommon0
CFI Function Int2Str
ARM
// 31 void Int2Str(char* str,s32 intnum)
// 32 {
Int2Str:
PUSH {R4-R7,LR}
CFI ?RET Frame(CFA, -4)
CFI R7 Frame(CFA, -8)
CFI R6 Frame(CFA, -12)
CFI R5 Frame(CFA, -16)
CFI R4 Frame(CFA, -20)
CFI CFA R13+20
MOVS R2,R0
MOVS R3,R1
// 33 u32 i,Div=1000000000,j=0,Status=0;
LDR R0,??Int2Str_0 ;; 0x3b9aca00
MOVS R5,R0
MOV R0,#+0
MOVS R6,R0
MOV R0,#+0
MOVS R7,R0
// 34 for(i=0;i<10;i++)
MOV R0,#+0
MOVS R4,R0
??Int2Str_1:
CMP R4,#+10
BCS ??Int2Str_2
// 35 {
// 36 str[j++]=(intnum/Div) + 48;
MOVS R0,R3
MOVS R1,R5
_BLF ??divu32_a,??rA??divu32_a
ADDS R0,R1,#+48
STRB R0,[R6, +R2]
ADDS R6,R6,#+1
// 37 intnum= intnum%Div;
MOVS R0,R3
MOVS R1,R5
_BLF ??divu32_a,??rA??divu32_a
MOVS R3,R0
// 38 Div/=10;
MOVS R0,R5
MOV R1,#+10
_BLF ??divu32_a,??rA??divu32_a
MOVS R5,R1
// 39 if ((str[j-1]=='0')&(Status==0))
ADDS R0,R6,R2
LDRB R0,[R0, #-1]
CMP R0,#+48
BNE ??Int2Str_3
MOV R0,#+1
B ??Int2Str_4
??Int2Str_3:
MOV R0,#+0
??Int2Str_4:
CMP R7,#+0
BNE ??Int2Str_5
MOV R1,#+1
B ??Int2Str_6
??Int2Str_5:
MOV R1,#+0
??Int2Str_6:
TST R1,R0
BEQ ??Int2Str_7
// 40 j=0;
MOV R0,#+0
MOVS R6,R0
B ??Int2Str_8
// 41 else
// 42 Status++;
??Int2Str_7:
ADDS R7,R7,#+1
// 43 }
??Int2Str_8:
ADDS R4,R4,#+1
B ??Int2Str_1
// 44 }
??Int2Str_2:
POP {R4-R7,PC} ;; return
DATA
??Int2Str_0:
DC32 0x3b9aca00
CFI EndBlock cfiBlock0
// 45 /*******************************************************************************
// 46 * Function Name : Str2Int
// 47 * Description : Convert a srting to an integer
// 48 * Input 1 : The string to be converted
// 49 * Input 2 : The intger value
// 50 * Return : 1 -- Correct
// 51 : 0 -- Error
// 52 *******************************************************************************/
RSEG CODE_Flash:CODE:NOROOT(2)
CFI Block cfiBlock1 Using cfiCommon0
CFI Function Str2Int
ARM
// 53 u32 Str2Int(char *inputstr,s32 *intnum)
// 54 {
Str2Int:
PUSH {R4,R5}
CFI R5 Frame(CFA, -4)
CFI R4 Frame(CFA, -8)
CFI CFA R13+8
MOVS R2,R0
// 55 u32 i,res;
// 56 u32 val = 0;
MOV R0,#+0
MOVS R4,R0
// 57
// 58 if (inputstr[0] == '0' && (inputstr[1] == 'x'||inputstr[1] == 'X'))
LDRB R0,[R2, #+0]
CMP R0,#+48
BNE ??Str2Int_0
LDRB R0,[R2, #+1]
CMP R0,#+120
BEQ ??Str2Int_1
LDRB R0,[R2, #+1]
CMP R0,#+88
BNE ??Str2Int_0
// 59 {
// 60 if (inputstr[2] == '\0')
??Str2Int_1:
LDRB R0,[R2, #+2]
CMP R0,#+0
BNE ??Str2Int_2
// 61 {
// 62 return 0;
MOV R0,#+0
B ??Str2Int_3
// 63 }
// 64 for (i=2;i<11;i++)
??Str2Int_2:
MOV R0,#+2
MOVS R3,R0
??Str2Int_4:
CMP R3,#+11
BCS ??Str2Int_5
// 65 {
// 66 if (inputstr[i] == '\0')
LDRB R0,[R3, +R2]
CMP R0,#+0
BNE ??Str2Int_6
// 67 {
// 68 *intnum = val;
STR R4,[R1, #+0]
// 69 res = 1; /* return 1; */
MOV R0,#+1
MOVS R12,R0
// 70 break;
B ??Str2Int_5
// 71 }
// 72 if (ISVALIDHEX(inputstr[i]))
??Str2Int_6:
LDRB R0,[R3, +R2]
CMP R0,#+65
BCC ??Str2Int_7
LDRB R0,[R3, +R2]
CMP R0,#+71
BCC ??Str2Int_8
??Str2Int_7:
LDRB R0,[R3, +R2]
CMP R0,#+97
BCC ??Str2Int_9
LDRB R0,[R3, +R2]
CMP R0,#+103
BCC ??Str2Int_8
??Str2Int_9:
LDRB R0,[R3, +R2]
CMP R0,#+48
BCC ??Str2Int_10
LDRB R0,[R3, +R2]
CMP R0,#+58
BCS ??Str2Int_10
// 73 {
// 74 val = (val << 4) + CONVERTHEX(inputstr[i]);
??Str2Int_8:
LDRB R0,[R3, +R2]
CMP R0,#+48
BCC ??Str2Int_11
LDRB R0,[R3, +R2]
CMP R0,#+58
BCS ??Str2Int_11
LDRB R0,[R3, +R2]
SUBS R0,R0,#+48
B ??Str2Int_12
??Str2Int_11:
LDRB R0,[R3, +R2]
CMP R0,#+65
BCC ??Str2Int_13
LDRB R0,[R3, +R2]
CMP R0,#+71
BCS ??Str2Int_13
LDRB R0,[R3, +R2]
SUBS R0,R0,#+55
B ??Str2Int_14
??Str2Int_13:
LDRB R0,[R3, +R2]
SUBS R0,R0,#+87
??Str2Int_14:
??Str2Int_12:
ADDS R4,R0,R4, LSL #+4
// 75 }
ADDS R3,R3,#+1
B ??Str2Int_4
// 76 else
// 77 {
// 78 /* return 0; Invalid input */
// 79 res = 0;
??Str2Int_10:
MOV R0,#+0
MOVS R12,R0
// 80 break;
// 81 }
// 82 }
// 83
// 84 if (i>=11) res = 0; /* over 8 digit hex --invalid */
??Str2Int_5:
CMP R3,#+11
BCC ??Str2Int_15
MOV R0,#+0
MOVS R12,R0
B ??Str2Int_15
// 85 }
// 86 else /* max 10-digit decimal input */
// 87 {
// 88 for (i=0;i<11;i++)
??Str2Int_0:
MOV R0,#+0
MOVS R3,R0
??Str2Int_16:
CMP R3,#+11
BCS ??Str2Int_17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -