📄 ggt_cpu_c.lst
字号:
273 1 *--pStack = 0; /* r2 */
274 1 *--pStack = 0; /* r1 */
275 1 *--pStack = TaskParam; /* r0 */
276 1 *--pStack = Mode;
277 1 return(pStack);
278 1 }
279
280 /****************************************************************************************************
281 ** 函数名: main
282 ** 描 述: C语言函数入口,
283 ** 输 入: 无
284 ** 输 出: 无
285 ** 创建人: 卢益贵
286 ** 日 期: 2007年12月8日
287
288 **------------------修改记录------------------------------------------------------------------------
289 ** 修改人: 卢益贵
290 ** 日 期: 2008年1月10日
291 ** 说 明:
292 ** 原代码:
293 void main(void) __arm __task
294 {
295 // 初始化任务系统
296 OSTaskInit();
297
298 // 设置main函数为当前任务,移植时应注意修改这个部分
299 pOSTskMain->pTskStack -= 10; // 指向空栈
300 __asm
301 {
302 LDR R4,=pOSTskMain // mian任务变量地址
303 LDR R4,[R4, #0] // main任务数据区地址
304 LDR R4,[R4, #4] // R4=堆栈指针
305 MOV SP, R4 // 把SP指向main任务堆栈区,
306 }
307
308
309 // 打开系统节拍时钟
310 OSClockInit();
311
312 // 调用用户主函数,初始化用户系统
313 umain();
314
315 // 把main任务权限设置为无穷大,将进行永久等待
316 pOSTskMain->PrioTick = 1000 * 90000;
317 while(1)
318 {
319 // 把main任务设置为永远延时任务
320 pOSTskMain->StateValue = 1000 * 90000;
321 // CPU休眠
322 (PCON = PCON | 0x01);
ARM COMPILER V2.32a, GGT_CPU_c 28/02/08 23:05:54 PAGE 6
323 }
324 }
325 **--------------------------------------------------------------------------------------------------
326 ****************************************************************************************************/
327
328 //用户主任务
329 extern void TaskUasrMain(void) __task;
330
331 #define PCON (*((volatile unsigned char *) 0xE01FC0C0))
332 #define IOPIN (*((volatile unsigned long *) 0xE0028000))
333
334 void main(void) __arm __task
335 {
336 1 // 初始化任务系统
337 1 OSInit();
338 1
339 1 // 设置main函数为当前任务,移植时应注意修改这个部分
340 1 pOSTskMain->pTskStack -= 10; // 指向空栈
341 1 __asm
342 1 {
343 1 LDR R4,=pOSTskMain // mian任务变量地址
344 1 LDR R4,[R4, #0] // main任务数据区地址
345 1 LDR R4,[R4, #4] // R4=堆栈指针
346 1 STR SP, [R4] // 把SP指向main任务堆栈区,
347 1 }
348 1
349 1 // 如果不想
350 1
351 1 // 打开系统节拍时钟
352 1 OSClockInit();
353 1
354 1 // 创建用户主任务(必须等系统初始化完了以后才能创建)
355 1 OSTaskCreate(TaskUasrMain, 0, 255);
356 1
357 1 // 把main任务权限设置为无穷大,将进行永久等待
358 1 pOSTskMain->PrioTick = 1000 * 90000;
359 1 while(1)
360 1 {
361 2 // 把main任务设置为永远延时任务
362 2 pOSTskMain->StateValue = 1000 * 90000;
363 2 // CPU休眠
364 2 (PCON = PCON | 0x01);
365 2 }
366 1 }
367
368 /****************************************************************************************************
369 ** 函数名: OSTaskCreate
370 ** 描 述: 创建默认模式的用户任务
371 ** 输 入: 无
372 ** 输 出: 无
373 ** 创建人: 卢益贵
374 ** 日 期: 2007年12月8日
375
376 **------------------修改记录------------------------------------------------------------------------
377 ** 修改人:
378 ** 日 期:
379 ** 说 明:
380 ** 原代码:
381 **--------------------------------------------------------------------------------------------------
382 ****************************************************************************************************/
383 UINT32 OSTaskCreate(void *pTaskBody, const UINT32 Prio, const UINT32 TaskParam)
384 {
385 1 return(OSTaskUserCreate(pTaskBody, Prio, USR32MODE, TaskParam));
386 1 }
387
388 /****************************************************************************************************
ARM COMPILER V2.32a, GGT_CPU_c 28/02/08 23:05:54 PAGE 7
389 ** 函数名: OSIsrBegin
390 ** 描 述: 中断服务开始,对中断嵌套计数,中断函数第一条语句为调用该函数。
391 ** 输 入: 无
392 ** 输 出: 无
393 ** 创建人: 卢益贵
394 ** 日 期: 2008年1月5日
395
396 **------------------修改记录------------------------------------------------------------------------
397 ** 修改人:
398 ** 日 期:
399 ** 说 明:
400 ** 原代码:
401 **--------------------------------------------------------------------------------------------------
402 ****************************************************************************************************/
403 void OSIsrBegin(void)
404 {
405 1 #if(OS_INT_COUNT)
406 1 OSIrqCount++;
407 1 #endif
408 1 }
409
410 /****************************************************************************************************
411 ** 函数名: OSIsrEnd
412 ** 描 述: 中断服务结束,对中断嵌套计数,如果有任务要处理中断数据,中断函数的最后语句为调用本函数,
413 系统立即切换任务,本函数在CPU未允许中断嵌套的情况,OS_INT_COUNT定义为0时,
414 只执行任务切换功能。
415 ** 输 入: IsSW:1为立即切换任务,其他未定义
416 ** 输 出: 无
417 ** 创建人: 卢益贵
418 ** 日 期: 2008年1月5日
419
420 **------------------修改记录------------------------------------------------------------------------
421 ** 修改人:
422 ** 日 期:
423 ** 说 明:
424 ** 原代码:
425 **--------------------------------------------------------------------------------------------------
426 ****************************************************************************************************/
427 void OSIsrEnd(BOOL DoSW)
428 {
429 1 #if(OS_INT_COUNT)
430 1 if(OSIrqCount)
431 1 OSIrqCount++;
432 1 #endif
433 1
434 1 //立即切换任务
435 1 if(DoSW)
436 1 {
437 2 OSTaskIsNULLLoadDef();
438 2 OSTaskSW();
439 2 }
440 1 }
441
ARM COMPILER V2.32a, GGT_CPU_c 28/02/08 23:05:54 PAGE 8
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (OSTaskUserCreate?A)
EXTERN CODE32 (SWI_Handler?A)
EXTERN CODE32 (BoxAlloc?A)
EXTERN DATA (pOSTskNow)
EXTERN DATA (pOSTskMain)
EXTERN DATA (pOSTskReady)
EXTERN CODE32 (OSTaskDispatch?A)
EXTERN CODE32 (OSInit?A)
EXTERN CODE32 (OSTaskIsNULLLoadDef?A)
EXTERN CODE32 (OSTimerCheck?A)
EXTERN CODE32 (OSGetBoxStack?A)
EXTERN CODE32 (OSGetSizeStack?A)
EXTERN CODE32 (OSGetFPCLK?A)
EXTERN CODE32 (OSGetTick?A)
EXTERN CODE32 (TaskUasrMain?A)
EXTERN CODE32 (?C?SDIV?A)
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC OSTaskCreate?A
PUBLIC OSIsrBegin?A
PUBLIC OSIsrEnd?A
PUBLIC OSClockInit?A
PUBLIC OSStackAlloc?A
PUBLIC OSStackInit?A
PUBLIC DelayNS?A
PUBLIC OSClockInt?A
PUBLIC main
PUBLIC OSIrqCount
*** DATA SEGMENT '?DT0?GGT_CPU_c':
00000000 OSIrqCount:
00000000 BEGIN_INIT
00000000 00000000 DD 0x0
00000004 END_INIT
*** CODE SEGMENT '?PR?DelayNS?A?GGT_CPU_c':
69: void DelayNS(int Time) __arm
00000000 E92D4000 STMDB R13!,{LR}
00000004 E1A02000 MOV R2,R0 ; Time
00000008 ---- Variable 'Time' assigned to Register 'R2' ----
75: Time = (Time - 18 * 5) / (18 * 3); // 估计消耗三个指令:
00000008 E1A00002 MOV R0,R2 ; Time
0000000C E240005A SUB R0,R0,#0x005A ; Time
00000010 E3A01036 MOV R1,#0x36
00000014 EBFFFFF9 BL ?C?SDIV?A ; Targ=0x0 ; ?C?SDIV?A
00000018 E1A00001 MOV R0,R1
0000001C E1A02000 MOV R2,R0 ; Time
80: LOOP:
00000020 LOOP:
81: SUB R0, R0, #1
00000020 E2400001 SUB R0,R0,#0x0001
82: CMP R0, #0
00000024 E3500000 CMP R0,#0x0000
83: BLE LOOP
00000028 DAFFFFF3 BLE LOOP ; Targ=0xFFFFFFFC
85: }
0000002C E8BD0008 LDMIA R13!,{R3}
00000030 E12FFF13 BX R3
00000034 ENDP ; 'DelayNS?A'
*** CODE SEGMENT '?PR?OSClockInt?A?GGT_CPU_c':
93: LDR R8, =OSIrqCount
ARM COMPILER V2.32a, GGT_CPU_c 28/02/08 23:05:54 PAGE 9
00000000 E51F8000 LDR R0,=OSIrqCount
94: LDR R8,[R8]
00000004 E5988000 LDR R8,[R8]
95: CMP R8,#0
00000008 E3580000 CMP R8,#0x0000
96: BEQ SaverTaskData
0000000C 0AFFFFFA BEQ SaverTaskData ; Targ=0xFFFFFFFC
98: T0IR = 0x01;
00000010 E3A01001 MOV R1,#0x1
00000014 E5100000 LDR R0,=0xE0004000
00000018 E5801000 STR R1,[R0,#0x0]
99: VICVectAddr = 0;
0000001C E3A01000 MOV R1,#0x0
00000020 E5100000 LDR R0,=0xFFFFF030
00000024 E5801000 STR R1,[R0,#0x0]
193: }
00000028 ENDP ; 'OSClockInt?A'
*** CODE SEGMENT '?PR?OSClockInit?A?GGT_CPU_c':
210: void OSClockInit(void)
00000000 E92D4010 STMDB R13!,{R4,LR}
212: T0IR = 1;
00000004 E3A01001 MOV R1,#0x1
00000008 E5100000 LDR R0,=0xE0004000
0000000C E5801000 STR R1,[R0,#0x0]
213: T0TC = 0;
00000010 E3A01000 MOV R1,#0x0
00000014 E5100000 LDR R0,=0xE0004008
00000018 E5801000 STR R1,[R0,#0x0]
214: T0TCR = 0x01;
0000001C E3A01001 MOV R1,#0x1
00000020 E5100000 LDR R0,=0xE0004004
00000024 E5801000 STR R1,[R0,#0x0]
215: T0MCR = 0x03;
00000028 E3A01003 MOV R1,#0x3
0000002C E5100000 LDR R0,=0xE0004014
00000030 E5801000 STR R1,[R0,#0x0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -