📄 test.lst
字号:
##############################################################################
# #
# IAR AT90S C-Compiler V1.41C/386 #
# #
# Compile time = 05/Aug/2001 14:39:15 #
# Target option = Max 64 KB data + 8 KB code (8515 4414...) #
# Memory model = small #
# Source file = test.c #
# List file = ..\lst\test.lst #
# Object file = ..\obj\test.r90 #
# Command line = -C -r -ms -v1 -K -e -y -z9 -q -o ..\obj\test.r90 #
# -l ..\lst\test test.c #
# #
# Copyright 1998 IAR Systems. All rights reserved. #
##############################################################################
\ NAME test(17)
\ RSEG CODE(0)
\ RSEG CCSTR(0)
\ RSEG ECSTR(0)
\ RSEG UDATA1(0)
\ PUBLIC AvrInit
\ PUBLIC DispStrSem
\ EXTERN OSCPUUsage
\ EXTERN OSCtxSwCtr
\ EXTERN OSInit
\ EXTERN OSSemCreate
\ EXTERN OSSemPend
\ EXTERN OSSemPost
\ EXTERN OSStart
\ EXTERN OSStatInit
\ EXTERN OSTaskCreate
\ EXTERN OSTaskCtr
\ EXTERN OSTimeDly
\ EXTERN OSTimeDlyHMSM
\ EXTERN OSVersion
\ PUBLIC PutChar
\ PUBLIC PutDec
\ PUBLIC PutString
\ PUBLIC RandomSem
\ PUBLIC RndNext
\ PUBLIC SPrintDec
\ PUBLIC Task
\ PUBLIC TaskData
\ PUBLIC TaskStart
\ PUBLIC TaskStartStk
\ PUBLIC TaskStk
\ PUBLIC UartTxBuf
\ PUBLIC UartTxCount
\ PUBLIC UartTxHandler
\ PUBLIC UartTxRdPtr
\ PUBLIC UartTxSem
\ PUBLIC UartTxWrPtr
\ PUBLIC VT102Attribute
\ PUBLIC VT102DispChar
\ PUBLIC VT102DispClrScr
\ PUBLIC VT102DispStr
\ PUBLIC main
\ PUBLIC random
\ EXTERN ?UC_DIVMOD_L01
\ EXTERN ?SS_DIVMOD_L02
\ EXTERN ?US_DIVMOD_L02
\ EXTERN ?L_MUL_L03
\ EXTERN ?UL_DIVMOD_L03
\ EXTERN ?PROLOGUE2_L09
\ EXTERN ?PROLOGUE3_L09
\ EXTERN ?PROLOGUE8_L09
\ EXTERN ?EPILOGUE_B2_L09
\ EXTERN ?EPILOGUE_B3_L09
\ EXTERN ?EPILOGUE_B8_L09
\ EXTERN ?CL1S_1_40_L08
\ RSEG CODE
\ main:
1 /*
2 *************************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 *
6 *
7 * AVR Sample code
8 * File : TEST.C
9 * By : Ole Saether
10 *
11 * $Modtime: 19.07.01 22:24 $
12 * $Revision: 3 $
13 *
14 * Description :
15 *
16 * This file contains a simple example program showing how to use the AVR port of uC/OS-II. It is
17 * based on Example #1 from Jean Labrosse's book "MicroC/OS-II, The Real Time Kernel." The main
18 * difference is that this example does not display the time of day.
19 * You must have the AVR UART connected to a VT102 compatible terminal with color support to get the
20 * most out of this example.
21 *
22 * The support routines at the end of this file are included only to make this example run; they
23 * should not be used in production code without careful testing.
24 *
25 *************************************************************************************************************
26 */
27
28 #include "includes.h"
29
30 /*
31 **************************************************************************************************************
32 * CONSTANTS
33 **************************************************************************************************************
34 */
35
36 #define TASK_STK_SIZE OS_TASK_DEF_STK_SIZE /* Size of each task's stacks (# of bytes) */
37 #define N_TASKS 10 /* Number of identical tasks */
38
39 /*
40 **************************************************************************************************************
41 * VARIABLES
42 **************************************************************************************************************
43 */
44
45 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */
46 OS_STK TaskStartStk[TASK_STK_SIZE];
47 char TaskData[N_TASKS]; /* Parameters to pass to each task */
48 OS_EVENT *RandomSem;
49 OS_EVENT *DispStrSem;
50 INT32U RndNext; /* Used by random generator */
51 INT8U UartTxBuf[256]; /* 256 bytes UART transmit buffer */
52 volatile INT8U UartTxRdPtr; /* UART transmit buffer read pointer */
53 INT8U UartTxWrPtr; /* UART transmit buffer write pointer */
54 volatile INT8U UartTxCount; /* Number of characters to send */
55 OS_EVENT *UartTxSem;
56
57 /*
58 **************************************************************************************************************
59 * FUNCTION PROTOTYPES
60 **************************************************************************************************************
61 */
62
63 C_task Task(void *data); /* Function prototypes of tasks */
64 C_task TaskStart(void *data); /* Function prototypes of Startup task */
65 void PutChar(char c); /* Write a character to the AVR UART */
66 void AvrInit(void); /* Initialize AVR */
67 void PutString(const char *s); /* Write a null-terminated string to the AVR UART */
68 void SPrintDec(char *, INT32U, INT8U, char); /* Output an INT16U to a string (right adjust) */
69 void PutDec (INT8U x); /* Display an INT8U without leading zeros */
70 void VT102Attribute (INT8U fgcolor, INT8U bgcolor); /* Set attributes on VT102 terminal */
71 void VT102DispClrScr(void); /* Clear VT102 terminal */
72 void VT102DispChar(INT8U, INT8U, char, INT8U, INT8U); /* Display a character on VT102 terminal */
73 void VT102DispStr(INT8U, INT8U, char *, INT8U, INT8U); /* Display a string on VT102 terminal */
74 INT8U random(INT8U n); /* Simple random generator (found in K&R) */
75
76 /*
77 **************************************************************************************************************
78 * MAIN
79 **************************************************************************************************************
80 */
81
82 C_task main (void)
83 {
84 AvrInit(); /* Initialize the AVR UART and Timer */
\ 00000000 D150 RCALL AvrInit
85 OSInit();
\ 00000002 .... RCALL OSInit
86 RandomSem = OSSemCreate(1); /* Random number semaphore */
\ 00000004 D021 RCALL ?0089
\ 00000006 9300.... STS LWRD(RandomSem),R16
\ 0000000A 9310.... STS LWRD((RandomSem+1)),R17
87 DispStrSem = OSSemCreate(1); /* Display string semaphore */
\ 0000000E D01C RCALL ?0089
\ 00000010 9300.... STS LWRD(DispStrSem),R16
\ 00000014 9310.... STS LWRD((DispStrSem+1)),R17
88 UartTxSem = OSSemCreate(254); /* Initialize Uart transmit buffer semaphore to 2 */
\ 00000018 EF0E LDI R16,LOW(254)
\ 0000001A D017 RCALL ?0090
\ 0000001C 9300.... STS LWRD(UartTxSem),R16
\ 00000020 9310.... STS LWRD((UartTxSem+1)),R17
89 /* bytes less than the buffer size */
90 OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0);
\ 00000024 E000 LDI R16,LOW(0)
\ 00000026 930A ST -Y,R16
\ 00000028 .... LDI R16,LOW((TaskStartStk+511))
\ 0000002A .... LDI R17,((TaskStartStk+511) >> 8)
\ 0000002C D01F RCALL ?0097
\ 0000002E .... LDI R16,LOW(TaskStart/2)
\ 00000030 .... LDI R17,(TaskStart/2 >> 8)
\ 00000032 .... RCALL OSTaskCreate
91 RndNext = 1; /* set random generator seed to 1 */
\ 00000034 E001 LDI R16,LOW(1)
\ 00000036 E010 LDI R17,LOW(0)
\ 00000038 E030 LDI R19,0
\ 0000003A .... LDI R30,LOW(RndNext)
\ 0000003C .... LDI R31,(RndNext >> 8)
\ 0000003E 8300 STD Z+0,R16
\ 00000040 8311 STD Z+1,R17
\ 00000042 8312 STD Z+2,R17
\ 00000044 8333 STD Z+3,R19
92 OSStart(); /* Start multitasking */
\ 00000046 .... RJMP OSStart
\ ?0089:
\ 00000048 E001 LDI R16,LOW(1)
\ ?0090:
\ 0000004A E010 LDI R17,0
\ 0000004C .... RJMP OSSemCreate
\ ?0091:
\ 0000004E D222 RCALL VT102DispStr
\ ?0092:
\ 00000050 E000 LDI R16,LOW(0)
\ 00000052 930A ST -Y,R16
\ 00000054 E007 LDI R16,7
\ 00000056 930A ST -Y,R16
\ 00000058 9508 RET
\ ?0093:
\ 0000005A .... RCALL ?PROLOGUE2_L09
\ 0000005C 9721 SBIW R28,LOW(1)
\ 0000005E 2F80 MOV R24,R16
\ 00000060 2F94 MOV R25,R20
\ 00000062 D005 RCALL ?0111
\ 00000064 D007 RCALL ?0112
\ 00000066 D00B RCALL ?0113
\ 00000068 .... RJMP OSSemPend
\ ?0098:
\ 0000006A D001 RCALL ?0111
\ ?0097:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -