打印

PT协程资料-----资料已下架

[复制链接]
6746|62
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhenyouyu|  楼主 | 2015-9-7 09:48 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wuhenyouyu 于 2015-9-25 10:58 编辑

看了下论坛里的前辈关于单片机裸编的程序架构的谈论,我最近也正好在思考这个问题,所以读了一些资料,有位前辈说的好:一切延时都是编程的敌人。我感觉裸编就是要消除延时等待和做好条件触发。欢迎大家谈论。


对于‘##’的理解:
这个就是字符串拼接,A##B,它就是简单的把A和B拼接在一起。如果A和B都表示宏,也不再展开。
#define A   01
#define B   02

#define  concat(S1,S2)    S1##S2

#concat1(s1,s2)           concat(s1,s2)


concat(A,B)->A##B->AB   不再进行宏替代。

concat1(A,B)在VS2010下得到的结果是0102,我感觉过程如下:

concat1(A,B)->concat(A,B)->concat(01,02)->01##02->0102

又看了C99标准,在6.10.3.5,156页有个例子:
EXAMPLE 4 To illustrate the rules for creating character string literals and concatenating tokens, the
sequence
#define str(s)              # s
#define xstr(s)            str(s)
#define debug(s, t)     printf("x" # s "= %d, x" # t "= %s", \
                                  x ## s, x ## t)
#define INCFILE(n)     vers ## n // from previous #include example
#define glue(a, b)       a ## b
#define xglue(a, b)     glue(a, b)
#define HIGHLOW      "hello"
#define LOW              LOW ", world"



debug(1, 2);
fputs(str(strncmp("abc\0d", "abc", '\4') // this goes away
== 0) str(: @\n), s);
#include xstr(INCFILE(2).h)
glue(HIGH, LOW);
xglue(HIGH, LOW);

results in:
printf("x" "1" "= %d, x" "2" "= %s", x1, x2);
fputs(
"strncmp(\"abc\\0d\", \"abc\", '\\4') == 0" ": @\n",
s);
#include "vers2.h" (after macro replacement, before file access)
"hello";
"hello" ", world"


or, after concatenation of the character string literals,
printf("x1= %d, x2= %s", x1, x2);
fputs(
"strncmp(\"abc\\0d\", \"abc\", '\\4') == 0: @\n",
s);
#include "vers2.h" (after macro replacement, before file access)
"hello";
"hello, world"


首先分析:glue(HIGH, LOW);结果为"hello";
glue(HIGH, LOW)->HIGH ## LOW->HIGHLOW->"hello";

再分析:xglue(HIGH, LOW)结果"hello, world"
xglue(HIGH, LOW)->glue(HIGH,LOW)->glue(HIGH,LOW ", world")->HIGH ## LOW ", world"->HIGHLOW ", world"->"hello"", world"->"hello, world"
上面是宏有外而内替换,好像C99并没有规定宏替换顺序,只是说遇到#和##不在宏展开。VS2010符合这个原则。













相关帖子

沙发
wuhenyouyu|  楼主 | 2015-9-7 10:41 | 显示全部楼层
keer_zu 发表于 2015-9-7 10:22
什么是pt协程,通俗介绍一下啊。

百度都能百度到的东西,我实在不想再抄写一遍了,百度都不会的同志,查看我的博客吧。
http://blog.csdn.net/wuhenyouyuyouyu/article/details/48262447

使用特权

评论回复
板凳
wuhenyouyu|  楼主 | 2015-9-7 10:48 | 显示全部楼层
keer_zu 发表于 2015-9-7 10:44
简单概括一下吧,太长了。

最轻量级的C协程库,大概不到100行,不依赖任何库,每个协程的内存开销只有一个指针那么大。

使用特权

评论回复
地板
wuhenyouyu|  楼主 | 2015-9-7 13:34 | 显示全部楼层
菜鸟同学 发表于 2015-9-7 13:14
裸奔架构,还是带任务切换的架构?

