📄 os_cpu_c.lst
字号:
28 =2 extern int printf (const char *, ...);
29 =2 extern int sprintf (char *, const char *, ...);
30 =2 extern int vprintf (const char *, char *);
31 =2 extern int vsprintf (char *, const char *, char *);
32 =2 extern char *gets (char *, int n);
33 =2 extern int scanf (const char *, ...);
34 =2 extern int sscanf (char *, const char *, ...);
35 =2 extern int puts (const char *);
36 =2
37 =2 #pragma RESTORE
29 =1 #include <REG52.H>
1 =2 /*--------------------------------------------------------------------------
2 =2 REG52.H
3 =2
4 =2 Header file for generic 80C52 and 80C32 microcontroller.
5 =2 Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
6 =2 All rights reserved.
7 =2 --------------------------------------------------------------------------*/
8 =2
9 =2 /* BYTE Registers */
10 =2 sfr P0 = 0x80;
11 =2 sfr P1 = 0x90;
12 =2 sfr P2 = 0xA0;
13 =2 sfr P3 = 0xB0;
14 =2 sfr PSW = 0xD0;
15 =2 sfr ACC = 0xE0;
16 =2 sfr B = 0xF0;
17 =2 sfr SP = 0x81;
18 =2 sfr DPL = 0x82;
19 =2 sfr DPH = 0x83;
20 =2 sfr PCON = 0x87;
21 =2 sfr TCON = 0x88;
22 =2 sfr TMOD = 0x89;
23 =2 sfr TL0 = 0x8A;
24 =2 sfr TL1 = 0x8B;
25 =2 sfr TH0 = 0x8C;
C51 COMPILER V7.01 OS_CPU_C 01/09/2003 18:37:26 PAGE 16
26 =2 sfr TH1 = 0x8D;
27 =2 sfr IE = 0xA8;
28 =2 sfr IP = 0xB8;
29 =2 sfr SCON = 0x98;
30 =2 sfr SBUF = 0x99;
31 =2
32 =2 /* 8052 Extensions */
33 =2 sfr T2CON = 0xC8;
34 =2 sfr RCAP2L = 0xCA;
35 =2 sfr RCAP2H = 0xCB;
36 =2 sfr TL2 = 0xCC;
37 =2 sfr TH2 = 0xCD;
38 =2
39 =2
40 =2 /* BIT Registers */
41 =2 /* PSW */
42 =2 sbit CY = PSW^7;
43 =2 sbit AC = PSW^6;
44 =2 sbit F0 = PSW^5;
45 =2 sbit RS1 = PSW^4;
46 =2 sbit RS0 = PSW^3;
47 =2 sbit OV = PSW^2;
48 =2 sbit P = PSW^0; //8052 only
49 =2
50 =2 /* TCON */
51 =2 sbit TF1 = TCON^7;
52 =2 sbit TR1 = TCON^6;
53 =2 sbit TF0 = TCON^5;
54 =2 sbit TR0 = TCON^4;
55 =2 sbit IE1 = TCON^3;
56 =2 sbit IT1 = TCON^2;
57 =2 sbit IE0 = TCON^1;
58 =2 sbit IT0 = TCON^0;
59 =2
60 =2 /* IE */
61 =2 sbit EA = IE^7;
62 =2 sbit ET2 = IE^5; //8052 only
63 =2 sbit ES = IE^4;
64 =2 sbit ET1 = IE^3;
65 =2 sbit EX1 = IE^2;
66 =2 sbit ET0 = IE^1;
67 =2 sbit EX0 = IE^0;
68 =2
69 =2 /* IP */
70 =2 sbit PT2 = IP^5;
71 =2 sbit PS = IP^4;
72 =2 sbit PT1 = IP^3;
73 =2 sbit PX1 = IP^2;
74 =2 sbit PT0 = IP^1;
75 =2 sbit PX0 = IP^0;
76 =2
77 =2 /* P3 */
78 =2 sbit RD = P3^7;
79 =2 sbit WR = P3^6;
80 =2 sbit T1 = P3^5;
81 =2 sbit T0 = P3^4;
82 =2 sbit INT1 = P3^3;
83 =2 sbit INT0 = P3^2;
84 =2 sbit TXD = P3^1;
85 =2 sbit RXD = P3^0;
86 =2
87 =2 /* SCON */
C51 COMPILER V7.01 OS_CPU_C 01/09/2003 18:37:26 PAGE 17
88 =2 sbit SM0 = SCON^7;
89 =2 sbit SM1 = SCON^6;
90 =2 sbit SM2 = SCON^5;
91 =2 sbit REN = SCON^4;
92 =2 sbit TB8 = SCON^3;
93 =2 sbit RB8 = SCON^2;
94 =2 sbit TI = SCON^1;
95 =2 sbit RI = SCON^0;
96 =2
97 =2 /* P1 */
98 =2 sbit T2EX = P1^1; // 8052 only
99 =2 sbit T2 = P1^0; // 8052 only
100 =2
101 =2 /* T2CON */
102 =2 sbit TF2 = T2CON^7;
103 =2 sbit EXF2 = T2CON^6;
104 =2 sbit RCLK = T2CON^5;
105 =2 sbit TCLK = T2CON^4;
106 =2 sbit EXEN2 = T2CON^3;
107 =2 sbit TR2 = T2CON^2;
108 =2 sbit C_T2 = T2CON^1;
109 =2 sbit CP_RL2 = T2CON^0;
30 =1
31 =1 //用户头文件加在最后面
32 =1 //Your head file add here.
21
22 /*
23 *********************************************************************************************************
24 * 初始化任务堆栈
25 *
26 * 描述 : 这个函数被OSTaskCreate()或OSTaskCreateExt()调用,以便初始化新创建任务的堆栈结构。本函数
27 * 与处理器高度相关。
28 *
29 * 参数 : task 指向任务代码的指针
30 *
31 * pdata 当任务第一次执行时将要传入任务的用户数据结构指针
32 *
33 * ptos 栈顶指针。ptos指针被默认为用户堆栈入口指针。如果OS_STK_GROWTH被置1,那么,
34 * ptos指向用户堆栈的最高有效地址。同样地,如果OS_STK_GROWTH清0,ptos将指向
35 * 用户堆栈的最低有效地址。
36 *
37 * opt 指定可以改变OSTaskStkInit()行为的选项。(见uCOS_II.H for OS_TASK_OPT_???)。
38 *
39 * 返回值 : 我修改了原来的程序,使函数总是返回用户堆栈空间的最低有效地址。这样修改提高了TCB换入换出
40 * 的效率。
41 *
42 * 注意 : 任务堆栈结构:
43 *
44 *
45 *
46 *
47 *
48 *----------
49 *|OSTCBCur|
50 *----------
51 * |
52 * | ----------------------- ----------
53 * \---->|OSTCBCur->OSTCBStkPtr| SP---->| |
54 * ----------------------- ----------
55 * | | |
56 * | ---------- - ----------
57 * | | | | | . |
C51 COMPILER V7.01 OS_CPU_C 01/09/2003 18:37:26 PAGE 18
58 * | ---------- | | . |
59 * | | | | | . |
60 * | ---------- | ----------
61 * | | . |长度 | | +1
62 * | | . | | ----------
63 * | | . | | OSStack---->| | 0
64 * | ---------- | ----------
65 * | | | | OSStkStart---->| 不关心 | -1 低地址
66 * | ---------- - ----------
67 * \------------->| 长度 | 低地址 系统硬件堆栈
68 * ----------
69 * 用户堆栈 长度=SP-OSStkStart
70 *********************************************************************************************************
71 */
72
73 void *OSTaskStkInit (void (*task)(void *pd), void *ppdata, void *ptos, INT16U opt)
74 {
75 1 OS_STK *stk;
76 1
77 1 ppdata = ppdata;
78 1 opt = opt; //opt没被用到,保留此语句防止告警产生
79 1 stk = (OS_STK *)ptos; //用户堆栈最低有效地址
80 1 *stk++ = 15; //用户堆栈长度
81 1 *stk++ = (INT16U)task & 0xFF; //任务地址低8位
82 1 *stk++ = (INT16U)task >> 8; //任务地址高8位
83 1 *stk++ = 0x00; //PSW
84 1 *stk++ = 0x0A; //ACC
85 1 *stk++ = 0x0B; //B
86 1 *stk++ = 0x00; //DPL
87 1 *stk++ = 0x00; //DPH
88 1 *stk++ = 0x00; //R0
89 1 *stk++ = 0x01; //R1
90 1 *stk++ = 0x02; //R2
91 1 *stk++ = 0x03; //R3
92 1 *stk++ = 0x04; //R4
93 1 *stk++ = 0x05; //R5
94 1 *stk++ = 0x06; //R6
95 1 *stk++ = 0x07; //R7
96 1 //不用保存SP,任务切换时根据用户堆栈长度计算得出。
97 1 // ***** 不再需要仿真堆栈指针 *****
98 1
99 1 // *stk++ = (INT16U) (ptos+MaxStkSize) >> 8; ?C_XBP 仿真堆栈指针高8位
100 1 // *stk++ = (INT16U) (ptos+MaxStkSize) & 0xFF; ?C_XBP 仿真堆栈指针低8位
101 1
102 1 return ((void *)ptos);
103 1 }
104
105 #if OS_CPU_HOOKS_EN
106 /*
107 *********************************************************************************************************
108 * 任务创建钩挂函数
109 *
110 * 描述 : 任务创建时调用
111 *
112 * 参数 : ptcb是指向将被创建任务的任务控制块的指针。
113 *
114 * 注意 : 1) 调用期间中断被禁止
115 *********************************************************************************************************
116 */
117 void OSTaskCreateHook (OS_TCB *ptcb)
118 {
119 1 ptcb = ptcb; /* Prevent compiler warning */
C51 COMPILER V7.01 OS_CPU_C 01/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -