pc上用C語言模擬51多工的案例程式

2022-02-05 10:57:03 字數 1769 閱讀 8922

#include #include //任務槽個數.在本例中並未考慮任務換入換出,所以實際執行的任務有多少個,

//就定義多少個任務槽,不可多定義或少定義

#define max_tasks 5

//任務的棧指標

unsigned char *task_sp[max_tasks];

//最大棧深.最低不得少於2個,保守值為12.

//預估方法:以2為基數,每增加一層函式呼叫,加2位元組.

//如果其間可能發生中斷,則還要再加上中斷需要的棧深.

//減小棧深的方法:1.盡量少巢狀子程式 2.調子程式前關中斷.

#define max_task_dep 12

unsigned char task_stack[max_tasks][max_task_dep] =

;//任務堆疊.

//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.

//如果該槽中原來就有任務,則原任務丟失,但系統本身不會發生錯誤.

//將各任務的函式位址的低位元組和高位元組分別入在

//task_stack[任務號][0]和task_stack[任務號][1]中

void task_load(unsigned int fn, unsigned char tid)

void func1()

if(i>=250)

//task_switch(); }}

void func2()

if(j>=654)

//task_switch(); }}

int main()

hello world!

task_stack[0] = 00403000

task_stack+0 = 00403000

task_stack+1 = 0040300c

task_stack+2 = 00403018

task_stack+3 = 00403024

task_stack+4 = 00403030

task_stack[0] = 00403000

*(task_stack+0) = 00403000

*(task_stack+1) = 0040300c

*(task_stack+2) = 00403018

*(task_stack+3) = 00403024

*(task_stack+4) = 00403030

task_stack[0] = 00403000

*(task_stack+0)+0 = 00403000

*(task_stack+1)+1 = 0040300d

*(task_stack+2)+2 = 0040301a

*(task_stack+3)+3 = 00403027

*(task_stack+4)+4 = 00403034

task_stack = 00403000

task_stack[0] + 5 = 00403005

task_sp = 004050b0

task_sp[0] = 4206593

task_sp[1] = 4206594

task_sp[2] = 4206595

task_sp[3] = 4206596

task_sp[4] = 4206597

terminated with return code 0

press any key to continue ...

用 C語言模擬買貓的過程

最近在學習c語言,同時也在讀 編碼 這本書,讀著讀著突然有一種想把編碼中的電路實現出來的想法,由於現實世界中缺少材料 大量的電線 開關和燈泡等等 所以產生了用c語言模擬計算機的想法。剛剛用c語言把第10章 邏輯與開關 中的買貓過程的電路用c語言模擬了一下,結果 0,0,1 和書中的完全一樣,以後打算...

用C語言模擬實現c 的繼承與多型特性

一 我們知道,c語言是一種面向過程的程式語言,而c 是一款在它的語法基礎上改進的物件導向的程式語言 1 面向過程與物件導向的區別 從設計方法角度看 面向過程程式設計方法是用函式 即演算法過程 對資料進行操作,但又將函式與其操作的資料分離開來。物件導向程式設計方法是將物件的屬性資料和對屬性資料的操作封...

自己用C語言寫的乙個模擬退火演算法

首先介紹一下模擬退火演算法 sa 模擬退火演算法 simulated annealing,sa 演算法最早是由metropolis等人提出的。其出發點是基於物理中固體物質的退火過程與一般組合優化問題之間的相似性。模擬退火演算法是一種通用的優化演算法,其物理退火過程由以下三部分組成 1 加溫過程 2 ...