裸奔实现任务切换的架构!!!!

使用特权

评论回复
5
wuhenyouyu|  楼主 | 2015-9-7 14:05 | 显示全部楼层
keer_zu 发表于 2015-9-7 13:39
这个称不上”架构“吧

看你怎么理解了,我以前的师傅还说所有的微内核都不算操作系统呢!咱们主要是谈论技术,实用、能给我们编程带来好处,能提升编程技巧和思想,都是好的。我不太想谈论命名,感觉没有意义,您说呢???

使用特权

评论回复
6
wuhenyouyu|  楼主 | 2015-9-7 15:06 | 显示全部楼层
Simon21ic 发表于 2015-9-7 14:57
另外有一个帖子在讨论操作系统,我不明白为啥微内核就不能是操作系统。关键还看,是否具备操作系统的一些 ...

我以前的师傅在单片机行业十几年了,他认为除了WINDOWS,LINUX,UNIX等这种大型的操作系统,上小操作系统意义不大,个人的观点吧。

使用特权

评论回复
7
wuhenyouyu|  楼主 | 2015-9-7 15:16 | 显示全部楼层
Simon21ic 发表于 2015-9-7 14:57
另外有一个帖子在讨论操作系统,我不明白为啥微内核就不能是操作系统。关键还看,是否具备操作系统的一些 ...

#define LC_CONCAT2(s1, s2) s1##s2
这个句话的“##”什么意思??是字符串拼接符吗?

使用特权

评论回复
8
wuhenyouyu|  楼主 | 2015-9-7 15:21 | 显示全部楼层
keer_zu 发表于 2015-9-7 15:20
百度一下啊:
http://www.educity.cn/wenda/301889.html

牛人啊。我找了半天,没找到!

使用特权

评论回复
9
wuhenyouyu|  楼主 | 2015-9-7 15:26 | 显示全部楼层
keer_zu 发表于 2015-9-7 15:20
百度一下啊:
http://www.educity.cn/wenda/301889.html

是我搜的问题不对,我找到详细答案了,非常感谢!

使用特权

评论回复
10
wuhenyouyu|  楼主 | 2015-9-7 22:46 | 显示全部楼层
逍遥派掌门 发表于 2015-9-7 22:31
"有位前辈说的好:一切延时都是编程的敌人。"

一切的编程都是在延时。   所谓的 “前辈”是编程的敌人。 ...

我是真的不想口舌之争,感觉浪费时间。多讨论技术。这位前辈是说,裸编就是状态量轮训,消除掉所有延时!操作系统里任务主动放弃控制权也是遇到延时挂起!

使用特权

评论回复
11
wuhenyouyu|  楼主 | 2015-9-8 10:43 | 显示全部楼层
本帖最后由 wuhenyouyu 于 2015-9-8 10:47 编辑
Simon21ic 发表于 2015-9-8 10:38
事件驱动的协作式内核算不算裸编?

我感觉没有真正的任务栈,不能真正实现任务调度,任务不能被随时强制挂起,都不算带操作系统。你的架构,任务1被触发,正在执行,这时任务2被触发(不是任务1触发的),任务2优先级比任务1高,任务2要运行,任务2运行完,接着执行任务1.如果你的任务1不主动放弃执行权,任务2能执行吗?

使用特权

评论回复
12
wuhenyouyu|  楼主 | 2015-9-8 10:45 | 显示全部楼层
wuhenyouyu 发表于 2015-9-8 10:43
我感觉没有真正的任务栈,不能真正实现任务调度,任务不能被随时强制挂起,都不算带操作系统。 ...

你的架构,任务1被触发,正在执行,这时任务2被触发,任务2优先级比任务1高,任务2要运行,任务2运行完,接着执行任务1.如果你的任务1不主动放弃执行权,任务2能执行吗?

使用特权

