打印

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

[复制链接]
6843|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符合这个原则。













相关帖子

沙发
keer_zu| | 2015-9-7 10:22 | 只看该作者
什么是pt协程,通俗介绍一下啊。

使用特权

评论回复
板凳
wuhenyouyu|  楼主 | 2015-9-7 10:41 | 只看该作者
keer_zu 发表于 2015-9-7 10:22
什么是pt协程,通俗介绍一下啊。

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

使用特权

评论回复
地板
keer_zu| | 2015-9-7 10:44 | 只看该作者
wuhenyouyu 发表于 2015-9-7 10:41
百度都能百度到的东西,我实在不想再抄写一遍了,百度都不会的同志,查看我的博客吧。
http://blog.csdn. ...

简单概括一下吧,太长了。

使用特权

评论回复
5
wuhenyouyu|  楼主 | 2015-9-7 10:48 | 只看该作者
keer_zu 发表于 2015-9-7 10:44
简单概括一下吧,太长了。

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

使用特权

评论回复
6
Simon21ic| | 2015-9-7 12:02 | 只看该作者
就是一种资源占用极少的协作式多任务的实现方式,使用C语言的行号作为状态。这个加上事件驱动,加上面向对象,就是我的构架了。

使用特权

评论回复
7
菜鸟同学| | 2015-9-7 13:13 | 只看该作者
好像很牛X的样子。

使用特权

评论回复
8
菜鸟同学| | 2015-9-7 13:14 | 只看该作者
Simon21ic 发表于 2015-9-7 12:02
就是一种资源占用极少的协作式多任务的实现方式,使用C语言的行号作为状态。这个加上事件驱动,加上面向对 ...

裸奔架构,还是带任务切换的架构?

使用特权

评论回复
9
wuhenyouyu|  楼主 | 2015-9-7 13:34 | 只看该作者
菜鸟同学 发表于 2015-9-7 13:14
裸奔架构,还是带任务切换的架构?

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

使用特权

评论回复
10
keer_zu| | 2015-9-7 13:39 | 只看该作者
wuhenyouyu 发表于 2015-9-7 13:34
裸奔实现任务切换的架构!!!!

这个称不上”架构“吧

使用特权

评论回复
11
wuhenyouyu|  楼主 | 2015-9-7 14:05 | 只看该作者
keer_zu 发表于 2015-9-7 13:39
这个称不上”架构“吧

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

使用特权

评论回复
12
Simon21ic| | 2015-9-7 14:55 | 只看该作者
keer_zu 发表于 2015-9-7 13:39
这个称不上”架构“吧

我也觉得单单PT还不算构架,只是一种多任务的实现方法

使用特权

评论回复
13
Simon21ic| | 2015-9-7 14:57 | 只看该作者
wuhenyouyu 发表于 2015-9-7 14:05
看你怎么理解了,我以前的师傅还说所有的微内核都不算操作系统呢!咱们主要是谈论技术,实用、能给我们编 ...

另外有一个帖子在讨论操作系统,我不明白为啥微内核就不能是操作系统。关键还看,是否具备操作系统的一些功能

使用特权

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

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

使用特权

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

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

使用特权

评论回复
16
keer_zu| | 2015-9-7 15:20 | 只看该作者
wuhenyouyu 发表于 2015-9-7 15:16
#define LC_CONCAT2(s1, s2) s1##s2
这个句话的“##”什么意思??是字符串拼接符吗? ...

百度一下啊:
http://www.educity.cn/wenda/301889.html
:lol

使用特权

评论回复
17
wuhenyouyu|  楼主 | 2015-9-7 15:21 | 只看该作者
keer_zu 发表于 2015-9-7 15:20
百度一下啊:
http://www.educity.cn/wenda/301889.html

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

使用特权

评论回复
18
wuhenyouyu|  楼主 | 2015-9-7 15:26 | 只看该作者
keer_zu 发表于 2015-9-7 15:20
百度一下啊:
http://www.educity.cn/wenda/301889.html

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

使用特权

评论回复
19
逍遥派掌门| | 2015-9-7 22:31 | 只看该作者
"有位前辈说的好:一切延时都是编程的敌人。"

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

使用特权

评论回复
20
wuhenyouyu|  楼主 | 2015-9-7 22:46 | 只看该作者
逍遥派掌门 发表于 2015-9-7 22:31
"有位前辈说的好:一切延时都是编程的敌人。"

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

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

使用特权

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

本版积分规则

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

8

主题

162

帖子

3

粉丝