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

📄 os_cpu_c.src

📁 uc/os在c167上的移植代码
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; C166/ST10 C compiler v6.0 r2            SN00082920-161 (c) 1998 TASKING, Inc.
; options: -Id:\c166\include -IC:\software\UCOS-II\C167\Tasking\test
;          -IC:\software\UCOS-II\C167\Tasking\source
;          -IC:\software\UCOS-II\C167\Tasking\Test -IC:\software\UCOS-II\SOURCE
;          -xmifp -Ml -P -FFSc -Ot -OB -zautobitastruct-4 -zautobita-0 -T256 -s
;          -g -zvolatile_union -A1 -O1
$DEBUG
$NOLOCALS
$EXTEND
$NOMOD166
$STDNAMES(reg.def)
$SEGMENTED
$CASE
$MODEL(LARGE)
$CHECKCPU16
	NAME	OS_CPU_C
	ASSUME	DPP3:SYSTEM
	?SYMB	'c:\software\ucos-ii\c167\tasking\source\os_cpu_c.c',32,80,16
	?SYMB	'',1,82,0
	?SYMB	'80166',0,84,0
	?SYMB	'',0,81,0
	?SYMB	'void',00H,45,1
	?SYMB	'char',080000H,45,2
	?SYMB	'unsigned char',080000H,45,3
	?SYMB	'short',0100000H,45,4
	?SYMB	'unsigned short',0100000H,45,5
	?SYMB	'long',0200000H,45,6
	?SYMB	'unsigned long',0200000H,45,7
	?SYMB	'float',0200000H,45,10
	?SYMB	'double',0400000H,45,11
	?SYMB	'int',0100000H,45,16
	?SYMB	'unsigned int',0100000H,45,18
	?SYMB	'bit',010000H,7,256
	?SYMB	'c:\software\ucos-ii\c167\tasking\source\os_cpu_c.c',0,29,1
	?SYMB	'',0,86,1
