打印

有偿求助环形缓冲器用法—300RMB

[复制链接]
楼主: 冷漠
手机看帖
扫描二维码
随时随地手机跟帖
41
顶楼上,是单挑,而且单挑一群的那种。

使用特权

评论回复
42
desert_hawk| | 2010-1-7 18:53 | 只看该作者
“每个操作系统服务函数都是一句原语,——原子性语句。它的特点就是从开始执行起,就必须无阻碍地连续执行到结束。”
这叫看过操作系统的书?

使用特权

评论回复
43
desert_hawk| | 2010-1-7 18:53 | 只看该作者
本帖最后由 desert_hawk 于 2010-1-7 18:59 编辑

INT8U  OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
{
    OS_TCB    *ptcb;
#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL();
    ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
    if (ptcb != (OS_TCB *)0) {
        OSTCBFreeList            = ptcb->OSTCBNext;        /* Update pointer to free TCB list          */
        OS_EXIT_CRITICAL();
        ptcb->OSTCBStkPtr        = ptos;                   /* Load Stack pointer in TCB                */
        ptcb->OSTCBPrio          = prio;                   /* Load task priority into TCB              */
        ptcb->OSTCBStat          = OS_STAT_RDY;            /* Task is ready to run                     */
        ptcb->OSTCBStatPend      = OS_STAT_PEND_OK;        /* Clear pend status                        */
        ptcb->OSTCBDly           = 0;                      /* Task is not delayed                      */

#if OS_TASK_CREATE_EXT_EN > 0
        ptcb->OSTCBExtPtr        = pext;                   /* Store pointer to TCB extension           */
        ptcb->OSTCBStkSize       = stk_size;               /* Store stack size                         */
        ptcb->OSTCBStkBottom     = pbos;                   /* Store pointer to bottom of stack         */
        ptcb->OSTCBOpt           = opt;                    /* Store task options                       */
        ptcb->OSTCBId            = id;                     /* Store task ID                            */
#else
        pext                     = pext;                   /* Prevent compiler warning if not used     */
        stk_size                 = stk_size;
        pbos                     = pbos;
        opt                      = opt;
        id                       = id;
#endif

#if OS_TASK_DEL_EN > 0
        ptcb->OSTCBDelReq        = OS_ERR_NONE;
#endif

#if OS_LOWEST_PRIO <= 63
        ptcb->OSTCBY             = (INT8U)(prio >> 3);          /* Pre-compute X, Y, BitX and BitY     */
        ptcb->OSTCBX             = (INT8U)(prio & 0x07);
        ptcb->OSTCBBitY          = (INT8U)(1 << ptcb->OSTCBY);
        ptcb->OSTCBBitX          = (INT8U)(1 << ptcb->OSTCBX);
#else
        ptcb->OSTCBY             = (INT8U)((prio >> 4) & 0xFF); /* Pre-compute X, Y, BitX and BitY     */
        ptcb->OSTCBX             = (INT8U) (prio & 0x0F);
        ptcb->OSTCBBitY          = (INT16U)(1 << ptcb->OSTCBY);
        ptcb->OSTCBBitX          = (INT16U)(1 << ptcb->OSTCBX);
#endif

#if (OS_EVENT_EN)
        ptcb->OSTCBEventPtr      = (OS_EVENT  *)0;         /* Task is not pending on an  event         */
#if (OS_EVENT_MULTI_EN > 0)
        ptcb->OSTCBEventMultiPtr = (OS_EVENT **)0;         /* Task is not pending on any events        */
#endif
#endif

#if (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
        ptcb->OSTCBFlagNode  = (OS_FLAG_NODE *)0;          /* Task is not pending on an event flag     */
#endif

#if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
        ptcb->OSTCBMsg       = (void *)0;                  /* No message received                      */
#endif

#if OS_TASK_PROFILE_EN > 0
        ptcb->OSTCBCtxSwCtr    = 0L;                       /* Initialize profiling variables           */
        ptcb->OSTCBCyclesStart = 0L;
        ptcb->OSTCBCyclesTot   = 0L;
        ptcb->OSTCBStkBase     = (OS_STK *)0;
        ptcb->OSTCBStkUsed     = 0L;
#endif

#if OS_TASK_NAME_SIZE > 1
        ptcb->OSTCBTaskName[0] = '?';                      /* Unknown name at task creation            */
        ptcb->OSTCBTaskName[1] = OS_ASCII_NUL;
#endif

        OSTCBInitHook(ptcb);

        OSTaskCreateHook(ptcb);                            /* Call user defined hook                   */

        OS_ENTER_CRITICAL();
        OSTCBPrioTbl[prio] = ptcb;
        ptcb->OSTCBNext    = OSTCBList;                    /* Link into TCB chain                      */
        ptcb->OSTCBPrev    = (OS_TCB *)0;
        if (OSTCBList != (OS_TCB *)0) {
            OSTCBList->OSTCBPrev = ptcb;
        }
        OSTCBList               = ptcb;
        OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
        OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
        OSTaskCtr++;                                       /* Increment the #tasks counter             */
        OS_EXIT_CRITICAL();
        return (OS_ERR_NONE);
    }
    OS_EXIT_CRITICAL();
    return (OS_ERR_TASK_NO_MORE_TCB);
}

使用特权

评论回复
44
desert_hawk| | 2010-1-7 19:04 | 只看该作者
“每个操作系统服务函数都是一句原语,——原子性语句。它的特点就是从开始执行起,就必须无阻碍地连续执行到结束。”
-----------如果一个操作系统服务函数所要做的工作比较多,像43楼的那样,那就一直关中断?无论是操作系统还是应用程序,都应该尽量减小关中断时间,“最大中断延迟”也是衡量一个操作系统性能的重要指标。还“它的特点就是从开始执行起,就必须无阻碍地连续执行到结束。”让我说什么好。需要互斥的地方叫“临界段”,一个操作系统服务函数可能有多个临界段,而临界段的时间是越短越好。
另外,所长的那个程序,mCount不是PUSH和POP都在用?不是共享资源?是我做梦呢还是你做梦呢?

使用特权

评论回复
45
desert_hawk| | 2010-1-7 19:11 | 只看该作者
本帖最后由 desert_hawk 于 2010-1-7 20:04 编辑

去看看OSTaskDel (INT8U prio)函数里OS_Dummy();函数的作用吧,如果真如你所说,操作系统的每个服务函数都必须无障碍地连续运行到结束,那这个函数还有啥用?

使用特权

评论回复
46
一只小绵羊| | 2010-1-7 19:27 | 只看该作者
ls你的签名写错了????easy???esay?

使用特权

评论回复
47
desert_hawk| | 2010-1-7 19:31 | 只看该作者
ls你的签名写错了????easy???esay?
一只小绵羊 发表于 2010-1-7 19:27

呵呵,刚发现,改正。

使用特权

评论回复
48
desert_hawk| | 2010-1-7 19:37 | 只看该作者
顶楼上,是单挑,而且单挑一群的那种。
zhouxin1980 发表于 2010-1-7 17:38

你是唯恐天下不乱是吧?

使用特权

评论回复
49
desert_hawk| | 2010-1-7 21:19 | 只看该作者
还有啥问题赶紧说啊,过了今天,明天鄙人将不再奉陪。发现上21ic也是件不利于身心健康的事。每天吵来吵去,还招来一帮看热闹的。没劲。

使用特权

评论回复
50
desert_hawk| | 2010-1-7 21:42 | 只看该作者
从某些人的回帖来看,纯粹是心理扭曲,一天到晚阴阳怪气的,好像就他牛X,实际呢?是个什么?

使用特权

评论回复
51
desert_hawk| | 2010-1-7 21:48 | 只看该作者
早发现一个怪问题:凡是冷漠大侠发表过回帖的帖子,一般就很少再有人说话,即便是说话,也很少有人持与冷漠大侠不同的意见。为什么呢?是因为冷漠大侠全都对吗?据我观察,不是,而是都领教过冷漠大侠其它方面的才能。所以不敢。。。。而我,不太懂这个论坛的潜规则啊!

使用特权

评论回复
52
desert_hawk| | 2010-1-7 22:47 | 只看该作者
本帖最后由 desert_hawk 于 2010-1-7 22:50 编辑

冷漠大侠让我“以后看好书上的OS 概念再来。”结果他一不小心说漏嘴了:
“所以这种函数一开始就是执行“关中断——OS_ENTER_CRITICAL( )”,”“直到运行完,最后才“开中断——OS_EXIT_CRITICAL( )"。全函数原子性...”
这些似乎证明,他才是真正的需要“看好书上的OS 概念再来。”
以前看到过highgear和冷漠大侠争吵的帖子,感觉里边言辞过激,没想到自己也会这样。现在领教了一句话“鸟大了,什么林子都有”;P 言辞过激也应该是可以理解的事吧,还请大家见谅。
来这个论坛的几个月,学到了很多东西,我来这并不像冷漠大侠说的那样是为了“赢得尊重”,虽然在这几个月的时间我没发帖提过问题,但是经常浏览其他人的发帖和回帖,以及和别人的讨论,确实能学到了不少东西,当然在给别人提供了帮助之后我也会有些成就感。其中也不乏和别人的争论,但都是以技术为目的,如果发现自己错了,我会马上承认。像和冷漠大侠这种争论甚至是争吵,还是头一回。但据我观察对于冷漠大侠来说肯定不是头一回了,估计是第n回了,而且n很大。
这种争吵在这两天已经一定程度地影响了我的工作,为了自己的身心健康着想,决定短期内不再登陆21ic。眼不见,心不烦,不能被某些心理扭曲的人影响的也扭曲了吧,生活中让人生气的事多了去了,如果每件事都去较真,日子也就没法过了。

使用特权

评论回复
53
hqgboy| | 2010-1-8 08:33 | 只看该作者
这种争吵在这两天已经一定程度地影响了我的工作,为了自己的身心健康着想,决定短期内不再登陆21ic。眼不见,心不烦,不能被某些心理扭曲的人影响的也扭曲了吧,生活中让人生气的事多了去了,如果每件事都去较真,日子也就没法过了。
=========================
这心里素质?
争论一下,就不来了。骂娘也得来。
有本事,把冷漠说服。
每个人都有长处和短处。

使用特权

评论回复
评分
参与人数 2威望 +2 收起 理由
冷漠 + 1
xlsbz + 1
54
xlsbz| | 2010-1-8 08:40 | 只看该作者
早发现一个怪问题:凡是冷漠大侠发表过回帖的帖子,一般就很少再有人说话,即便是说话,也很少有人持与冷漠大侠不同的意见。为什么呢?是因为冷漠大侠全都对吗?据我观察,不是,而是都领教过冷漠大侠其它方面的才能 ...
desert_hawk 发表于 2010-1-7 21:48


冷漠大侠你看不惯?

我觉得很好啊!

当然你也很好啊 都好啊

冷漠是很厉害的啊  我觉得是和圈圈差不多的级别的

至少比那程序匠人技术水平高的多(我指的是某些问题的深入程度)。

程序匠人恐怕自己心里也有数。

两个人吵就受不了?

本人在某论坛,被群起而攻之  都无所畏惧!

这也是一种生活 ti 验..............

使用特权

评论回复
55
inter_zhou| | 2010-1-8 09:36 | 只看该作者
;P;P

使用特权

评论回复
56
inter_zhou| | 2010-1-8 09:41 | 只看该作者
"至少比那程序匠人技术水平高的多(我指的是某些问题的深入程度)。"

我认为,仅仅是我认为啊:
匠人是实战型的,真正做过很多产品的,也有过很多不同架构和系列的MCU应用的,经验比较丰富的,还有点幽默感的工程师;而不是可以教你 “回”香豆有几种写法的老师。

“回”香豆有几种写法重要吗?不重要吗?

使用特权

评论回复
57
highgear| | 2010-7-27 20:40 | 只看该作者
如今流行挖坟。
俺对circular buffer这么简单的东西不感兴趣, 只是挖个坟。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
58
xlsbz| | 2010-7-27 21:12 | 只看该作者
"至少比那程序匠人技术水平高的多(我指的是某些问题的深入程度)。"

我认为,仅仅是我认为啊:
匠人是实战型的,真正做过很多产品的,也有过很多不同架构和系列的MCU应用的,经验比较丰富的,还有点幽默感的工程师 ...
“回”香豆有几种写法重要吗?
inter_zhou 发表于 2010-1-8 09:41


恩 很重要!

个人觉得理论在某些方面比实践更重要!

再扯点别的..........不优雅的解决问题和优雅的不解决问题哪种更好呢? 这都两说呢!长远看还是短期看喽..........................

使用特权

评论回复
59
ayb_ice| | 2010-7-28 10:13 | 只看该作者
俺不参赌,俺只围观

使用特权

评论回复
60
xuyiyi| | 2010-7-28 12:15 | 只看该作者
好贴,学习了!

使用特权

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

本版积分规则