打印

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

[复制链接]
楼主: wuhenyouyu
手机看帖
扫描二维码
随时随地手机跟帖
41
wuhenyouyu|  楼主 | 2015-9-8 13:29 | 只看该作者 回帖奖励 |倒序浏览
Simon21ic 发表于 2015-9-8 11:30
是不重要,也不会影响我自己用自己的构架,只是在其他讨论里,经常提到操作系统,所以我想弄明白而已 ...

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

使用特权

评论回复
42
Simon21ic| | 2015-9-8 13:53 | 只看该作者
本帖最后由 Simon21ic 于 2015-9-8 14:02 编辑
wuhenyouyu 发表于 2015-9-8 13:29
我感觉,您应该用用UCOS III等这样的操作系统,自己用过了,才有体会!

UcosII和,freeRTOS可以不?我都用过,源代码也都看过。linux的内核代码也看过。ucosII大学里就看了源代码。
Linux的规模比不了,其他很多RTOS能做的,我用自己构架也一样可以,关键部分的实时性反而更好,所以,才对操作系统越来越迷糊。
我有一个朋友做的lwip的wifi模块,使用RTOS的话,资源占用将近50K flash,不是用RTOS的话,占用40K,使用callback方式,据说希望优化到30K。我自己的构架做的,flash占用20K左右,而且可以多任务,socket方式,一些其他协议补充完整,估计也不到30K。当然,这个的实时性要求不是最高。
真正实时性要求高的,应该都是在中断里直接处理的,而不会是中断里,唤醒什么任务,再做上下文切换,再去处理。

使用特权

评论回复
43
wuhenyouyu|  楼主 | 2015-9-8 14:21 | 只看该作者
Simon21ic 发表于 2015-9-8 13:53
UcosII和,freeRTOS可以不?我都用过,源代码也都看过。linux的内核代码也看过。ucosII大学里就看了源代码 ...

高手啊,什么都用过,不知道您纠结什么,难道是自己用的架构算不算操作系统???我还是去heak我的代码了!有问题请教您,希望您不吝赐教!:lol

使用特权

评论回复
44
wuhenyouyu|  楼主 | 2015-9-8 14:26 | 只看该作者
Simon21ic 发表于 2015-9-8 13:53
UcosII和,freeRTOS可以不?我都用过,源代码也都看过。linux的内核代码也看过。ucosII大学里就看了源代码 ...

我正好遇到一个问题:
#ifndef DisINT()
    #define    DisINT()           {INTCON &=0b00111111;}
#endif

为什么#ifndef 后面的标志符不能带()???????

使用特权

评论回复
45
soul11201| | 2015-9-8 14:31 | 只看该作者
看看。。。

使用特权

评论回复
46
Simon21ic| | 2015-9-8 14:40 | 只看该作者
wuhenyouyu 发表于 2015-9-8 14:21
高手啊,什么都用过,不知道您纠结什么,难道是自己用的架构算不算操作系统???我还是去heak我的代码了 ...

用过这些的人很多,用过了,才会发现很多功能很接近。我的构架里也有semaphore,也有critical,其实就是和操作系统里,一样的概念。

使用特权

评论回复
47
Simon21ic| | 2015-9-8 14:41 | 只看该作者
wuhenyouyu 发表于 2015-9-8 14:26
我正好遇到一个问题:
#ifndef DisINT()
    #define    DisINT()           {INTCON &=0b00111111;}

我相信你C语言肯定没问题的,呵呵
不过我建议加上do {...}while (0)

使用特权

评论回复
48
wuhenyouyu|  楼主 | 2015-9-8 15:20 | 只看该作者
Simon21ic 发表于 2015-9-8 14:41
我相信你C语言肯定没问题的,呵呵
不过我建议加上do {...}while (0)

下面这段代码怎么优化呢??我想还几天,也没有想出好的办法?????
void EEPROM_Read(void*        data,const  unsigned char address,const unsigned char n,const TYPE_String typedata)
{
        unsigned char         i=0;
        unsigned char        addr=0;

        char*                        data_char;
        unsigned char*        data_uchar;


        addr                =address;
        data_char        =data;
        data_uchar        =data;
       

        switch(typedata)
        {
                case wTYPE_CHAR:
                                for(i=0;i!=n;i++)
                                {
                                        EEPROM_Read_data(addr);
                                        *data_char=EEDATA;
                                        addr++;
                                        data_char++;
                                }                               
                        break;
                case wTYPE_UCHAR:
                                for(i=0;i!=n;i++)
                                {
                                        EEPROM_Read_data(addr);
                                        *data_uchar=EEDATA;
                                        addr++;
                                        data_uchar++;
                                }
                        break;
                default:
                        break;
        }
}

使用特权

评论回复
49
wuhenyouyu|  楼主 | 2015-9-8 15:21 | 只看该作者
Simon21ic 发表于 2015-9-8 14:41
我相信你C语言肯定没问题的,呵呵
不过我建议加上do {...}while (0)

哈哈,见笑了!!!!!!!!!

使用特权