; os_cpu_c.c    1	/*
; os_cpu_c.c    2	*********************************************************************************************************
; os_cpu_c.c    3	*                                               uC/OS-II
; os_cpu_c.c    4	*                                         The Real-Time Kernel
; os_cpu_c.c    5	*
; os_cpu_c.c    6	*                          (c) Copyright 1992-1999, Jean J. Labrosse, Weston, FL
; os_cpu_c.c    7	*                                          All Rights Reserved
; os_cpu_c.c    8	*
; os_cpu_c.c    9	*
; os_cpu_c.c   10	*                                          C167 Specific code
; os_cpu_c.c   11	*                                           LARGE MEMORY MODEL
; os_cpu_c.c   12	*
; os_cpu_c.c   13	* File : OS_CPU_C.C
; os_cpu_c.c   14	* By   : Jean J. Labrosse
; os_cpu_c.c   15	*        Michael Awosika
; os_cpu_c.c   16		 Karl Wannenmacher
; os_cpu_c.c   17	*********************************************************************************************************
; os_cpu_c.c   18	*/
; os_cpu_c.c   19	
; os_cpu_c.c   20	#define  OS_CPU_GLOBALS
; os_cpu_c.c   21	#include "includes.h"
	?SYMB	'C:\software\UCOS-II\C167\Tasking\test\includes.h',0,29,2
	?SYMB	'',0,86,2
	?SYMB	'd:\c166\include\stdio.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'd:\c166\include\stdarg.h',0,29,4
	?SYMB	'',0,86,4
	?SYMB	'',0,86,3
	?SYMB	'',01a0002H,38,258
	?SYMB	'_iobuf',0,40,259
	?SYMB	'_ptr',0,23,258
	?SYMB	'_cnt',32,23,16
	?SYMB	'_base',48,23,258
	?SYMB	'_flag',80,23,2
	?SYMB	'_file',88,23,2
	?SYMB	'_bufsiz',96,23,16
	?SYMB	'',112,18,0
	?SYMB	'FILE',259,13,260
	?SYMB	'',01a0001H,38,262
	?SYMB	'',01080106H,5,263
	?SYMB	'',16,47,264
	?SYMB	'',0,30,0
	?SYMB	'',0,49,0
	?SYMB	'va_list',263,13,265
	?SYMB	'size_t',18,13,266
	?SYMB	'fpos_t',7,13,267
	?SYMB	'',0,86,2
	?SYMB	'd:\c166\include\string.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'',0,86,2
	?SYMB	'd:\c166\include\ctype.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'',0,86,2
	?SYMB	'd:\c166\include\stdlib.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'T$1',0,40,268
	?SYMB	'quot',0,23,16
	?SYMB	'rem',16,23,16
	?SYMB	'',32,18,0
	?SYMB	'div_t',268,13,269
	?SYMB	'T$2',0,40,270
	?SYMB	'quot',0,23,6
	?SYMB	'rem',32,23,6
	?SYMB	'',64,18,0
	?SYMB	'ldiv_t',270,13,271
	?SYMB	'',0,86,2
	?SYMB	'd:\c166\include\reg167.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'',0,86,2
	?SYMB	'C:\software\UCOS-II\C167\Tasking\source\os_cpu.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'INT16U',5,13,272
	?SYMB	'',0,86,2
	?SYMB	'C:\software\UCOS-II\C167\Tasking\test\os_cfg.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'',0,86,2
	?SYMB	'C:\software\UCOS-II\C167\Tasking\source\ucos_ii.h',0,29,3
	?SYMB	'',0,86,3
	?SYMB	'INT8U',3,13,273
	?SYMB	'OS_STK',18,13,274
	?SYMB	'',01140111H,5,275
	?SYMB	'',16,47,276
	?SYMB	'',0,30,0
	?SYMB	'',1,49,0
	?SYMB	'T$3',0,40,277
	?SYMB	'OSEventPtr',0,23,262
	?SYMB	'OSEventTbl',32,23,275
	?SYMB	'OSEventCnt',48,23,272
	?SYMB	'OSEventType',64,23,273
	?SYMB	'OSEventGrp',72,23,273
	?SYMB	'',80,18,0
	?SYMB	'OS_EVENT',277,13,278
	?SYMB	'INT32U',7,13,279
	?SYMB	'INT8S',2,13,280
	?SYMB	'BOOLEAN',3,13,281
	?SYMB	'',01a0112H,38,283
	?SYMB	'',01a011cH,38,286
	?SYMB	'',01a0116H,38,288
	?SYMB	'os_tcb',0,40,284
	?SYMB	'OSTCBStkPtr',0,23,283
	?SYMB	'OSTCBNext',32,23,286
	?SYMB	'OSTCBPrev',64,23,286
	?SYMB	'OSTCBEventPtr',96,23,288
	?SYMB	'OSTCBMsg',128,23,262
	?SYMB	'OSTCBDly',160,23,272
	?SYMB	'OSTCBStat',176,23,273
	?SYMB	'OSTCBPrio',184,23,273
	?SYMB	'OSTCBX',192,23,273
	?SYMB	'OSTCBY',200,23,273
	?SYMB	'OSTCBBitX',208,23,273
	?SYMB	'OSTCBBitY',216,23,273
	?SYMB	'',224,18,0
	?SYMB	'OS_TCB',284,13,289
	?SYMB	'T$4',0,40,290
	?SYMB	'OSMsg',0,23,262
	?SYMB	'OSEventTbl',32,23,275
	?SYMB	'OSEventGrp',48,23,273
	?SYMB	'',64,18,0
	?SYMB	'OS_MBOX_DATA',290,13,291
	?SYMB	'T$5',0,40,292
	?SYMB	'OSMsg',0,23,262
	?SYMB	'OSNMsgs',32,23,272
	?SYMB	'OSQSize',48,23,272
	?SYMB	'OSEventTbl',64,23,275
	?SYMB	'OSEventGrp',80,23,273
	?SYMB	'',96,18,0
	?SYMB	'OS_Q_DATA',292,13,293
	?SYMB	'T$6',0,40,294
	?SYMB	'OSCnt',0,23,272
	?SYMB	'OSEventTbl',16,23,275
	?SYMB	'OSEventGrp',32,23,273
	?SYMB	'',48,18,0
	?SYMB	'OS_SEM_DATA',294,13,295
	?SYMB	'',0,86,2
	?SYMB	'',0,86,1
