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

推荐订阅源

Help Net Security
Help Net Security
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
C
Check Point Blog
M
MIT News - Artificial intelligence
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
D
Docker
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
H
Help Net Security
D
DataBreaches.Net
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
Cloudbric
Cloudbric
Blog — PlanetScale
Blog — PlanetScale
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
N
News | PayPal Newsroom
V2EX - 技术
V2EX - 技术
H
Heimdal Security Blog
S
Security @ Cisco Blogs
V
Visual Studio Blog
The Last Watchdog
The Last Watchdog
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
C
Cyber Attacks, Cyber Crime and Cyber Security
Last Week in AI
Last Week in AI
爱范儿
爱范儿
博客园 - 聂微东
S
Securelist
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
V
Vulnerabilities – Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
O
OpenAI News
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 潘煜熙

兔年大年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 代码开始执行,从而实现了任务切换!