⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdprintf.lst

📁 Working with DS1820 temperature sensor on SAM7 mC. Watch for timings!
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1              		.code	16   2              		.file	"lcdprintf.c"  10              	.Ltext0:  11              		.align	2  12              		.code 16  13              		.thumb_func  15              	lcdmyputchar:  16              	.LFB290:  17              		.file 1 "LCD/lcdprintf.c"   1:LCD/lcdprintf.c **** #include "include/includes.h"
   2:LCD/lcdprintf.c **** #include <stdarg.h>
   3:LCD/lcdprintf.c **** #include <string.h>
   4:LCD/lcdprintf.c **** 
   5:LCD/lcdprintf.c **** #define SCRATCH 12	//32Bits go up to 4GB + 1 Byte for \0
   6:LCD/lcdprintf.c **** 
   7:LCD/lcdprintf.c **** //Spare some program space by making a comment of all not used format flag lines
   8:LCD/lcdprintf.c **** #define USE_LONG 	// %lx, %Lu and so on, else only 16 bit integer is allowed
   9:LCD/lcdprintf.c **** #define USE_STRING      // %s, %S Strings as parameters
  10:LCD/lcdprintf.c **** #define USE_CHAR	// %c, %C Chars as parameters
  11:LCD/lcdprintf.c **** #define USE_INTEGER	// %i, %I Remove this format flag. %d, %D does the same
  12:LCD/lcdprintf.c **** #define USE_HEX		// %x, %X Hexadezimal output
  13:LCD/lcdprintf.c **** #define USE_UPPERHEX	// %x, %X outputs A,B,C... else a,b,c...
  14:LCD/lcdprintf.c **** #ifndef USE_HEX
  15:LCD/lcdprintf.c ****  #undef USE_UPPERHEX    // ;)
  16:LCD/lcdprintf.c **** #endif
  17:LCD/lcdprintf.c **** #define USE_UPPER	// uncommenting this removes %C,%D,%I,%O,%S,%U,%X and %L..
  18:LCD/lcdprintf.c ****                         // only lowercase format flags are used
  19:LCD/lcdprintf.c **** #define PADDING         //SPACE and ZERO padding
  20:LCD/lcdprintf.c **** 
  21:LCD/lcdprintf.c **** 
  22:LCD/lcdprintf.c **** 
  23:LCD/lcdprintf.c **** static void lcdmyputchar(unsigned char c)
  24:LCD/lcdprintf.c **** {
  18              		.loc 1 24 0  19 0000 80B5     		push	{r7, lr}  20              	.LCFI0:  21 0002 6F46     		mov	r7, sp  22              	.LCFI1:  23 0004 81B0     		sub	sp, sp, #4  24              	.LCFI2:  25 0006 031C     		mov	r3, r0  26 0008 3A1F     		sub	r2, r7, #4  27 000a 1370     		strb	r3, [r2]  25:LCD/lcdprintf.c **** 	if (c==(char)'\n') {
  28              		.loc 1 25 0  29 000c 3B1F     		sub	r3, r7, #4  30 000e 1B78     		ldrb	r3, [r3]  31 0010 0A2B     		cmp	r3, #10  32 0012 03D1     		bne	.L2  26:LCD/lcdprintf.c **** 		LCDSendCommand(ENTER);
  33              		.loc 1 26 0  34 0014 C020     		mov	r0, #192  35 0016 FFF7FEFF 		bl	LCDSendCommand  36 001a 04E0     		b	.L5  37              	.L2:  27:LCD/lcdprintf.c **** 	} else {
  28:LCD/lcdprintf.c **** 		LCDSendChar(c);
  38              		.loc 1 28 0  39 001c 3B1F     		sub	r3, r7, #4  40 001e 1B78     		ldrb	r3, [r3]  41 0020 181C     		mov	r0, r3  42 0022 FFF7FEFF 		bl	LCDSendChar  43              	.L5:  29:LCD/lcdprintf.c **** 	}
  30:LCD/lcdprintf.c **** }
  44              		.loc 1 30 0  45 0026 BD46     		mov	sp, r7  46              		@ sp needed for prologue  47 0028 80BC     		pop	{r7}  48 002a 01BC     		pop	{r0}  49 002c 0047     		bx	r0  50              	.LFE290:  52              		.global	__umodsi3  53              		.global	__udivsi3  54 002e 0000     		.align	2  55              		.global	lcdprintf  56              		.code 16  57              		.thumb_func  59              	lcdprintf:  60              	.LFB291:  31:LCD/lcdprintf.c **** 
  32:LCD/lcdprintf.c **** 
  33:LCD/lcdprintf.c **** //#if 0
  34:LCD/lcdprintf.c **** 
  35:LCD/lcdprintf.c **** 
  36:LCD/lcdprintf.c **** /*static void lcdmyputchar(unsigned char c)
  37:LCD/lcdprintf.c **** {
  38:LCD/lcdprintf.c **** 	//if(c == '\n') softuart_putchar('\r');
  39:LCD/lcdprintf.c **** 	//softuart_putchar(c); // see softuart.c
  40:LCD/lcdprintf.c **** }
  41:LCD/lcdprintf.c **** #endif*/
  42:LCD/lcdprintf.c **** 
  43:LCD/lcdprintf.c **** #if 0
  44:LCD/lcdprintf.c **** static void lcdmyputchar(unsigned char c)
  45:LCD/lcdprintf.c **** {
  46:LCD/lcdprintf.c **** 	//while ( uart0Space() < 2 );
  47:LCD/lcdprintf.c **** 	//if(c == '\n') uart0Putch('\r');
  48:LCD/lcdprintf.c **** 	//uart0Putch(c); // see uart.c
  49:LCD/lcdprintf.c **** }
  50:LCD/lcdprintf.c **** #endif
  51:LCD/lcdprintf.c **** 
  52:LCD/lcdprintf.c **** void lcdprintf(char const *format, ...)
  53:LCD/lcdprintf.c **** {
  61              		.loc 1 53 0  62 0030 0FB4     		push	{r0, r1, r2, r3}  63              	.LCFI3:  64 0032 90B5     		push	{r4, r7, lr}  65              	.LCFI4:  66 0034 6F46     		mov	r7, sp  67              	.LCFI5:  68 0036 8CB0     		sub	sp, sp, #48  69              	.LCFI6:  54:LCD/lcdprintf.c ****   unsigned char scratch[SCRATCH];
  55:LCD/lcdprintf.c ****   unsigned char format_flag;
  56:LCD/lcdprintf.c ****   unsigned short base;
  57:LCD/lcdprintf.c ****   unsigned char *ptr;
  58:LCD/lcdprintf.c ****   unsigned char issigned=0;
  70              		.loc 1 58 0  71 0038 3A1C     		mov	r2, r7  72 003a 0E3A     		sub	r2, r2, #14  73 003c 0023     		mov	r3, #0  74 003e 1370     		strb	r3, [r2]  59:LCD/lcdprintf.c ****   va_list ap;
  60:LCD/lcdprintf.c **** 
  61:LCD/lcdprintf.c **** #ifdef USE_LONG
  62:LCD/lcdprintf.c ****   unsigned char islong=0;
  75              		.loc 1 62 0  76 0040 3A1C     		mov	r2, r7  77 0042 0D3A     		sub	r2, r2, #13  78 0044 0023     		mov	r3, #0  79 0046 1370     		strb	r3, [r2]  63:LCD/lcdprintf.c ****   unsigned long u_val=0;
  80              		.loc 1 63 0  81 0048 3A1C     		mov	r2, r7  82 004a 0C3A     		sub	r2, r2, #12  83 004c 0023     		mov	r3, #0  84 004e 1360     		str	r3, [r2]  64:LCD/lcdprintf.c ****   long s_val=0;
  85              		.loc 1 64 0  86 0050 3A1C     		mov	r2, r7  87 0052 083A     		sub	r2, r2, #8  88 0054 0023     		mov	r3, #0  89 0056 1360     		str	r3, [r2]  65:LCD/lcdprintf.c **** #else
  66:LCD/lcdprintf.c ****   unsigned int u_val=0;
  67:LCD/lcdprintf.c ****   int s_val=0;
  68:LCD/lcdprintf.c **** #endif
  69:LCD/lcdprintf.c **** 
  70:LCD/lcdprintf.c ****   unsigned char fill;
  71:LCD/lcdprintf.c ****   unsigned char width;
  72:LCD/lcdprintf.c **** 
  73:LCD/lcdprintf.c ****   va_start (ap, format);
  90              		.loc 1 73 0  91 0058 3A1C     		mov	r2, r7  92 005a 1032     		add	r2, r2, #16  93 005c 3B1C     		mov	r3, r7  94 005e 283B     		sub	r3, r3, #40  95 0060 1A60     		str	r2, [r3]  74:LCD/lcdprintf.c ****   for (;;){
  75:LCD/lcdprintf.c ****     while ((format_flag = *(format++)) != '%'){      // Until '%' or '\0' 
  96              		.loc 1 75 0  97 0062 0BE0     		b	.L56  98              	.L9:  76:LCD/lcdprintf.c ****       if (!format_flag){va_end (ap); return;}
  99              		.loc 1 76 0 100 0064 3B1C     		mov	r3, r7 101 0066 173B     		sub	r3, r3, #23 102 0068 1B78     		ldrb	r3, [r3] 103 006a 002B     		cmp	r3, #0 104 006c 00D1     		bne	.L10 105 006e BBE1     		b	.L55 106              	.L10:  77:LCD/lcdprintf.c ****       lcdmyputchar(format_flag);
 107              		.loc 1 77 0 108 0070 3B1C     		mov	r3, r7 109 0072 173B     		sub	r3, r3, #23 110 0074 1B78     		ldrb	r3, [r3] 111 0076 181C     		mov	r0, r3 112 0078 FFF7FEFF 		bl	lcdmyputchar 113              	.L8: 114              	.L56: 115              		.loc 1 75 0 116 007c 3A1C     		mov	r2, r7 117 007e 173A     		sub	r2, r2, #23 118 0080 FB68     		ldr	r3, [r7, #12] 119 0082 1B78     		ldrb	r3, [r3] 120 0084 1370     		strb	r3, [r2] 121 0086 0022     		mov	r2, #0 122 0088 2921     		mov	r1, #41 123 008a 4942     		neg	r1, r1 124 008c C919     		add	r1, r1, r7 125 008e 0A70     		strb	r2, [r1] 126 0090 3B1C     		mov	r3, r7 127 0092 173B     		sub	r3, r3, #23 128 0094 1B78     		ldrb	r3, [r3] 129 0096 252B     		cmp	r3, #37 130 0098 04D0     		beq	.L12 131 009a 0121     		mov	r1, #1 132 009c 2923     		mov	r3, #41 133 009e 5B42     		neg	r3, r3 134 00a0 DB19     		add	r3, r3, r7 135 00a2 1970     		strb	r1, [r3] 136              	.L12: 137 00a4 2922     		mov	r2, #41 138 00a6 5242     		neg	r2, r2 139 00a8 D219     		add	r2, r2, r7 140 00aa 1378     		ldrb	r3, [r2] 141 00ac 1B06     		lsl	r3, r3, #24 142 00ae 1A0E     		lsr	r2, r3, #24 143 00b0 FB68     		ldr	r3, [r7, #12] 144 00b2 0133     		add	r3, r3, #1 145 00b4 FB60     		str	r3, [r7, #12] 146 00b6 002A     		cmp	r2, #0 147 00b8 D4D1     		bne	.L9  78:LCD/lcdprintf.c ****     }
  79:LCD/lcdprintf.c **** 
  80:LCD/lcdprintf.c ****     issigned=0; //default unsigned
 148              		.loc 1 80 0 149 00ba 3A1C     		mov	r2, r7 150 00bc 0E3A     		sub	r2, r2, #14 151 00be 0023     		mov	r3, #0 152 00c0 1370     		strb	r3, [r2]  81:LCD/lcdprintf.c ****     base = 10;
 153              		.loc 1 81 0 154 00c2 3A1C     		mov	r2, r7 155 00c4 163A     		sub	r2, r2, #22 156 00c6 0A23     		mov	r3, #10 157 00c8 1380     		strh	r3, [r2]  82:LCD/lcdprintf.c **** 
  83:LCD/lcdprintf.c ****     format_flag = *format++; //get char after '%'
 158              		.loc 1 83 0 159 00ca 3A1C     		mov	r2, r7 160 00cc 173A     		sub	r2, r2, #23 161 00ce FB68     		ldr	r3, [r7, #12] 162 00d0 1B78     		ldrb	r3, [r3] 163 00d2 1370     		strb	r3, [r2] 164 00d4 FB68     		ldr	r3, [r7, #12] 165 00d6 0133     		add	r3, r3, #1 166 00d8 FB60     		str	r3, [r7, #12]  84:LCD/lcdprintf.c **** 
  85:LCD/lcdprintf.c **** #ifdef PADDING
  86:LCD/lcdprintf.c ****     width=0; //no formatting
 167              		.loc 1 86 0 168 00da BA1E     		sub	r2, r7, #2 169 00dc 0023     		mov	r3, #0 170 00de 1370     		strb	r3, [r2]  87:LCD/lcdprintf.c ****     fill=0;  //no formatting
 171              		.loc 1 87 0 172 00e0 FA1E     		sub	r2, r7, #3 173 00e2 0023     		mov	r3, #0 174 00e4 1370     		strb	r3, [r2]  88:LCD/lcdprintf.c ****     if(format_flag=='0' || format_flag==' ') //SPACE or ZERO padding  ?
 175              		.loc 1 88 0 176 00e6 3B1C     		mov	r3, r7 177 00e8 173B     		sub	r3, r3, #23 178 00ea 1B78     		ldrb	r3, [r3] 179 00ec 302B     		cmp	r3, #48 180 00ee 04D0     		beq	.L14 181 00f0 3B1C     		mov	r3, r7 182 00f2 173B     		sub	r3, r3, #23 183 00f4 1B78     		ldrb	r3, [r3] 184 00f6 202B     		cmp	r3, #32 185 00f8 26D1     		bne	.L16 186              	.L14:  89:LCD/lcdprintf.c ****      {
  90:LCD/lcdprintf.c ****       fill=format_flag;
 187              		.loc 1 90 0 188 00fa FA1E     		sub	r2, r7, #3 189 00fc 3B1C     		mov	r3, r7 190 00fe 173B     		sub	r3, r3, #23 191 0100 1B78     		ldrb	r3, [r3] 192 0102 1370     		strb	r3, [r2]  91:LCD/lcdprintf.c ****       format_flag = *format++; //get char after padding char
 193              		.loc 1 91 0 194 0104 3A1C     		mov	r2, r7 195 0106 173A     		sub	r2, r2, #23 196 0108 FB68     		ldr	r3, [r7, #12] 197 010a 1B78     		ldrb	r3, [r3] 198 010c 1370     		strb	r3, [r2] 199 010e FB68     		ldr	r3, [r7, #12] 200 0110 0133     		add	r3, r3, #1 201 0112 FB60     		str	r3, [r7, #12]  92:LCD/lcdprintf.c ****       if(format_flag>='0' && format_flag<='9')
 202              		.loc 1 92 0 203 0114 3B1C     		mov	r3, r7 204 0116 173B     		sub	r3, r3, #23 205 0118 1B78     		ldrb	r3, [r3] 206 011a 2F2B     		cmp	r3, #47 207 011c 14D9     		bls	.L16 208 011e 3B1C     		mov	r3, r7 209 0120 173B     		sub	r3, r3, #23 210 0122 1B78     		ldrb	r3, [r3] 211 0124 392B     		cmp	r3, #57 212 0126 0FD8     		bhi	.L16  93:LCD/lcdprintf.c ****        {
  94:LCD/lcdprintf.c ****         width=format_flag-'0';
 213              		.loc 1 94 0 214 0128 3B1C     		mov	r3, r7 215 012a 173B     		sub	r3, r3, #23 216 012c 1B78     		ldrb	r3, [r3] 217 012e 303B     		sub	r3, r3, #48 218 0130 1B06     		lsl	r3, r3, #24 219 0132 1B0E     		lsr	r3, r3, #24 220 0134 BA1E     		sub	r2, r7, #2 221 0136 1370     		strb	r3, [r2]  95:LCD/lcdprintf.c ****         format_flag = *format++; //get char after width char
 222              		.loc 1 95 0 223 0138 3A1C     		mov	r2, r7 224 013a 173A     		sub	r2, r2, #23 225 013c FB68     		ldr	r3, [r7, #12] 226 013e 1B78     		ldrb	r3, [r3]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -