惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tenable Blog
I
Intezer
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
T
Tor Project blog
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Schneier on Security
Schneier on Security
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
The Register - Security
The Register - Security
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
L
LangChain Blog
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
The Hacker News
The Hacker News
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
博客园 - 叶小钗
Attack and Defense Labs
Attack and Defense Labs
Webroot Blog
Webroot Blog
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
T
Troy Hunt's Blog
V
Visual Studio Blog
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
Arctic Wolf
T
The Exploit Database - CXSecurity.com
宝玉的分享
宝玉的分享
Vercel News
Vercel News
D
DataBreaches.Net
P
Palo Alto Networks Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - 潘煜熙

兔年大年30 个税 找拖鞋 Source Insight 使用 MC9S08中断机制 博文阅读密码验证 - 博客园 充70送70 博文阅读密码验证 - 博客园 各大公司面试笔试 - 潘煜熙 - 博客园 4个FPGA工程师面试题目 键消抖 任意整数分频模块 SPI接口时钟配置心得(转载) SPI通信 PCB抄板密技(转) FPGA设计经验教训杂谈(转) 怎样实现访问远程数据库的问题【非局域网内】 win2003系统自动登录两法 多层印制板设计基本要领
uc/OSII 任务切换
潘煜熙 · 2010-11-02 · via 博客园 - 潘煜熙

代码

 1 interrupt 1 void OSCtxSw(void)  //swi软中断 
 2 {
 3    //PSHH  //编译器自动加上
 4 
 5    //将当前栈指针压栈//压栈的顺序: PCL, PCH, X, A,CCR and H
 6 
 7    //将当前的栈指针存到当前任务栈指针处
 8    asm 
 9     {       
10     TSX      //H:X ← (SP) + $0001//Transfer SP to Index Reg.
11     PSHX
12     PSHH
13    
14     LDHX   OSTCBCur    //指向当前任务的TCB  
15  
16     //将指向H的栈指针保存到TCB,这样,回到原来任务时就知道从哪里恢复现场,从哪里继续执行代码.
17     PULA
18     STA   0,X          //保存堆栈指针到TCB
19     PULA
20     STA   1,X  
21     }
22 
23   //此段汇编主要是将最高优先级的任务块栈指针赋值给SP
24   asm
25     {
26     LDA   OSPrioHighRdy  //OSPrioCur = OSPrioHighRdy
27     STA   OSPrioCur
28     
29     LDHX  OSTCBHighRdy 
30     STHX  OSTCBCur 
31     LDHX  0,X     //将X指向的内容存到HX,即将任务块栈指针存到HX
32   
33     TXS           //SP ← (H:X) – $0001
34     ;;;;;;;;;;;;;;;;;   
35     PULH          //SP加1 ,这时,SP等于OS_STK  *OSTCBStkPtr;  
36     RTI           //从SP出开始出栈,顺序为:H,CCR,A,X,PCH,PCL,至此,PC恢复到任务上次退出的位置
37     }
38 }

如上图,在执行完第35句后,SP=0x1C3,则对应内容为,

H:0x00

CCR:0x60

A:0x00

X:0x00

PC:0x1A4D (Big Endian)

即,MCU跳到0x1A4D 代码开始执行,从而实现了任务切换!