搜索
bottom↓
回复: 147

我自己移植的UCOS-ii,欢迎测试,提出宝贵意见

[复制链接]

出0入0汤圆

发表于 2008-7-22 11:06:07 | 显示全部楼层 |阅读模式
1 本程序是我自己移植,只使用KEIL进行过软仿真,测试没有发现问题。支持从任何一个中断服务程序里释放信号量。
2 此代码作为参考和学习使用,如果在使用过程中造成损失,本人不负任何责任。
3 此代码作为参考和学习使用,因为里边有UCOS-II,如果要作为商业使用请给UCOS付费

欢迎大家测试,在实践中检验一下,多提提意见。谢谢,我会根据大家测试结果第一时间解决问题。

点击此处下载 ourdev_354770.rar(文件大小:108K) (原文件名:ucos.rar)

上一个版本发现了漏洞已经修正,请下载下边的,已经在STM32F103CBT6上通过了测试:

点击此处下载 ourdev_355210.rar(文件大小:108K) (原文件名:ucos_v2.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入93汤圆

发表于 2008-7-22 11:32:42 | 显示全部楼层
mark

出0入46汤圆

发表于 2008-7-22 12:15:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-7-22 20:26:41 | 显示全部楼层
官方有现成的。楼主为何还要费劲自己移植呢?

出0入0汤圆

 楼主| 发表于 2008-7-24 09:42:09 | 显示全部楼层
都说官方的有问题,我也懒得测试了,移植UCOS-II很容易,但是逻辑要严密。后来我对比了官方的,我任务我移植的有自己的点,上边写了

出0入0汤圆

 楼主| 发表于 2008-7-24 09:45:06 | 显示全部楼层
我自己的移植的已经通过了CPU占用率70%负载的测试,包括启动ADC,Kalman滤波,和一个每秒4000Hz的Timer,并且在Timer里释放信号量。

出0入0汤圆

发表于 2008-7-24 10:45:54 | 显示全部楼层
楼主移植的跟官方的有啥差别?

出0入0汤圆

 楼主| 发表于 2008-7-24 11:17:48 | 显示全部楼层
任务对战保护的处理不一样,这里采用什么方式并不重要,主要是为了下边的处理。
1  CPU全局中断处理不一样,我把当前任务的全局中断标志保存到了堆栈里,例如OS_Sched任务切换的时候,当前任务的全局中断(OS_ENTER_CRITICAL();调用产生)是关闭的,当回到这个任务的时候,也要保证全局中断是关闭的不然不安全。
2  OS_CRITICAL_METHOD 采用了3, 也就是函数调用OS_ENTER_CRITICAL的时候把全局中断标志保存到了函数的堆栈里,这样嵌套调用OS_ENTER_CRITICAL时不会出错
3  把所有的中断入口定位到了同一个汇编程序,这个时候会保护所有被中断的程序,并且能在中断处理处理程序里释放信号量,这样保证了如果在释放了信号量以后如有有就绪的任务,可以立刻被运行。

void  OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL();
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
            OS_SchedNew();
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
#if OS_TASK_PROFILE_EN > 0
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
                OS_TASK_SW();                          /* Perform a context switch                     */
            }
        }
    }
    OS_EXIT_CRITICAL();
}

出0入0汤圆

发表于 2008-7-24 11:21:28 | 显示全部楼层
MARK

出0入0汤圆

发表于 2008-7-24 13:04:20 | 显示全部楼层
记号!!

出0入0汤圆

发表于 2008-7-24 21:01:21 | 显示全部楼层
不错,,不过LZ能够把自己写的程序和官方之间的异同多描述一下,就更perfect了。

支持LZ补充完整。

出0入0汤圆

 楼主| 发表于 2008-7-25 13:27:47 | 显示全部楼层
下边是任务切换历程,在任务里释放信号量或使用OSTimeDly延时时,如果有任务就绪就调用下班的代码切换任务,里边把PRIMASK保存到到R4寄存器,然后产生OSPendSV中断,在OSPendSV里保存要回复的PRIMASK标志到堆栈里,
    EXPORT        OSCtxSw