评论回复
50
wuhenyouyu|  楼主 | 2015-9-9 13:38 | 只看该作者
Simon21ic 发表于 2015-9-8 14:41
我相信你C语言肯定没问题的,呵呵
不过我建议加上do {...}while (0)

#define        concat1(X, Y)                 X##Y
#define        concat(S1, S2)                concat1(S1, S2)

#pragma romdata
rom const char*                Version_date=(rom const char*)concat(__FILE__,__DATE__);                //生成日期
#pragma romdata

Error [1105] symbol '__FILE____DATE__' has not been defined

这个错误怎么解决??我看网上就是这么做的?还有这个编译器居然不支持__TIME__??

使用特权

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

#define        concat1(X, Y)                 X##Y
#define        concat(S1, S2)                concat1(S1, S2)

#pragma romdata
rom const char*                Version_date=(rom const char*)concat(__FILE__,__DATE__);                //生成日期
#pragma romdata

Error [1105] symbol '__FILE____DATE__' has not been defined

这个错误怎么解决??我看网上就是这么做的?还有这个编译器居然不支持__TIME__??

使用特权

评论回复
52
keer_zu| | 2015-9-9 14:32 | 只看该作者
wuhenyouyu 发表于 2015-9-9 13:39
#define        concat1(X, Y)                 X##Y
#define        concat(S1, S2)                con ...

你把两个拼到一起了,当然不支持了。

使用特权

评论回复
53
wuhenyouyu|  楼主 | 2015-9-9 15:57 | 只看该作者
本帖最后由 wuhenyouyu 于 2015-9-9 15:58 编辑
keer_zu 发表于 2015-9-9 14:32
你把两个拼到一起了,当然不支持了。

__FILE__和__DATE__在拼之前会宏展开,为了解决##不能宏展开问题,网上说定义两次:

#define        concat(X, Y)                 X##Y

改为:
#define        concat1(X, Y)                 X##Y
#define        concat(S1, S2)                concat1(S1, S2)


我改了,还是没有宏展开。

使用特权

评论回复
54
keer_zu| | 2015-9-9 16:05 | 只看该作者
wuhenyouyu 发表于 2015-9-9 15:57
__FILE__和__DATE__在拼之前会宏展开,为了解决##不能宏展开问题,网上说定义两次:

#define        concat(X, Y ...

:L

使用特权

评论回复
55
Simon21ic| | 2015-9-9 16:07 | 只看该作者
wuhenyouyu 发表于 2015-9-9 15:57
__FILE__和__DATE__在拼之前会宏展开,为了解决##不能宏展开问题,网上说定义两次:

#define        concat(X, Y ...

__FILE__和__DATA__都是字符串,直接:
const char * version = __FILE__ __DATA__;
可以不?

使用特权

评论回复
56
wuhenyouyu|  楼主 | 2015-9-9 16:08 | 只看该作者

有什么不对吗?网上都是这么拼的,下面是PT协程的例子,他就是这么拼的,按着你的理解,它是不能运行的????                                                                     
#define LC_RESUME(s)                                \
  do {                                                \
    if(s != NULL) {                                \
      goto *s;                                        \
    }                                                \
  } while(0)

#define LC_CONCAT2(s1, s2) s1##s2
#define LC_CONCAT(s1, s2) LC_CONCAT2(s1, s2)

#define LC_SET(s)                                \
  do {                                                \
    LC_CONCAT(LC_LABEL, __LINE__):                   \
    (s) = &&LC_CONCAT(LC_LABEL, __LINE__);        \
  } while(0)

#define LC_END(s)

使用特权

评论回复
57
wuhenyouyu|  楼主 | 2015-9-9 16:16 | 只看该作者
Simon21ic 发表于 2015-9-9 16:07
__FILE__和__DATA__都是字符串,直接:
const char * version = __FILE__ __DATA__;
可以不? ...

我想知道为什么我这么做不可以??您给的方法,我试试。

使用特权

评论回复
58
Simon21ic| | 2015-9-9 19:42 | 只看该作者
wuhenyouyu 发表于 2015-9-9 16:16
我想知道为什么我这么做不可以??您给的方法,我试试。

这个是基本C语法的问题了吧,C89和C99文档里应该有的

使用特权

评论回复
59
逍遥派掌门| | 2015-9-10 17:54 | 只看该作者
wuhenyouyu 发表于 2015-9-7 22:46
我是真的不想口舌之争,感觉浪费时间。多讨论技术。这位前辈是说,裸编就是状态量轮训,消除掉所有延时! ...

编程里要消除的是: 延迟, 不是 延时

现在很多体育老师在教语文么?

使用特权

评论回复
60
wuhenyouyu|  楼主 | 2015-9-10 18:58 | 只看该作者
逍遥派掌门 发表于 2015-9-10 17:54
编程里要消除的是: 延迟, 不是 延时!

现在很多体育老师在教语文么? ...

请教:延迟和延时,对于讨论的问题有什么帮助?对于编程有什么帮助?

使用特权

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

本版积分规则