Skip to content

Commit 114e37a

Browse files
author
Jiaojinxing
committed
首次提交。
0 parents  commit 114e37a

File tree

5 files changed

+306
-0
lines changed

5 files changed

+306
-0
lines changed

_posts/SylixOS-thread.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
title: SylixOS线程
2+
tag: SylixOS
3+
categories: SylixOS
4+
---
5+
##线程
6+
线程是程序中的一条独立的控制流,线程是SylixOS调度器进行任务调度的基本单位,每个线程都有一个独一无二的ID号、栈、线程控制块(TCB)。
7+
8+
为了管理线程,SylixOS会为每一个线程分配一个线程控制块,用于记录该线程的信息,如线程入口函数、线程优化级、线程名字、线程当前的堆栈指针等。
9+
10+
线程入口函数可以调用其它函数,函数内定义的局部变量将从它自己的栈里分配,所以不同的线程可以有相同的线程入口函数,但又独立运行。
11+
12+
线程栈可以由用户自己分配,也可以操作系统代为分配,线程栈的大小不应改过少(容易造成栈溢出),也不应该过大(造成浪费)。
13+
14+
线程ID在线程被创建时决定,是线程的标识符。
15+
16+
线程优先级和调度策略是SylixOS调度器进行任务调度的参数,SylixOS是一个实时操作系统(RTOS),始终运行一个优先级最高的就绪态任务。
17+
18+
##线程的基本状态
19+
线程的基本状态有如下几种:
20+
21+
1. 初始化 创建线程过程中线程的状态
22+
2. 就绪 线程可以运行的状态
23+
3. 等待 线程需要等行某些事件而不能继续的状态
24+
4. 僵死状态 线程退出后处理的状态
25+
26+
![threadstatus.png](/img/SylixOS-thread/threadstatus.png "")
27+
28+
##线程优先级
29+
线程优先级的范围处决于操作系统的配置,默认是0~255,0是最高优先级,255是最低优先级:
30+
31+
#define LW_PRIO_HIGHEST 0 /* SylixOS 最高优先级 */
32+
#define LW_PRIO_LOWEST 255 /* SylixOS 最低优先级 */
33+
34+
/*********************************************************************************************************
35+
优先级 (一般应用的最高优先级不能高于 LW_PRIO_CRITICAL 最低不能低过 LW_PRIO_LOW)
36+
*********************************************************************************************************/
37+
38+
#define LW_PRIO_EXTREME LW_PRIO_HIGHEST /* 最高优先级 */
39+
#define LW_PRIO_CRITICAL 50 /* 关键处理任务 */
40+
#define LW_PRIO_REALTIME 100 /* 实时处理任务 */
41+
#define LW_PRIO_HIGH 150 /* 高优先级任务 */
42+
#define LW_PRIO_NORMAL 200 /* 正常优先级 */
43+
#define LW_PRIO_LOW 250 /* 低优先级 */
44+
#define LW_PRIO_IDLE LW_PRIO_LOWEST /* 最低优先级 */
45+
46+
##线程调度策略
47+
SylixOS支持同优先级线程,同优先级线程的调度策略取决于当前线程的调度策略,如果当前线程的调度策略为先来先服务(FIFO),
48+
49+
那么必须等当前线程的阻塞时,同优先级的其它线程才有机会运行;如果当前线程的调度策略为轮转(RR),
50+
51+
则当当前线程的时间片用完时或当前线程的阻塞时,同优先级的其它线程才有机会运行。
52+
53+
#define LW_OPTION_SCHED_FIFO 0x01 /* 调度器 FIFO */
54+
#define LW_OPTION_SCHED_RR 0x00 /* 调度器 RR */
55+
56+
##线程相关 API
57+
SylixOS 提供了一套 POSIX 线程 API,其接口定义和行为完全符合 POSIX 线程标准,方便了现有 POSIX 程序移植到 SylixOS 上,
58+
59+
关于 POSIX 线程的编程,市面上有很多书籍,网上也已经有很多资料,这里不再详述,POSIX 线程的编程可以参考这篇文章 https://computing.llnl.gov/tutorials/pthreads/
60+
61+
SylixOS 系统内部线程 API 的命名一般以 API_Thread 开始,API 的声明位于 libsylixos/SylixOS/kernel/include/k_api.h 文件,
62+
63+
为了适应不同语言习惯的人,也提供了一套以 Lw_ 开头的 API,请查看 libsylixos/SylixOS/api 目录下的头文件。
64+
65+
##内部线程 API 相关的数据类型
66+
67+
线程句柄 LW_OBJECT_HANDLE
68+
线程 ID LW_OBJECT_ID
69+
线程属性 LW_CLASS_THREADATTR,*PLW_CLASS_THREADATTR
70+
线程函数 PTHREAD_START_ROUTINE
71+
72+
其中 线程函数 PTHREAD_START_ROUTINE 的类型需要理解,它被定义为如下的函数指针:
73+
74+
typedef PVOID (*PTHREAD_START_ROUTINE)(PVOID pvArg); /* 系统线程类型定义 */
75+
76+
所以线程函数一般形如:
77+
78+
PVOID thread_func (PVOID pvArg)
79+
{
80+
// do thing...
81+
return NULL;
82+
}
83+
84+
##一分钟实验
85+
86+
#include <SylixOS.h> // 包含 SylixOS.h 头文件
87+
88+
/*
89+
* 测试用线程函数
90+
*/
91+
PVOID TestThread (PVOID pvArg)
92+
{
93+
while (1) {
94+
printf("hello in thread\n");
95+
sleep(1);
96+
}
97+
}
98+
99+
LW_OBJECT_HANDLE hThread; // 定义线程句柄
100+
101+
hThread = API_ThreadCreate("t_test", TestThread, NULL, NULL); // 创建一个名为 t_test 的线程,线程函数为 TestThread,使用默认的线程属性,不接收线程 ID
102+