OSCtxSw
        PUSH    {R4, R5}
    LDR     R4, =NVIC_INT_CTRL          ;触发PendSV异常 (causes context switch)
    LDR     R5, =NVIC_PENDSVSET
    STR     R5, [R4]
        MRS     R4, PRIMASK
    MSR         PRIMASK, r5
        POP     {R4, R5}
    BX      LR

出10入120汤圆

发表于 2008-7-25 13:42:06 | 显示全部楼层
mark
tks

出0入0汤圆

 楼主| 发表于 2008-7-28 13:14:33 | 显示全部楼层
自己顶一下,哈哈

出0入0汤圆

发表于 2008-7-31 13:43:16 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2008-8-1 17:00:57 | 显示全部楼层
学习一下.

出0入0汤圆

 楼主| 发表于 2008-8-5 10:26:02 | 显示全部楼层
大家测试过吗,有没有发现问题的

出0入0汤圆

发表于 2008-8-5 12:26:14 | 显示全部楼层
Mark

出0入0汤圆

发表于 2008-8-6 09:59:15 | 显示全部楼层
楼主的移植跟官方的差不多啊。只不过用的寄存器不一样。官方的用R0-R3,楼主用R4-R5。似乎用R0-R3更好一些。因为有自动压栈操作,并不需要手动PUSH。岂不是更好

出0入0汤圆

发表于 2008-8-6 10:06:02 | 显示全部楼层
官方的移植:
OSCtxSw
    LDR     R0, =NVIC_INT_CTRL    ; Trigger the PendSV exception (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    BX      LR

大家可以比较一下异同

出0入0汤圆

发表于 2008-8-6 11:14:54 | 显示全部楼层
顶,支持

出0入0汤圆

发表于 2008-8-6 11:25:54 | 显示全部楼层
请问为什么出现这样的问题?

uCOSsrc\cpu\OS_CPU_A.s(329): warning: A1581W: Added 2 bytes of padding at address 0x1b2
linking...
Program Size: Code=4296 RO-data=544 RW-data=72 ZI-data=3320  
".\output\release.axf" - 0 Error(s), 1 Warning(s).

出0入0汤圆

 楼主| 发表于 2008-8-6 11:34:56 | 显示全部楼层
谢谢18楼,说的没错,我没有注意到C语言调用的规则,R0-R3寄存器是可以不用保护的,这里可以使用R0-R1寄存器。

1  我在移植的时候主要是注意保护了全局中断标志。这一点和官方的不一样。OS_CRITICAL_METHOD 我定义为3,并且在切换任务的时候把当前的全局中断标志保存到了OS_TCB里,在任务恢复的时候,使用了这个任务最后的全局中断标志状态。这样在发生嵌套调用 OS_ENTER_CRITICAL & OS_EXIT_CRITICAL的时候不会出错
2  我把所有的可屏蔽中断定位到了同一个入口函数,对被打断的任务进行保护。这样实现了在所有的可屏蔽中断里释放信号量,如果接收这个信号量的任务优先级较高,可以在中断退出的时候立刻响应。缺点是效率变低。

我把18楼的问题修改后再上传

出0入0汤圆

发表于 2008-8-6 14:10:32 | 显示全部楼层
另外听说官方的移植有问题,楼主是否知道是什么问题么?
好像直接使用官方的移植而不改变OSPendSV和SysTick的优先级的话确实会出现问题。
官方的把OSPendSV和SysTick的优先级设成了最高,这样用户要是开启了别的中断的话而刚好在处理这个中断时,SysTick中断到来继而
开始任务切换,就打乱了原来的中断环境,会造成死机。
不知道这样分析对不对?

出0入0汤圆

发表于 2008-8-6 14:11:39 | 显示全部楼层
正确的优先级顺序应该是SysTick最高,OSPendSV最低。

出10入95汤圆

发表于 2008-8-6 21:15:56 | 显示全部楼层

出0入0汤圆

发表于 2008-8-6 21:20:24 | 显示全部楼层
学习ing~

出0入0汤圆

 楼主| 发表于 2008-8-10 12:53:36 | 显示全部楼层
已经根据【19楼】 PZLPDY 的意见修改了代码,提高了切换任务的效率,减少了PUSH、POP
回答一下【23楼】 PZLPDY 的问题,官方移植的代码在切换任务的时候,包括断切换任务的时候没有保存原来任务被打断之前的中断标志。再次恢复这个任务的时候官方的代码直接打开了全局中断,这样会造成在某些时候会出错。例如:在OSCtxSw切换任务前全局中断是关闭的,但是再次回到这个任务的时候官方的代码是直接恢复中断的。

下边是根据19楼的意见修改之后的代码

点击此处下载 ourdev_373556.rar(文件大小:104K) (原文件名:ucos_for_stm32_v3.rar)

出0入0汤圆

发表于 2008-8-10 19:15:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-8-12 08:39:40 | 显示全部楼层
精神可嘉!

出0入0汤圆

发表于 2008-8-12 08:48:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-8-12 09:23:57 | 显示全部楼层
谢谢 搂主

出0入0汤圆

发表于 2008-8-13 15:20:39 | 显示全部楼层
回答一下【23楼】 PZLPDY 的问题,官方移植的代码在切换任务的时候,包括断切换任务的时候没有保存原来任务被打断之前的中断标志。再次恢复这个任务的时候官方的代码直接打开了全局中断,这样会造成在某些时候会出错。例如:在OSCtxSw切换任务前全局中断是关闭的,但是再次回到这个任务的时候官方的代码是直接恢复中断的。

这句有点问题吧?在OSCtxSw切换任务前全局中断肯地是关闭的呀,官方的OS_ENTER_CRITICAL();不就是保存全局中断标志并且关中断的么。官方的OS_EXIT_CRITICAL();不就是用来恢复之前的中断标志的么。UCOS除了在处理临界代码时全局中断是关的外,其它任何时候都应该保证是开的,否则的话岂不要死机,没办法切换任务。因为SystemTick和PSV因为中断是关的而得不到服务,造成死机

出0入0汤圆

发表于 2008-8-13 15:30:21 | 显示全部楼层
EXPORT        OSCtxSw
OSCtxSw
    LDR     R0, =NVIC_INT_CTRL          ;触发PendSV异常 (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    MRS     R0, PRIMASK  
    MSR         PRIMASK, r0
    BX      LR
请问楼主
MRS     R0, PRIMASK  
MSR         PRIMASK, r0
这两句是什么意思?
读完了又写回去?

出0入0汤圆

 楼主| 发表于 2008-8-14 11:21:50 | 显示全部楼层
回答33楼的问题,写错了一点,是我的错,笔误。

如下代码:(注意代码中的中文注释)

void  OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL(); //进入保护,关闭中断
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
            OS_SchedNew();
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
#if OS_TASK_PROFILE_EN > 0
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
                OS_TASK_SW();(->这个宏替换成OSCtxSw (#define  OS_TASK_SW()   OSCtxSw() )
            }
        }
    }
    OS_EXIT_CRITICAL();//退出保护,打开中断
}

