📄 main_frame.lst
字号:
0067 4040 SBCI R20,0
0068 4040 SBCI R20,0
FILE: D:\wsn\冷轧\program\main.c
(0016) /*
0069 4040 SBCI R20,0
(0017) * main_frame:
006A 4040 SBCI R20,0
(0018) * init_device
006B 4040 SBCI R20,0
(0019) * init_port
006C 4040 SBCI R20,0
(0020) * init_led
006D 4040 SBCI R20,0
(0021) * init_timer
006E 0C0C ADD R0,R12
(0022) * init_RF
006F 0C0C ADD R0,R12
(0023) * init_uart
0070 0C0C ADD R0,R12
(0024) * init_schedule
0071 0C0C ADD R0,R12
(0025) * start_myprogram
0072 0C0C ADD R0,R12
0073 4040 SBCI R20,0
(0026) * main_schedule
0074 4040 SBCI R20,0
0075 4040 SBCI R20,0
(0027) */
0076 0940 SBC R20,R0
0077 0909 SBC R16,R9
(0028) //ICC-AVR application builder : 2006-9-26 20:14:28
0078 0909 SBC R16,R9
0079 0109 MOVW R0,R18
007A 0101 MOVW R0,R2
(0029) // Target : M128
(0030) // Crystal: 7.3728Mhz
(0031)
(0032) #include <iom128v.h>
(0033) #include <macros.h>
(0034) #include <stdio.h>
(0035) #include "../api/schedule.h"
007B 0101 MOVW R0,R2
(0036) #include "../api/cc1100.h"
007C 0101 MOVW R0,R2
007D 0101 MOVW R0,R2
(0037) #include "../api/led.h"
007E 0101 MOVW R0,R2
007F 0101 MOVW R0,R2
(0038) #include "../api/timer.h"
0080 0101 MOVW R0,R2
(0039)
(0040) char a[4]={3,1,2,3};
0081 0101 MOVW R0,R2
0082 0101 MOVW R0,R2
(0041)
0083 4001 SBCI R16,1
0084 4040 SBCI R20,0
(0042) unsigned char CC1100_sendDone()
0085 4040 SBCI R20,0
(0043) {
0086 0A40 SBC R4,R16
(0044) led1Toggle();
0087 0A0A SBC R0,R26
(0045) }
0088 0A0A SBC R0,R26
0089 020A MULS R16,R26
(0046) unsigned char CC1100_receive(unsigned char *msg)
008A 0202 MULS R16,R18
008B 0202 MULS R16,R18
(0047) {
(0048) led1Toggle();
(0049) }
(0050)
(0051)
(0052) void port_init(void)
(0053) {
(0054) //cc1100
(0055) /* IN G1 o
(0056) GD0O D1 i
008C 0202 MULS R16,R18
008D 0202 MULS R16,R18
008E 0202 MULS R16,R18
(0057) CSN C2 o
(0058) SCLK G0 o
(0059) OUT C1 i
0093 4002 SBCI R16,2
FILE: D:\wsn\冷轧\program\schedule.c
(0021) #include <iom128v.h>
0094 4040 SBCI R20,0
(0022) #include <macros.h>
0095 2040 AND R4,R0
(0023) //#include "../api/schedule.h"
(0024) typedef struct {
(0025) void (*tp) ();
(0026) } TOSH_sched_entry_T;
(0027) typedef unsigned char uint8_t;
0096 0000 NOP
0097 0000 NOP
(0028) enum {
(0029)
(0030) TOSH_MAX_TASKS = 8,
(0031) TOSH_TASK_BITMASK = (TOSH_MAX_TASKS - 1)
(0032) };
(0033)
(0034) volatile TOSH_sched_entry_T TOSH_queue[TOSH_MAX_TASKS];
0098 0000 NOP
(0035) uint8_t TOSH_sched_full;
(0036) volatile uint8_t TOSH_sched_free;
(0037)
(0038) uint8_t atomic_start(void)
(0039) {
0099 0000 NOP
009A 0000 NOP
009B 0000 NOP
(0040) uint8_t result = SREG;
(0041) CLI();
(0042) return result;
(0043) }
(0044)
(0045) void atomic_end(uint8_t oldSreg)
(0046) {
(0047) SREG=oldSreg;
(0048) }
009C 0000 NOP
009D 0000 NOP
009E 0000 NOP
(0049)
009F 0000 NOP
00A0 0000 NOP
(0050)
00A1 0000 NOP
00A2 0000 NOP
(0051) /* These are provided in HPL.td */
00A3 0000 NOP
00A4 0000 NOP
00A5 0000 NOP
00A6 0000 NOP
00A7 0000 NOP
00A8 0000 NOP
00A9 0000 NOP
00AA 0000 NOP
00AB 0000 NOP
00AC 0000 NOP
00AD 0000 NOP
00AE 0000 NOP
00AF 0000 NOP
00B0 0000 NOP
00B1 0000 NOP
00B2 0000 NOP
00B3 0000 NOP
00B4 0000 NOP
00B5 0000 NOP
00B6 0000 NOP
00B7 0000 NOP
00B8 0000 NOP
00B9 0000 NOP
_TOS_post:
fInterruptFlags --> R20
tmp --> R10
tp --> R22
00BA 0000 NOP
00BB 0000 NOP
00BC 0000 NOP
(0052) void TOSH_wait()
(0053) {
(0054) ;//asm volatile("nop");
(0055) //asm volatile("nop");
(0056) }
(0057)
(0058) void TOSH_sleep()
(0059) {
(0060) //sbi(MCUCR, 5);
(0061) //sbi(MCUCR, SE);
(0062) //asm volatile ("sleep");
(0063) }
(0064)
(0065) void sched_init(void)
(0066) {
(0067) int i;
(0068) TOSH_sched_free = 0;
00BD 0000 NOP
00BE 0000 NOP
(0069) TOSH_sched_full = 0;
(0070) for (i = 0; i < TOSH_MAX_TASKS; i++)
00BF 0000 NOP
00C0 0000 NOP
(0071) TOSH_queue[i].tp = 0x0;
(0072) }
00C1 0000 NOP
00C2 0000 NOP
00C3 0000 NOP
00C4 0000 NOP
00C5 0000 NOP
00C6 0000 NOP
00C7 0000 NOP
00C8 0000 NOP
00C9 0000 NOP
00CA 0000 NOP
00CB 0000 NOP
00CC 0000 NOP
00CD 0000 NOP
(0073)
00CE 0000 NOP
00CF 0000 NOP
00D0 0000 NOP
00D1 0000 NOP
00D2 0000 NOP
(0074) /*
00D3 0000 NOP
00D4 0000 NOP
00D5 0000 NOP
00D6 0102 MOVW R0,R4
00D7 00F4 NOP
00D8 E042 LDI R20,2
00D9 B8E0 OUT 0x00,R14
00DA 5DC0 SUBI R28,0xD0
00DB 0004 NOP
(0075) * TOS_post (thread_pointer)
00DC 0000 NOP
00DD 1E00 ADC R0,R16
(0076) *
(0077) * Put the task pointer into the next free slot.
00DE 2500 EOR R16,R0
(0078) * Return 1 if successful, 0 if there is no free slot.
(0079) *
00DF 0064 NOP
00E0 C0C0 RJMP 0x01A1
(0080) * This function uses a critical section to protect TOSH_sched_free.
(0081) * As tasks can be posted in both interrupt and non-interrupt context,
00E1 C0C0 RJMP 0x01A2
00E2 C0C0 RJMP 0x01A3
00E3 C0C0 RJMP 0x01A4
00E4 7000 ANDI R16,0
00E5 0000 NOP
(0082) * this is necessary.
(0083) */
(0084) void TOS_post(void (*tp) ()) {
(0085) uint8_t fInterruptFlags;
(0086) uint8_t tmp;
(0087)
(0088) fInterruptFlags = atomic_start();
(0089)
(0090) tmp = TOSH_sched_free;
(0091)
(0092) if (TOSH_queue[tmp].tp == 0x0) {
(0093) TOSH_sched_free = (tmp + 1) & TOSH_TASK_BITMASK;
(0094) TOSH_queue[tmp].tp = tp;
(0095) atomic_end(fInterruptFlags);
(0096) //return 1;
(0097) }
(0098) else {
00E6 0000 NOP
00E7 0100 MOVW R0,R0
(0099) atomic_end(fInterruptFlags);
00E8 693C ORI R19,0x9C
00E9 746E ANDI R22,0x4E
(0100) //return 0;
00EA 6765 ORI R22,0x75
00EB 7265 ANDI R22,0x25
00EC 6F20 ORI R18,0xF0
00ED 6C6E ORI R22,0xCE
00EE 2079 AND R7,R9
00EF 7270 ANDI R23,0x20
00F0 6E69 ORI R22,0xE9
00F1 6674 ORI R23,0x64
00F2 202C AND R2,R12
(0101) }
00F3 6573 ORI R23,0x53
00F4 656C ORI R22,0x5C
00F5 7463 ANDI R22,0x43
(0102) }
(0103)
00F6 5020 SUBI R18,0
00F7 6F72 ORI R23,0xF2
(0104) /*
00F8 656A ORI R22,0x5A
00F9 7463 ANDI R22,0x43
00FA 3E2D CPI R18,0xED
(0105) * TOSH_schedule_task()
(0106) *
(0107) * Remove the task at the head of the queue and execute it, freeing
00FB 704F ANDI R20,0xF
00FC 6974 ORI R23,0x94
00FD 6E6F ORI R22,0xEF
00FE 2D73 MOV R23,R3
00FF 543E SUBI R19,0x4E
0100 7261 ANDI R22,0x21
0101 6567 ORI R22,0x57
0102 2C74 MOV R7,R4
0103 4622 SBCI R18,0x62
0104 2050 AND R5,R0
0105 7270 ANDI R23,0x20
(0108) * the queue entry. Return 1 if a task was executed, 0 if the queue
0106 6E69 ORI R22,0xE9
0107 6674 ORI R23,0x64
0108 2022 TST R2
0109 6F74 ORI R23,0xF4
010A 7020 ANDI R18,0
(0109) * is empty.
010B 6972 ORI R23,0x92
010C 746E ANDI R22,0x4E
(0110) */
010D 6620 ORI R18,0x60
010E 6F6C ORI R22,0xFC
010F 7461 ANDI R22,0x41
(0111)
(0112) int TOSH_run_next_task ()
0110 6E69 ORI R22,0xE9
0111 2067 AND R6,R7
0112 6F70 ORI R23,0xF0
0113 6E69 ORI R22,0xE9
0114 2074 AND R7,R4
(0113) {
(0114) uint8_t fInterruptFlags;
(0115) uint8_t old_full;
(0116) void (*func)(void);
0115 756E ANDI R22,0x5E
0116 626D ORI R22,0x2D
0117 7265 ANDI R22,0x25
0118 3E73 CPI R23,0xE3
(0117)
(0118) fInterruptFlags = atomic_start();
0119 2800 OR R0,R0
(0119) old_full = TOSH_sched_full;
011A 756E ANDI R22,0x5E
011B 6C6C ORI R22,0xCC
(0120) func = TOSH_queue[old_full].tp;
(0121) if (func == 0x0)
(0122) {
(0123) atomic_end(fInterruptFlags);
(0124) return 0;
(0125) }
FILE: <library>
011C 7020 ANDI R18,0
011D 7274 ANDI R23,0x24
011E 7020 ANDI R18,0
011F 7361 ANDI R22,0x31
0120 6573 ORI R23,0x53
0121 2964 OR R22,R4
0122 3000 CPI R16,0
0123 3231 CPI R19,0x21
0124 3433 CPI R19,0x43
0125 3635 CPI R19,0x65
0126 3837 CPI R19,0x87
0127 6139 ORI R19,0x19
0128 6362 ORI R22,0x32
0129 6564 ORI R22,0x54
012A 6766 ORI R22,0x76
012B 6968 ORI R22,0x98
012C 6B6A ORI R22,0xBA
012D 6D6C ORI R22,0xDC
012E 6F6E ORI R22,0xFE
012F 7170 ANDI R23,0x10
0130 7372 ANDI R23,0x32
0131 7574 ANDI R23,0x54
0132 7776 ANDI R23,0x76
0133 7978 ANDI R23,0x98
0134 007A NOP
0135 3130 CPI R19,0x10
0136 3332 CPI R19,0x32
0137 3534 CPI R19,0x54
0138 3736 CPI R19,0x76
0139 3938 CPI R19,0x98
013A 6261 ORI R22,0x21
013B 6463 ORI R22,0x43
013C 6665 ORI R22,0x65
013D 6867 ORI R22,0x87
013E 6A69 ORI R22,0xA9
013F 6C6B ORI R22,0xCB
0140 6E6D ORI R22,0xED
0141 706F ANDI R22,0xF
0142 7271 ANDI R23,0x21
0143 7473 ANDI R23,0x43
0144 7675 ANDI R23,0x65
0145 7877 ANDI R23,0x87
0146 7A79 ANDI R23,0xA9
0147 0000 NOP
__start:
__text_start:
0148 EFCF LDI R28,0xFF
0149 E1D0 LDI R29,0x10
014A BFCD OUT 0x3D,R28
014B BFDE OUT 0x3E,R29
014C 51C0 SUBI R28,0x10
014D 40D0 SBCI R29,0
014E EA0A LDI R16,0xAA
014F 8308 STD Y+0,R16
0150 2400 CLR R0
0151 EEE3 LDI R30,0xE3
0152 E0F1 LDI R31,1
0153 E013 LDI R17,3
0154 31E0 CPI R30,0x10
0155 07F1 CPC R31,R17
0156 F011 BEQ 0x0159
0157 9201 ST R0,Z+
0158 CFFB RJMP 0x0154
0159 8300 STD Z+0,R16
015A EAEC LDI R30,0xAC
015B E0F1 LDI R31,1
015C E0A0 LDI R26,0
015D E0B1 LDI R27,1
015E E012 LDI R17,2
015F 38EF CPI R30,0x8F
0160 07F1 CPC R31,R17
0161 F021 BEQ 0x0166
0162 95C8 LPM
0163 9631 ADIW R30,1
0164 920D ST R0,X+
0165 CFF9 RJMP 0x015F
0166 940E01D0 CALL _main
_exit:
0168 CFFF RJMP _exit
_port_init:
0169 2422 CLR R2
016A BA2B OUT 0x1B,R2
016B BA2A OUT 0x1A,R2
016C BA28 OUT 0x18,R2
016D BA27 OUT 0x17,R2
016E BA25 OUT 0x15,R2
016F E784 LDI R24,0x74
0170 BB84 OUT 0x14,R24
0171 BA22 OUT 0x12,R2
0172 BA21 OUT 0x11,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -