n久前的51 rtos原理實現測試原始碼

2021-07-13 17:04:56 字數 2113 閱讀 9438

初學時期寫的**,比較亂,希望對閱讀本文的讀者有所幫助。

**是撇開了效率問題,為了方便理解任務切換過程,故都盡可能的使用了c實現的,而非彙編。

main.c

#include#include#define uint unsigned int

#define uchar unsigned char

#define tasknumsize 3

#define ramsize 255

uchar idata wait[tasknumsize+2];

uchar taskrdy=0xff,curtask,nxttask;

uchar intnestnum,curtaskisidle,intretbit=0;

void intctxsw(uchar f);

void waitdly(uint dly);

extern void retiins();

extern void popins();

void delay(uint z)

void taska() }}

void taskb()

*/

p2=0;

if(i++>0x0f) i=0;

p2=p2|i;

waitdly(30);

if(temp++>0x0f) temp=0;

p2=p2|(temp<<4);

waitdly(30); }}

void taskc() }}

void inittimer0()

void * const func[tasknumsize]=;

uchar idata *stk[tasknumsize+1];

void initstarttask()

}main()

void idletask() }

void intctxsw(uchar f)

if(nxttaskcurtask)

sp=(uchar)sp1-1;

temp=stk[curtask+1]-(uchar idata *)svsp-1;

for(i=curtask+1;i>curtask))

return;

else

retiins();

} else

else

return;

} }curtaskisidle=1;

*((uchar idata *)++sp)=(uint)idletask%256;

*((uchar idata *)++sp)=(uint)idletask/256;

ea=1;

if(f) retiins();

}void waitdly(uint dly)

}void tick() }}

void intexitsw()

void enterint()

void timer0() interrupt 1

int.s

name    ex_asm

?pr?retiins?ex segment code

?pr?popins?ex segment code

public retiins

public popins

rseg ?pr?retiins?ex

retiins:

mov a,#(-2)

add a,sp

mov sp,a

reti

rseg ?pr?popins?ex

popins:

mov a,#(-2)

add a,sp

mov sp,a

pop 7

pop 6

pop 5

pop 4

pop 3

pop 2

pop 1

pop 0

pop psw

pop dpl

pop dph

pop b

pop acc

retend

51nod 1103 N的倍數 (抽屜原理)

乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。例如 n 8,陣列a包括 2 5 6 3 18 7 11 19,可以選2 6,因為2 6 8,是8的倍數。input 第1行 1個數n,n為陣列的長度,同時也是要求的倍數。2 n 50000 第2 n 1行 陣列a的元素。0 a i...

51nod 1103 N的倍數 抽屜原理

原題鏈結 1103 n的倍數 ural 1302 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個長度為n的陣列a,從a中選出若干個數,使得這些數的和是n的倍數。例如 n 8,陣列a包括 2 5 6 3 18 7 11 19,可以選2 6,因為2 6 8,是8...

51nod1103 抽屜原理 N的倍數

我感覺這種題就是思維。給定n個數,要求取多少個,他們的和為n的倍數。維護字首和。取模有可加性 如果mod等於0,那就從頭到尾輸出。否則的話,n個數的mod 範圍在1 n 1之間,肯定有兩個數的mod一樣,那他們的差值就是結果。n個數,可以再多,但是如果和為x的倍數,這個大於n,那麼就不行了。incl...