EXPORT        OSCtxSw
OSCtxSw
    LDR     R0, =NVIC_INT_CTRL          ;触发PendSV异常 (causes context switch)
    LDR     R1, =NVIC_PENDSVSET
    STR     R1, [R0]
    MRS     R0, PRIMASK
    MSR     PRIMASK, r1 ;这里我写错了,是笔误应该是R1寄存器。R1最后的数值能保证恢复全局中断标志
    BX      LR

不知道你注意没有,在OSCtxSw被调用的时候全局中断是关闭的,在执行到STR R1, [R0]的时候并没有出发中断,原因是全局中断还没有打开。这个时候先把当前的全局中断标志状态保存到R0寄存器(MRS     R0, PRIMASK)。然后打开全局中断标志(MSR     PRIMASK, r1),当中断标志被打开后,后边的指令(BX LR)将不会被执行。下边就产生了下下边的OSPendSV中断:
        EXPORT         OSPendSV
OSPendSV               
    CPSID   I
    PUSH          {R4-R11,lr}
    PUSH          {R0}
先不考虑硬件的自动入栈,最后把R0入栈为了保持OSTaskStkInit初始化堆栈信息结构一致,主要是为了在任务被恢复的时候,恢复他最后的全局中断标志。
注意OSTickISR 和 OSIntCtxSw这两个函数,他们在恢复任务现场的时候也恢复了PRIMASK(全局中断)标志。

下边的代码修改了我的笔误(MSR     PRIMASK, r1 ;)

点击此处下载 ourdev_378393.rar(文件大小:104K) (原文件名:ucos_for_stm32_v4.rar)