评论回复
13
wuhenyouyu|  楼主 | 2015-9-8 10:50 | 显示全部楼层
Simon21ic 发表于 2015-9-8 10:47
也就是说,要实现操作系统,内核中必须实现任务的优先级?

不是要实现任务的优先级,是任务能被强制关起,不是主动放弃,其他的任务才能执行。

使用特权

评论回复
14
wuhenyouyu|  楼主 | 2015-9-8 10:53 | 显示全部楼层
Simon21ic 发表于 2015-9-8 10:47
也就是说,要实现操作系统,内核中必须实现任务的优先级?
对于很多其他协作式的内核,即使可以实现很多操 ...

任务优先级只是内核实现任务调度的一种策略。如果你的内核没有任务优先级的概念,也能实现任务的调度,当然也算微内核。

使用特权

评论回复
15
wuhenyouyu|  楼主 | 2015-9-8 10:56 | 显示全部楼层
Simon21ic 发表于 2015-9-8 10:54
哦,理解,那就是必须是抢占式的内核,不能是协作式的内核。
也就是说,比如FreeRTOS设置为抢占式内核就 ...

我感觉不是抢占是内核,意义不大。个人观点啊,:lol

使用特权

评论回复
16
wuhenyouyu|  楼主 | 2015-9-8 11:03 | 显示全部楼层
Simon21ic 发表于 2015-9-8 11:00
linux早期版本就不是抢占式。
对操作系统,我也是个人没观点,所以想知道大家的观点,以及理由。
我只是 ...

你上操作系统意义是什么?为什么要上操作系统?他解决了你什么问题?我感觉上操作系统之前,把这些问题解决了,才是关键。至于上什么内核,用什么架构,我感觉具体问题,具体分析,不能一概而论。

使用特权

评论回复
17
wuhenyouyu|  楼主 | 2015-9-8 11:06 | 显示全部楼层
Simon21ic 发表于 2015-9-8 11:00
linux早期版本就不是抢占式。
对操作系统,我也是个人没观点,所以想知道大家的观点,以及理由。
我只是 ...

我是感觉,你花费了大量硬件和软件资源,增加了成本,上个内核,对与你的产品意义大不大,才是关键。用户才不关心你用的内核,什么语言。用户关心的是性价比和产品质量。

使用特权

评论回复
18
wuhenyouyu|  楼主 | 2015-9-8 11:14 | 显示全部楼层
Simon21ic 发表于 2015-9-8 11:10
不能一概而论?你不是说协作式内核意义不大吗?没明白你的意思

如果我的产品就是现实一个灯闪烁,我是上抢占式内核,还是协作试内核???如果我的系统很复杂,但是对实时性要求不要,我上什么系统?如果我的系统复杂性一般,但是对实时性要求高,你又上什么内核?我所说的意义不大只是相对而言的!

使用特权

评论回复
19
wuhenyouyu|  楼主 | 2015-9-8 11:17 | 显示全部楼层
hunyuanqi 发表于 2015-9-8 11:14
如果你真正掌握了嵌入式操作系统的思想精髓,那你就不需要嵌入式操作系统。有自己的软件架构就行了。

在你 ...

这个我同意,我总是感觉不管什么内核,什么架构,能解决目前问题,花费最少,就是最好的。至于说把一个架构归于什么类,就像人们讨论哪种编程风格好,我总感觉是个人理解和爱好,真的不重要。

使用特权

评论回复
20
wuhenyouyu|  楼主 | 2015-9-8 13:29 | 显示全部楼层
Simon21ic 发表于 2015-9-8 11:30
是不重要,也不会影响我自己用自己的构架,只是在其他讨论里,经常提到操作系统,所以我想弄明白而已 ...

我感觉,您应该用用UCOS III等这样的操作系统,自己用过了,才有体会!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://otakutechnology.haotui.com/bbs.php技术爱好

8

主题

162

帖子

3

粉丝