; os_cpu_c.c   22	
; os_cpu_c.c   23	/*
; os_cpu_c.c   24	*********************************************************************************************************
; os_cpu_c.c   25	*                                        INITIALISE A TASK'S STACK
; os_cpu_c.c   26	*
; os_cpu_c.c   27	* Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to initialise the
; os_cpu_c.c   28	*              stack frame of the task being created.  This function is highly processor specific.
; os_cpu_c.c   29	*
; os_cpu_c.c   30	* Arguments  : task          is a pointer to the task code
; os_cpu_c.c   31	*
; os_cpu_c.c   32	*              pdata         is a pointer to a user supplied data area that will be passed to the task
; os_cpu_c.c   33	*                            when the task first executes.
; os_cpu_c.c   34	*
; os_cpu_c.c   35	*              ptos          is a pointer to the top of stack.  It is assumed that 'ptos' points to
; os_cpu_c.c   36	*                            a 'free' entry on the task stack.  If OS_STK_GROWTH is set to 1 then
; os_cpu_c.c   37	*                            'ptos' will contain the HIGHEST valid address of the stack.  Similarly, if
; os_cpu_c.c   38	*                            OS_STK_GROWTH is set to 0, the 'ptos' will contains the LOWEST valid address
; os_cpu_c.c   39	*                            of the stack.
; os_cpu_c.c   40	*
; os_cpu_c.c   41	*              opt           specifies options that can be used to alter the behavior of OSTaskStkInit().
; os_cpu_c.c   42	*
; os_cpu_c.c   43	* Returns    : Always returns the location of the new top-of-stack' once the processor registers have
; os_cpu_c.c   44	*              been placed on the stack in the proper order.
; os_cpu_c.c   45	*
; os_cpu_c.c   46	* Note(s)    : Interrupts are enabled when your task starts executing. You can change this by setting the
; os_cpu_c.c   47	*              PSW to 0x0800 instead.  In this case, interrupts would be disabled upon task startup.  The
; os_cpu_c.c   48	*              application code would be responsible for enabling interrupts at the beginning of the task
; os_cpu_c.c   49	*              code.  You will need to modify OSTaskIdle() and OSTaskStat() so that they enable
; os_cpu_c.c   50	*              interrupts.  Failure to do this will make your system crash!
; os_cpu_c.c   51	*
; os_cpu_c.c   52	*********************************************************************************************************
; os_cpu_c.c   53	*/
; os_cpu_c.c   54	OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt)
; os_cpu_c.c   55	{
OS_CPU_C_1_PR	SECTION	CODE WORD PUBLIC 'CPROGRAM'
	?LINE	55
	PUBLIC	_OSTaskStkInit
	?SYMB	'OSTaskStkInit',_OSTaskStkInit,37,283
	?SYMB	'',55,8,34
_OSTaskStkInit	PROC	FAR
	?SYMB	'',03c0H,95,0
	MOV	[-R0],R9
	?SYMB	'',$,96,2
	MOV	[-R0],R8
	?SYMB	'',$,96,4
	MOV	[-R0],R7
	?SYMB	'',$,96,6
	MOV	[-R0],R6
	?SYMB	'',$,96,8
	MOV	[-R0],R13
	?SYMB	'',$,96,10
	MOV	[-R0],R12
	?SYMB	'',$,96,12
	SUB	R0,#02h
	?SYMB	'',$,96,14
; Locals:
; 
; CSEs:
;     stk = R14R15
;     task = offset 2
;     page = R8
;     offset = R9
;     data_pof = R6
;     usr = R7R1
;     data_pag = offset 0
;     pdata = R14R15
;     ptos = offset 18
; 
	?SYMB	'',1,55,297
	?SYMB	'',0a0129H,38,299
	?SYMB	'task',4,99,299
	?SYMB	'pdata',9,99,262
	?SYMB	'ptos',6,99,283
	?SYMB	'',01a0110H,38,301
	?SYMB	'stk',5,98,301
	?SYMB	'usr',3,98,279
	?SYMB	'page',1,98,272
	?SYMB	'offset',2,98,272
	?SYMB	'data_pag',8,98,272
	?SYMB	'data_pof',7,98,272
	?SYMB	'R14R15',$,100,9
	?SYMB	'4',$,101,6
	?SYMB	'-c',$,101,4
; os_cpu_c.c   56	    INT16U  *stk;
; os_cpu_c.c   57	    INT32U   usr;
; os_cpu_c.c   58	    INT16U   page;
; os_cpu_c.c   59	    INT16U   offset;
; os_cpu_c.c   60	    INT16U   data_pag;
; os_cpu_c.c   61	    INT16U   data_pof;
; os_cpu_c.c   62	
; os_cpu_c.c   63	
; os_cpu_c.c   64	    opt      = opt;                                          /* 'opt' is not used, prevent warning     */
; os_cpu_c.c   65	    data_pag = (INT16U)_pag(pdata);
	?LINE	65
	MOV	R1,R15
	MOV	[R0],R1
	?SYMB	'-e',$,101,8
; os_cpu_c.c   66	    data_pof = (INT16U)_pof(pdata);
	?LINE	66
	MOV	R6,R14
	?SYMB	'R6',$,100,7
; os_cpu_c.c   67	    stk      = (INT16U *)ptos;                               /* Load stack pointer                     */
	?LINE	67
	MOV	R14,[R0+#012H]
	?SYMB	'',$,102,9
	MOV	R15,[R0+#014H]
	?SYMB	'R14R15',$,100,5
; os_cpu_c.c   68	    *stk--   = data_pag;
	?LINE	68
	MOV	R2,R14
	MOV	R3,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R3,#01h
	MOV	[R2],R1
; os_cpu_c.c   69	    *stk--   = data_pof;
	?LINE	69
	MOV	R8,R14
	MOV	R9,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R9,#01h
	MOV	[R8],R6
; os_cpu_c.c   70	    *stk--   = (INT16U)_seg(task);                           /* Task segment start address             */
	?LINE	70
	MOV	R9,[R0+#02H]
	MOV	R7,[R0+#04H]
	MOV	R8,R7
	MOV	R12,R14
	MOV	R13,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R13,#01h
	MOV	[R12],R8
; os_cpu_c.c   71	    *stk--   = (INT16U)_sof(task);                           /* Task offset start address              */
	?LINE	71
	MOV	R9,[R0+#02H]
	MOV	R7,[R0+#04H]
	MOV	R8,R9
	MOV	R12,R14
	MOV	R13,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R13,#01h
	MOV	[R12],R8
; os_cpu_c.c   72	    usr      = (INT32U)stk;
	?LINE	72
	MOV	R8,R14
	MOV	R9,R15
	MOV	R12,R9
	SHL	R12,#0Eh
	OR	R8,R12
	SHR	R9,#02h
	MOV	R7,R8
	MOV	R1,R9
	?SYMB	'R7R1',$,100,3
; os_cpu_c.c   73	    offset   = (INT16U)((((usr) & 0x3FFF) - 10) | 0x4000);   /* Task user stack offset                 */
	?LINE	73
	MOV	R8,R7
	MOV	R12,R1
	AND	R8,#03FFFh
	AND	R12,#00h
	SUB	R8,#0Ah
	SUBC	R12,#00h
	BSET	R8.14
	MOV	R9,R8
	?SYMB	'R9',$,100,2
; os_cpu_c.c   74	    *stk--   = offset;
	?LINE	74
	MOV	R8,R14
	MOV	R12,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R12,#01h
	MOV	[R8],R9
; os_cpu_c.c   75	    page     = (INT16U)(usr >> 0x000E);                      /* Task user stack page                   */
	?LINE	75
	MOV	R12,R1
	SHR	R7,#0Eh
	?SYMB	'',$,102,3
	SHR	R1,#0Eh
	SHL	R12,#02h
	OR	R7,R12
	MOV	R8,R7
	?SYMB	'R8',$,100,1
; os_cpu_c.c   76	    *stk--   = page;
	?LINE	76
	MOV	R7,R14
	MOV	R12,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R12,#01h
	MOV	[R7],R8
; os_cpu_c.c   77	    *stk--   = (INT16U)0x0800;                               /* Task PSW = Interrupts enabled          */
	?LINE	77
	MOV	R7,#0800h
	MOV	R12,R14
	MOV	R13,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R13,#01h
	MOV	[R12],R7
; os_cpu_c.c   78	    *stk--   = (INT16U)_sof(task);                           /* Task offset return address             */
	?LINE	78
	MOV	R13,[R0+#02H]
	MOV	R1,[R0+#04H]
	MOV	R12,R13
	MOV	R2,R14
	MOV	R3,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R3,#01h
	MOV	[R2],R12
; os_cpu_c.c   79	    *stk--   = (INT16U)_seg(task);                           /* Task segment return address            */
	?LINE	79
	MOV	R13,[R0+#02H]
	MOV	R1,[R0+#04H]
	MOV	R12,R1
	MOV	R2,R14
	MOV	R3,R15
	SUB	R14,#02h
	?SYMB	'',$,102,5
	?SYMB	'R14R15',$,100,5
	EXTP	R3,#01h
	MOV	[R2],R12
; os_cpu_c.c   80	    OSTaskBuildStk(page, offset, data_pag, data_pof);
	?LINE	80
	MOV	R7,R14
	MOV	[-R0],R15
	?SYMB	'',$,96,16
	MOV	R12,R8
	MOV	R13,R9
	MOV	R14,[R0+#02H]
	?SYMB	'',$,102,5
	MOV	R15,R6
	MOV	R8,#SOF _3
	?SYMB	'',$,102,1

⌨️ 快捷键说明

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