出0入0汤圆

 楼主| 发表于 2008-8-14 11:25:23 | 显示全部楼层
有没有河北科技大学的校友?

出0入0汤圆

发表于 2008-8-14 15:01:29 | 显示全部楼层
不知道楼主所说的官方是那个版本,micrium网站上有个AN1018,是讲uCOSii在cortex-M3架构上的移植,里面的移植代码请楼主看看

出0入0汤圆

 楼主| 发表于 2008-8-15 11:58:26 | 显示全部楼层
我在移植以后去看过
我还移植过UCLINUX到TCC8200上,这个处理器用的人很少

出10入120汤圆

发表于 2008-8-15 17:21:50 | 显示全部楼层
框中的几句是多余的吧?

把==4的ELSE移到框中位置比较好


(原文件名:1.JPG)

出0入0汤圆

 楼主| 发表于 2008-8-17 12:26:36 | 显示全部楼层
哈哈,那个是原来在其他处理器移植留下的,后来也没注意。那个东西确实没有用。

出0入0汤圆

发表于 2008-8-18 09:23:01 | 显示全部楼层
您是参考了周立功的例子吗? OS_CRITICAL_METHOD 怎么会等于4

出0入0汤圆

发表于 2008-8-18 09:52:29 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2008-8-18 10:42:07 | 显示全部楼层
没有参考, 如果使用4,运行过程中会有问题

出0入0汤圆

发表于 2008-8-18 12:08:11 | 显示全部楼层
移植usOS的尝试可以帮助理解OS里的一些机制,但现在迫切需要的是一套在无片内扩展内存的51上也能运行得比较好的OS.

我主观的解决办法是自已架构一套OS,前提是深入了解了OS里的各种机制,并将其融会贯通相互整合,并剪裁.

51上我一共做过十余个版本的OS,全都是给无外扩的51/52使用的,之所以产生如此多版本,其实是针对不同应用环境搭建的不同架构,是从同一个基本构思中剪裁出来的.

我不认为在51上能通过单一版本解决哪怕大部分应用需求.资源太有限了.(关于这一点可能会有大量人反驳,我就不作讨论了)

出0入0汤圆

 楼主| 发表于 2008-8-18 12:14:46 | 显示全部楼层
一般的51可能不行,弄个ST的51吧内部有2KB RAM,操作系统最精简的也要实现任务的调度和信号量。
不过我没有试过在资源非常少的情况小实现。

对了有一个辩证的问题,如果你的资源太少,为什么还需要操作系统呢? 如果一个任务都很忙,多个任务是。。。。哈哈

出0入0汤圆

发表于 2008-8-18 12:27:22 | 显示全部楼层
呵呵,仁者见仁智者见智.

出0入0汤圆

发表于 2008-8-20 08:13:08 | 显示全部楼层
标记!

出0入0汤圆

发表于 2008-8-20 15:01:43 | 显示全部楼层
记下

出0入0汤圆

 楼主| 发表于 2008-8-22 15:25:57 | 显示全部楼层
有人测试过吗,有人和官方的在实际运行中对比过吗?

出0入0汤圆

发表于 2008-8-22 17:28:21 | 显示全部楼层
真是牛。。。

出0入0汤圆

发表于 2008-10-7 07:56:24 | 显示全部楼层
高手啊

出0入0汤圆

发表于 2008-10-7 17:00:57 | 显示全部楼层
顶一下~!

出0入0汤圆

发表于 2008-10-14 22:00:18 | 显示全部楼层
lz精神可嘉,但是不要随便更改代码,除非你对代码非常、非常熟悉。一些“不合理”的地方,是我们没有看懂、弄透,不然UCOS不会通过航天电子的认证的。原作者肯定比我们清楚他自己的代码。

出0入0汤圆

发表于 2008-10-16 09:45:12 | 显示全部楼层
ding~ :)

出0入0汤圆

 楼主| 发表于 2008-10-20 09:40:00 | 显示全部楼层
【52楼】 pengshipower 

 



首先说一下,我对UCOS非常熟悉,官方一直的代码也有缺陷。因为开始的时候想使用UCOS在在STM32上。阅读了他的代码,发现了有些地方做的不好。

你说的对,官方对自己的代码更熟悉。但是官方不一定对每一种处理器都非常熟悉。也难免出问题。

出0入0汤圆

发表于 2008-10-20 10:14:51 | 显示全部楼层
【52楼】 pengshipower 请问你想说什么呢?明白什么是移植么?

出0入0汤圆

发表于 2008-11-12 16:05:25 | 显示全部楼层
我也记一下,跟踪学习!

出0入0汤圆

发表于 2008-11-12 16:47:12 | 显示全部楼层
 to  楼主 nter 姚军

 很高兴你也在石家庄

 关注你的Kalman滤波 

 想用在GPS滤点上, 能不能给点建议

 谢谢

出0入0汤圆

发表于 2008-12-13 18:49:20 | 显示全部楼层
我想说一下你的代码在主任务中建立3个任务时



如:1 2 3 4优先级一次降低时主任务运行完时怎么开始运行4低优先级的任务呢?

出0入0汤圆

发表于 2009-1-1 22:52:03 | 显示全部楼层
这个能在LM的芯片上跑吗

出0入0汤圆

发表于 2009-1-2 10:23:11 | 显示全部楼层
"首先说一下,我对UCOS非常熟悉,官方一直的代码也有缺陷。因为开始的时候想使用UCOS在在STM32上。阅读了他的代码,发现了有些地方做的不好。 

你说的对,官方对自己的代码更熟悉。但是官方不一定对每一种处理器都非常熟悉。也难免出问题。"



牛人真多呀



官方的临界代码:

OS_CPU_SR_Save

    MRS     R0, PRIMASK

    CPSID   I

    BX      LR

OS_CPU_SR_Restore

    MSR     PRIMASK, R0

    BX      LR

官方首先把服务处理优先级降到最低了,这样可以解决硬件优先级的一些冲突

OSStartHighRdy

    LDR     R0, =NVIC_SYSPRI14  ;// 设置PendSV优先级

    LDR     R1, =NVIC_PENDSV_PRI;//255

    STRB    R1, [R0]

    ...

    ...

下面是触发文本切换,只是触发,不一定马上切换

OSCtxSw

    LDR     R0, =NVIC_INT_CTRL

    LDR     R1, =NVIC_PENDSVSET

    STR     R1, [R0]

    BX      LR



官方还给出一种利用CM3硬件特性计算优先级的代码,这在大于64个任务的时候,计算优先级还是很快的,如果RAM足够,可以很容易扩充任务数32 * 32个任务

OS_SchedNew

    PUSH   {R0-R4}

    LDR    R0, =OSRdyGrp



    LDRH   R2, [R0]

    RBIT   R2, R2

    CLZ    R2, R2                   ; y = CLZ(OSRdyGrp);



    LDR    R0, =OSRdyTbl

    ADD    R1, R0, R2, LSL #0x01    ; ptbl = &OSRdyTbl[y];



    LDRH   R3, [R1]

    RBIT   R3, R3

    CLZ    R3, R3                   ; x = CLZ(*ptbl);



    LDR    R0, =OSPrioHighRdy

    ADD    R4, R3, R2, LSL #0x04

    STRB   R4, [R0]                 ; OSPrioHighRdy = x + (y << 4);



    POP    {R0-R4}

    BX      LR



本贴被 laoma 编辑过,最后修改时间:2009-01-02,10:30:07.

出0入0汤圆

发表于 2009-1-2 10:24:51 | 显示全部楼层
貌似官方代码更为效率,可靠,笔误少

出0入4汤圆

发表于 2009-6-5 09:23:25 | 显示全部楼层
记号。

出0入4汤圆

发表于 2009-6-10 23:53:51 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-6-11 08:05:31 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-6-30 23:44:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-17 13:45:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-22 10:55:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-8-9 11:02:45 | 显示全部楼层
我用官方的移植,好像不能中断嵌套,确切的说是能中断嵌套但是被中断的中断程序(外层中断服务程序)返回时死机在
App_Fault_ISR       B       App_Fault_ISR

我是用外部中断优先级高于systick中断测试的,外部中断(实际是A/D采样结束信号)的中断频率是30Khz,systick的中断中断频率是100hz,不知道是什么原因

我用的是ucos2.86

出0入0汤圆

发表于 2009-9-18 16:07:00 | 显示全部楼层
EXPORT         OSTickISR
OSTickISR
        PUSH        {r4-r11,lr}
        MRS     R0, PRIMASK
        PUSH        {R0}

        LDR                r4, =OSTCBCur
        LDR                r4, [r4]
        STR                sp, [r4]                                 ; OSTCBCur -> stkptr = sp

        BL                OSIntEnter
        MRS                r1, ipsr
        LDR                R0, =ExVectors
        LDR                r0,[r0,r1,lsl #0x2]
        BLX                r0
        BL                OSIntExit

        POP                {r0}
        MSR          PRIMASK, r0
        POP                {r4-r11,pc}                                ; start the new task
请问楼主
        MRS                r1, ipsr
        LDR                R0, =ExVectors
        LDR                r0,[r0,r1,lsl #0x2]
        BLX                r0
这四句是什么意思?
为什么不是:
        BL                OSTimeTick

出0入46汤圆

发表于 2009-9-18 16:57:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-19 13:06:43 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-10-14 21:31:43 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2009-10-19 21:05:39 | 显示全部楼层
学习啦!NB!!

出0入0汤圆

发表于 2009-10-24 16:21:37 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-12-18 09:53:29 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-12-20 19:36:04 | 显示全部楼层
长知识啦

出0入0汤圆

发表于 2009-12-20 20:44:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-12 22:52:40 | 显示全部楼层
谢谢,mark

出0入0汤圆

发表于 2010-1-12 23:02:12 | 显示全部楼层
make

出0入0汤圆

发表于 2010-1-25 18:14:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-28 18:39:26 | 显示全部楼层
研究、

出0入0汤圆

发表于 2010-1-30 11:40:45 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2010-6-17 22:54:11 | 显示全部楼层
不错,支持一下!

出0入0汤圆

发表于 2010-7-23 12:06:06 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-24 19:01:46 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-26 16:36:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-31 23:09:22 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-9-1 21:58:55 | 显示全部楼层
官方的在哪里找呢?

出0入0汤圆

发表于 2010-9-11 10:41:50 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-9-15 10:51:00 | 显示全部楼层
NB 学习了

出0入0汤圆

发表于 2010-9-29 17:00:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-12 21:29:38 | 显示全部楼层
请问  :STM32F10xR.lib 和  STM32F10xD.lib  是什么文件?没有发现此文件

出0入0汤圆

发表于 2010-10-12 21:41:58 | 显示全部楼层
回复【92楼】jantw996
-----------------------------------------------------------------------
在,没有看见哈。

出0入0汤圆

发表于 2010-10-12 21:45:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-13 03:29:02 | 显示全部楼层
学习了,mark

出0入0汤圆

发表于 2010-11-3 20:02:13 | 显示全部楼层
问下,在你的基础上定义新的 邮箱,编译通不 过?
是我定义出错了吗?
OS_EVENT *mybox;
mybox=OSMboxCreate(NULL);

出0入0汤圆

发表于 2010-11-3 21:40:46 | 显示全部楼层
在深入研究过完全开源的RTEMS后,uC/OS-II就是浮云。。。呵呵!

02年把uC/OS-II移植到只有2K内存的MSP430上,得益于在移植中植入了独立中断栈的功能,当时的uC/OS-II还不支持独立中断栈,给uC/OS-II提交了一个独立中断栈的补丁,J.L.认为破坏了uC/OS_II现有的结构,没有收纳到uC/OS-II中,但是在MSP430的移植中很给面子保留了独立中断栈的功能,不过J.L.为了保持uC/OS的代码风格,修改了独立中断栈的部分代码,导致一个BUG,结果一些用户的邮件都发到我这里,晕死!

uC/OS是一个优点和缺点都很明显的系统,中断关断时延/时钟ticks/定时器和成熟的RTOS比较还是有相当差距,据说uC/OS-III在这方面改进很大,应该是越来越接近RTEMS的风格。。。

出0入0汤圆

发表于 2010-11-3 21:47:39 | 显示全部楼层
重新定义 OS_EVENT *mybox;
static UINT8 boxmag;
mybox=OSMboxCreate((void *)boxmag);  还是编译不过,查找了UCOS里的邮箱的 建立 定义,没有问题,不知道问题何在?

出0入0汤圆

发表于 2010-11-9 15:23:47 | 显示全部楼层
不错,顶起
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 03:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表