_posts/hello-world.md

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
title: Hello World
2+
---
3+
{% plantuml %}
4+
5+
digraph G {
6+
subgraph cluster0 {
7+
node [style=filled,color=white];
8+
style=filled;
9+
color=lightgrey;
10+
a0 -> a1 -> a2 -> a3;
11+
label = "process #1";
12+
}
13+
subgraph cluster1 {
14+
node [style=filled];
15+
b0 -> b1 -> b2 -> b3;
16+
label = "process #2";
17+
color=blue
18+
}
19+
start -> a0;
20+
start -> b0;
21+
a1 -> b3;
22+
b2 -> a3;
23+
a3 -> a0;
24+
a3 -> end;
25+
b3 -> end;
26+
start [shape=Mdiamond];
27+
end [shape=Msquare];
28+
}
29+
30+
{% endplantuml %}
31+
32+
# 欢迎使用 Cmd Markdown 编辑阅读器
33+
34+
------
35+
36+
我们理解您需要更便捷更高效的工具记录思想,整理笔记、知识,并将其中承载的价值传播给他人,**Cmd Markdown** 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown:
37+
38+
> * 整理知识,学习笔记
39+
> * 发布日记,杂文,所见所想
40+
> * 撰写发布技术文稿(代码支持)
41+
> * 撰写发布学术论文(LaTeX 公式支持)
42+
43+
![cmd-markdown-logo](https://www.zybuluo.com/static/img/logo.png)
44+
45+
除了您现在看到的这个 Cmd Markdown 在线版本,您还可以前往以下网址下载:
46+
47+
### [Windows/Mac/Linux 全平台客户端](https://www.zybuluo.com/cmd/)
48+
49+
> 请保留此份 Cmd Markdown 的欢迎稿兼使用说明,如需撰写新稿件,点击顶部工具栏右侧的 <i class="icon-file"></i> **新文稿** 或者使用快捷键 `Ctrl+Alt+N`
50+
51+
------
52+
53+
## 什么是 Markdown
54+
55+
Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题,分割不同的段落,**粗体** 或者 *斜体* 某些文字,更棒的是,它还可以
56+
57+
### 书写一个质能守恒公式[^LaTeX]
58+
59+
$$E=mc^2$$
60+
61+
### 高亮一段代码[^code]
62+
63+
```python
64+
@requires_authorization
65+
class SomeClass:
66+
pass
67+
68+
if __name__ == '__main__':
69+
# A comment
70+
print 'hello world'
71+
```
72+
73+
### 高效绘制 [流程图](https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown#7-流程图)
74+
75+
```flow
76+
st=>start: Start
77+
op=>operation: Your Operation
78+
cond=>condition: Yes or No?
79+
e=>end
80+
81+
st->op->cond
82+
cond(yes)->e
83+
cond(no)->op
84+
```
85+
86+
### 高效绘制 [序列图](https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown#8-序列图)
87+
88+
```seq
89+
Alice->Bob: Hello Bob, how are you?
90+
Note right of Bob: Bob thinks
91+
Bob-->Alice: I am good thanks!
92+
```
93+
94+
### 绘制表格
95+
96+
| 项目 | 价格 | 数量 |
97+
| -------- | -----: | :----: |
98+
| 计算机 | $1600 | 5 |
99+
| 手机 | $12 | 12 |
100+
| 管线 | $1 | 234 |
101+
102+
### 更详细语法说明
103+
104+
想要查看更详细的语法说明,可以参考我们准备的 [Cmd Markdown 简明语法手册][1],进阶用户可以参考 [Cmd Markdown 高阶语法手册][2] 了解更多高级功能。
105+
106+
总而言之,不同于其它 *所见即所得* 的编辑器:你只需使用键盘专注于书写文本内容,就可以生成印刷级的排版格式,省却在键盘和工具栏之间来回切换,调整内容和格式的麻烦。**Markdown 在流畅的书写和印刷级的阅读体验之间找到了平衡。** 目前它已经成为世界上最大的技术分享网站 GitHub 和 技术问答网站 StackOverFlow 的御用书写格式。
107+
108+
---
109+
110+
## 什么是 Cmd Markdown
111+
112+
您可以使用很多工具书写 Markdown,但是 Cmd Markdown 是这个星球上我们已知的、最好的 Markdown 工具——没有之一 :)因为深信文字的力量,所以我们和你一样,对流畅书写,分享思想和知识,以及阅读体验有极致的追求,我们把对于这些诉求的回应整合在 Cmd Markdown,并且一次,两次,三次,乃至无数次地提升这个工具的体验,最终将它演化成一个 **编辑/发布/阅读** Markdown 的在线平台——您可以在任何地方,任何系统/设备上管理这里的文字。
113+
114+
### 1. 实时同步预览
115+
116+
我们将 Cmd Markdown 的主界面一分为二,左边为**编辑区**,右边为**预览区**,在编辑区的操作会实时地渲染到预览区方便查看最终的版面效果,并且如果你在其中一个区拖动滚动条,我们有一个巧妙的算法把另一个区的滚动条同步到等价的位置,超酷!
117+
118+
### 2. 编辑工具栏
119+
120+
也许您还是一个 Markdown 语法的新手,在您完全熟悉它之前,我们在 **编辑区** 的顶部放置了一个如下图所示的工具栏,您可以使用鼠标在工具栏上调整格式,不过我们仍旧鼓励你使用键盘标记格式,提高书写的流畅度。
121+
122+
![tool-editor](https://www.zybuluo.com/static/img/toolbar-editor.png)
123+
124+
### 3. 编辑模式
125+
126+
完全心无旁骛的方式编辑文字:点击 **编辑工具栏** 最右测的拉伸按钮或者按下 `Ctrl + M`,将 Cmd Markdown 切换到独立的编辑模式,这是一个极度简洁的写作环境,所有可能会引起分心的元素都已经被挪除,超清爽!
127+
128+
### 4. 实时的云端文稿
129+
130+
为了保障数据安全,Cmd Markdown 会将您每一次击键的内容保存至云端,同时在 **编辑工具栏** 的最右侧提示 `已保存` 的字样。无需担心浏览器崩溃,机器掉电或者地震,海啸——在编辑的过程中随时关闭浏览器或者机器,下一次回到 Cmd Markdown 的时候继续写作。
131+
132+
### 5. 离线模式
133+
134+
在网络环境不稳定的情况下记录文字一样很安全!在您写作的时候,如果电脑突然失去网络连接,Cmd Markdown 会智能切换至离线模式,将您后续键入的文字保存在本地,直到网络恢复再将他们传送至云端,即使在网络恢复前关闭浏览器或者电脑,一样没有问题,等到下次开启 Cmd Markdown 的时候,她会提醒您将离线保存的文字传送至云端。简而言之,我们尽最大的努力保障您文字的安全。
135+
136+
### 6. 管理工具栏
137+
138+
为了便于管理您的文稿,在 **预览区** 的顶部放置了如下所示的 **管理工具栏**
139+
140+
![tool-manager](https://www.zybuluo.com/static/img/toolbar-manager.jpg)
141+
142+
通过管理工具栏可以:
143+
144+
<i class="icon-share"></i> 发布:将当前的文稿生成固定链接,在网络上发布,分享
145+
<i class="icon-file"></i> 新建:开始撰写一篇新的文稿
146+
<i class="icon-trash"></i> 删除:删除当前的文稿
147+
<i class="icon-cloud"></i> 导出:将当前的文稿转化为 Markdown 文本或者 Html 格式,并导出到本地
148+
<i class="icon-reorder"></i> 列表:所有新增和过往的文稿都可以在这里查看、操作
149+
<i class="icon-pencil"></i> 模式:切换 普通/Vim/Emacs 编辑模式
150+
151+
### 7. 阅读工具栏
152+
153+
![tool-manager](https://www.zybuluo.com/static/img/toolbar-reader.jpg)
154+
155+
通过 **预览区** 右上角的 **阅读工具栏**,可以查看当前文稿的目录并增强阅读体验。
156+
157+
工具栏上的五个图标依次为:
158+
159+
<i class="icon-list"></i> 目录:快速导航当前文稿的目录结构以跳转到感兴趣的段落
160+
<i class="icon-chevron-sign-left"></i> 视图:互换左边编辑区和右边预览区的位置
161+
<i class="icon-adjust"></i> 主题:内置了黑白两种模式的主题,试试 **黑色主题**,超炫!
162+
<i class="icon-desktop"></i> 阅读:心无旁骛的阅读模式提供超一流的阅读体验
163+
<i class="icon-fullscreen"></i> 全屏:简洁,简洁,再简洁,一个完全沉浸式的写作和阅读环境
164+
165+
### 8. 阅读模式
166+
167+
**阅读工具栏** 点击 <i class="icon-desktop"></i> 或者按下 `Ctrl+Alt+M` 随即进入独立的阅读模式界面,我们在版面渲染上的每一个细节:字体,字号,行间距,前背景色都倾注了大量的时间,努力提升阅读的体验和品质。
168+
169+
### 9. 标签、分类和搜索
170+
171+
在编辑区任意行首位置输入以下格式的文字可以标签当前文档:
172+
173+
标签: 未分类
174+
175+
标签以后的文稿在【文件列表】(Ctrl+Alt+F)里会按照标签分类,用户可以同时使用键盘或者鼠标浏览查看,或者在【文件列表】的搜索文本框内搜索标题关键字过滤文稿,如下图所示:
176+
177+
![file-list](https://www.zybuluo.com/static/img/file-list.png)
178+
179+
### 10. 文稿发布和分享
180+
181+
在您使用 Cmd Markdown 记录,创作,整理,阅读文稿的同时,我们不仅希望它是一个有力的工具,更希望您的思想和知识通过这个平台,连同优质的阅读体验,将他们分享给有相同志趣的人,进而鼓励更多的人来到这里记录分享他们的思想和知识,尝试点击 <i class="icon-share"></i> (Ctrl+Alt+P) 发布这份文档给好友吧!
182+
183+
------
184+
185+
再一次感谢您花费时间阅读这份欢迎稿,点击 <i class="icon-file"></i> (Ctrl+Alt+N) 开始撰写新的文稿吧!祝您在这里记录、阅读、分享愉快!
186+
187+
作者 [@ghosert][3]
188+
2015 年 04月 29日
189+
190+
[^LaTeX]: 支持 **LaTeX** 编辑显示支持,例如:$\sum_{i=1}^n a_i=0$, 访问 [MathJax][4] 参考更多使用方法。
191+
192+
[^code]: 代码高亮功能支持包括 Java, Python, JavaScript 在内的,**四十一**种主流编程语言。
193+
194+
[1]: https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown
195+
[2]: https://www.zybuluo.com/mdeditor?url=https://www.zybuluo.com/static/editor/md-help.markdown#cmd-markdown-高阶语法手册
196+
[3]: http://weibo.com/ghosert
197+
[4]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
198+

categories/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
layout: categories
2+
title: categories
3+
---

img/SylixOS-thread/threadstatus.png

16.9 KB
Loading

tag/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
layout: tags
2+
title: tags
3+
---

0 commit comments

Comments
 (0)