📄 artx_swi.cpp
字号:
/*----------------------------------------------------------------------------
* R T L K e r n e l E x a m p l e
*----------------------------------------------------------------------------
* Name: ARTX_SWI.CPP
* Purpose: ARTX example program
* Rev.: V2.11 / 20-feb-2006
*----------------------------------------------------------------------------
* This code is part of the RealView Run-Time Library.
* Copyright (c) 2004-2006 KEIL - An ARM Company. All rights reserved.
*---------------------------------------------------------------------------*/
;/*****************************************************************************/
;/* Keil RealView编译器非典软中断演示代码 */
;/*文 件 名 : ARTX_SWI.CPP */
;/*改 造 人 : ARM水鸟 HotPower@126.com */
;/*菜 农 水 潭 :http://blog.21ic.com/blog.asp?name=hotpower */
;/*改 造 日 期 : 2006.2.23 0:38 */
;/*改 造 地 点 :西安大雁塔村队部 */
;/*说 明 :在经典的ARTX环境下采用中断向量序号运行 */
;/*****************************************************************************/
#include <ARTX.h> /* ARTX kernel functions & defines */
#include <LPC213xDEF.H> //ARM菜鸟HotPower创建定义文件(最新为情人节修改版)
OS_TID tsk1;
OS_TID tsk2;
U32 counter; /* 5-bit counter for tasks */
void job1 (void) __task;
void job2 (void) __task;
/*----------------------------------------------------------------------------
* Software Interrupt Functions accept parameters, may return values
* and run in Supervisor Mode (Interrupt protected)
*---------------------------------------------------------------------------*/
extern "C" void __swi(8) inc_5bit (U32 *cp);
extern "C" void __SWI_8 (U32 *cp) {
/* A protected function to increment a 5-bit counter. */
*cp = (*cp + 1) & 0x1F;
}
extern "C" void __swi(9) add_5bit (U32 *cp, U32 val);
extern "C" void __SWI_9 (U32 *cp, U32 val) {
/* A protected function to add a value to 5-bit counter. */
*cp = (*cp + val) & 0x1F;
}
/*----------------------------------------------------------------------------
* Task 1
*---------------------------------------------------------------------------*/
void job1 (void) __task {
tsk1 = os_tsk_self ();
tsk2 = os_tsk_create (job2,2); /* start task 2 */
while (1) {
inc_5bit (&counter); /* increment 5-bit counter */
}
}
/*----------------------------------------------------------------------------
* Task 2
*---------------------------------------------------------------------------*/
void job2 (void) __task {
while (1) {
add_5bit (&counter, 7); /* add 7 to 5-bit counter */
os_dly_wait (1);
}
}
/*----------------------------------------------------------------------------
* Initialize and start ARTX Kernel
*---------------------------------------------------------------------------*/
int main (void) {
#ifdef MCB2100
U32 volatile start;
/* Wait for debugger connection (0.3s) */
for (start = 0; start < 1000000; start++) { ; }
#endif
int i;
for(i =0; i <= 15; i ++) {
VIC->VectAddrs[i] = i;//刷新向量地址寄存器VICVectAddr0~VICVectAddr15
}
os_sys_init (job1);
}
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -