打印

好**,大家参与,!

[复制链接]
31524|68
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dy008|  楼主 | 2008-4-9 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2008年7月2日,更新下载链接,有效期至7月9日止!
-------------------------
根据官方版本修改!目前稳定运行!呵呵!
注意:任务切换bug已经修正:
1:OS版本更新至2.86;
2:任务切换bug修正(使用官方版本方法);
3:编译选项可以选High(最大程度优化),不管是speed还是size都
   可以正常运行了!

/**以下为原贴****/
1:OS版本:V2.86(最新版本)
2:uC/Probe:V1.50
3:板载液晶驱动(参考万利源程序移植)
4:按KEY2键可以切换**和CPU使用率以及OS切换次数显示于板载LCD!
5:板载LED流水灯;
6:编译器:IAR4.42a
7: 请将IAR里的编译选项按后面我的图示修改编译文件的盘符(与你释放的盘符一致)后再编译,否则会提示找不到编译选项文件!
8:工程文件目录:C:MICRIUMSOFTWAREEvalBoardsSTSTM3210B-EVALIAROS-ProbeSTM3210B-EVAL-OS-Probe.eww(压缩文件默认的盘符,如果你修改了释放目录,同样要进行调整,建议按照默认的盘符释放,并且不要加上子目录)
9:只适用于万利EK-STM32F仿真板;

论坛限制附件大小,只能放到QQ空间,请下载最新的版本,有效期7天!
地址:
http://mail.qq.com/cgi-bin/exs_download?uin=490841621&svrid=223&fid=1e047a9c6750ba3e41b566877d41e98eca253a867a268240&&txf_fid=2653de4c29dee4b20c46d1ae7e173ccf3c69df52&&txf_sid=e7b71b1ba4560491dd6ab36119f329c73fa72634&code=3a8cb4be&k=a8f679349fe4522b03b15e7862610a6533316235de353837df6734314439386516227d661e287169722a6d656c7f0702773a607b6535662c65051b08544f561d51
沙发
jian14| | 2008-4-9 11:44 | 只看该作者

死机

这个模板,如果使用到不同优先级的中断,或IAR选择编译优化,就会死机!信不信由你!

使用特权

评论回复
板凳
HITRO| | 2008-4-9 11:50 | 只看该作者

关键是怎么解决?

使用特权

评论回复
地板
dy008|  楼主 | 2008-4-9 12:31 | 只看该作者

呵呵,没有问题!

已经解决了上面说的问题,才放上来的,请放心使用!
不用不会知道的!

使用特权

评论回复
5
dy008|  楼主 | 2008-4-9 12:32 | 只看该作者

请下载实验了的TX回个帖子啊!呵呵!

使用特权

评论回复
6
dy008|  楼主 | 2008-4-9 13:04 | 只看该作者

编译选项示意!

如图:

使用特权

评论回复
7
dy008|  楼主 | 2008-4-9 13:07 | 只看该作者

编译选项示意!

刚才看不到文件,再来!

使用特权

评论回复
8
jian14| | 2008-4-9 15:03 | 只看该作者

长期稳定运行,不等于没有BUG

长期稳定运行,不等于没有BUG,只能证明跑某一个程序没问题,还要通过各种极端的程序测试,路还长着!

使用特权

评论回复
9
nomoneyiv| | 2008-4-9 15:04 | 只看该作者

MDK的工程有吗

MDK的工程有吗,,都是IAR的,,,,Keil的MDK工程有吗?

使用特权

评论回复
10
dy008|  楼主 | 2008-4-9 15:48 | 只看该作者

能说说现在遇到的bug是什么吗?

请问jian14 :遇到的bug是什么吗?
即便有bug,大家一起讨论会更快的解决呀!呵呵!
1:使用不同优先级的中断问题已经处理好!请看程序中通过TIM2更新LCD的处理!
2:IAR编译确实不能选最优,只能选中等即可!这部分不清楚!

另外回上面TX,Keil的我没用,因为我的板(EK-STM32F)只支持IAR调试!

使用特权

评论回复
11
mxchip_sh| | 2008-4-9 22:10 | 只看该作者

UCOS/MDK


DVSTM32-48pin,
www.mxchip.com

Embest STM32-V100,

资料大小:1583K(本论坛限制,传不上来)
资料说明:
1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。
2.本移植使用的是 ucosⅡ 2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件:
  os_flag.c
  os_mbox.c
  os_mem.c
  os_mutex.c
  os_q.c
  os_sem.c
  os_task.c
  os_time.c
  os_tmr.c
  os_core.c

下载地址:http://www.realview.com.cn/down-list.asp?id=347

使用特权

评论回复
12
jackbao| | 2008-4-10 08:59 | 只看该作者

能不能写一个使用说明呢 关于此系统的

使用特权

评论回复
13
leebai_001| | 2008-4-10 09:24 | 只看该作者

上面的程序可以使用软件仿真么

为什么软件仿真的时候停在下面这个语句呢?
B       OSStartHang             ; should never get here

使用特权

评论回复
14
hanker510| | 2008-4-10 09:31 | 只看该作者

下载下来解压错误啊怎么

   说更新版本  可下载了最新的解压软件了还是报错  无奈。。。

使用特权

评论回复
15
dy008|  楼主 | 2008-4-10 09:40 | 只看该作者

回上面!

1:关于使用说明,首先我也是菜鸟,也没有这么多的时间,请直接看APP.c和BSP.c两个文件就基本上明白这是如何工作的,在参考appnotes下的相关文件即可;
2:对于uCOS,由于IAR编译器软件仿真时不对外设仿真(或者非常麻烦),如果用软件来仿真的话太困难,这点不如MDK!而如果没有定时器的仿真,当然OS无法运行!
3:所以这个移植只用于EK-STM32仿真板环境,用于其他环境我无法回答!

使用特权

评论回复
16
dy008|  楼主 | 2008-4-10 09:53 | 只看该作者

关于解压缩!

解压需要你的系统里安装了winrar3.0以上的版本才能正常,这是我的疏忽,应该嵌入解压模块!呵呵!

使用特权

评论回复
17
amixice| | 2008-4-10 10:49 | 只看该作者

这个肯定有问题

OSCtxSw
        LDR     R4, =NVIC_INT_CTRL      ; trigger the PendSV exception (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
        BX      LR

OSIntCtxSw
        LDR     R4, =NVIC_INT_CTRL      ; trigger the PendSV exception (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
        BX      LR

        NOP

这2个函数破坏了R4 R5的数据, 这个我在以前的一个帖子指出来了,  MICRIUM的官方PORT也是这样的, 我的理解是官方故意这样做的, 如果购买了版权应该可以拿到稳定的PORT

使用特权

评论回复
18
dy008|  楼主 | 2008-4-10 12:47 | 只看该作者

这个问题我想你可能弄错了!

首先在OS里面,不管是调用延时功能(如:OSTimeDlyHMSM(0, 0, 0, 50);),还是其他等待(如邮箱,消息等)信号,都是通过函数调用的方式进行,这在编译器里编译的时候就将被调用函数用到的寄存器在函数进入时第一条指令即压入该任务的堆栈(如PUSH    {R4,R5,...等等}根据具体的函数而定),这样如果发生任务切换并执行了OSCtxSw功能,R4,R5值已经保存在了该任务自己的堆栈里,当等候的条件满足时,任务切换回来,最后执行的实际上是被调用函数的返回指令,所以原样将使用到的寄存器又恢复了!
而如果是被OS TICKS时钟中断了的任务,在时钟中断里一样是通过调OSTimeTick();函数来切换任务(如果需要切换),这时的处理如上面同样的过程!

综上所述,该模板这部分没有问题!
感兴趣的TX可以在调用系统功能的语句前下断点,记下这时的R4,R5的值,等系统调用返回时再检查,该值被保持一致的!

注:以上结论只适用于我所提供的范例(不过任务切换部分与官方模板一致),其他核心或编译环境未测试!
另外对于uCOS-II,官方版本确实不一定全对(请见我所提供的版本与官方的差别),但是我想官方的版本的相对来说还是最好的,个人意见仅供参考!   

使用特权

评论回复
19
c51avr| | 2008-4-10 14:15 | 只看该作者

谢谢你啊

谢谢你啊

使用特权

评论回复
20
amixice| | 2008-4-10 14:16 | 只看该作者

看看OS_Sched的反汇编

这个是OS_Sched的反汇编代码, 这个里面调用了OSCtxSw, 在调用之前, 并没有PUSH {R4,R5}, 而且此时R4存放的OS_CPU_SR_Save的值. 

void  OS_Sched (void)
{
OS_Sched:
  080010E4  B530      PUSH         {R4,R5, LR}
    OS_ENTER_CRITICAL();
  080010E6  F000F917  BL           OS_CPU_SR_Save
  080010EA  0004      MOVS         R4, R0
=================这里, 返回值存放到 R4=============
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
  080010EC  4D88      LDR          R5, [PC,#0x220]          ; [0x8001310] =OSCPUUsage (0x20001094)
  080010EE  78A8      LDRB         R0, [R5, #2]
  080010F0  2800      CMP          R0, #0
  080010F2  D114      BNE          0x800111E
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
  080010F4  78E8      LDRB         R0, [R5, #3]
  080010F6  2800      CMP          R0, #0
  080010F8  D111      BNE          0x800111E
            OS_SchedNew();
  080010FA  F000F815  BL           OS_SchedNew
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
  080010FE  7968      LDRB         R0, [R5, #5]
  08001100  7929      LDRB         R1, [R5, #4]
  08001102  4288      CMP          R0, R1
  08001104  D00B      BEQ          0x800111E
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
  08001106  4983      LDR          R1, [PC,#0x20C]          ; [0x8001314] =OSTCBPrioTbl (0x20001CCC)
  08001108  F8510020  LDR          R0,[R1, R0,LSL #2]
  0800110C  62A8      STR          R0, [R5, #40]
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
  0800110E  6B41      LDR          R1, [R0, #52]
  08001110  1C49      ADDS         R1, R1, #0x1
  08001112  6341      STR          R1, [R0, #52]
                OSCtxSwCtr++;                          /* Increment context switch counter             */
  08001114  6928      LDR          R0, [R5, #16]
  08001116  1C40      ADDS         R0, R0, #0x1
  08001118  6128      STR          R0, [R5, #16]
                OS_TASK_SW();                          /* Perform a context switch                     */
  0800111A  F000F911  BL           OSCtxSw
=============这里调用==================
=============返回时候R4可能已经改变=======
    OS_EXIT_CRITICAL();
  0800111E  0020      MOVS         R0, R4
==================这里=============
  08001120  F000F8FE  BL           OS_CPU_SR_Restore
}
  08001124  BD30      POP          {R4,R5}
  08001126  0000      MOVS         R0, R0



刚刚有人提供英贝特的版本, R4,R5入栈了.

;/**************************************************************************************
;* 函数名称: OSCtxSw
;*
;* 功能描述: 任务级上下文切换         
;*
;* 参    数: None
;*
;* 返 回 值: None
;*         
;* 作   者: 罗辉联
;* 日   期: 2007年11月10日
;*--------------------------------------------------------------------------------------
;***************************************************************************************/
  
OSCtxSw
        PUSH    {R4, R5}
        LDR     R4, =NVIC_INT_CTRL      ;触发PendSV异常 (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
        POP     {R4, R5}
        BX      LR

;/**************************************************************************************
;* 函数名称: OSIntCtxSw
;*
;* 功能描述: 中断级任务切换
;*
;* 参    数: None
;*
;* 返 回 值: None
;*         
;* 作   者: 罗辉联
;* 日   期: 2007年11月10日
;*--------------------------------------------------------------------------------------
;***************************************************************************************/

OSIntCtxSw
        PUSH    {R4, R5}
        LDR     R4, =NVIC_INT_CTRL      ;触发PendSV异常 (causes context switch)
        LDR     R5, =NVIC_PENDSVSET
        STR     R5, [R4]
        POP     {R4, R5}
        BX      LR
        NOP



我认为这里用R0, R1可以, R0--R3应该是可以安全使用, 不用入栈, 具体的细节还需参考编译器的手册.

使用特权

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

本版积分规则

2

主题

44

帖子

0

粉丝