哪位大神有Renesas M16C65系列 UCOS2 移植经验的 求解答,谢谢

腹黑大胖兔 2013-08-20 11:57:19
IDE: IAR
Hardware: Renesas M16C65
OS: ucos2.56

我从官网上下载了M16C62P的例程做参考,移植了快1周,任务建立也成功,在OSStart()单步调试到RETI后,程序飞了,什么原因,请大神指点,谢谢

.EVEN

OSStartHighRdy:
JSR OSTaskSwHook

MOV.W OSTCBHighRdy, A0 ; ISP = OSTCBHighRdy->OSTCBStkPtr
LDC [A0], ISP

MOV.B #01H, OSRunning ; OSRunning = TRUE

POPM R0,R1,R2,R3,A0,A1,SB,FB

REIT
...全文
279 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
腹黑大胖兔 2013-09-06
  • 打赏
  • 举报
回复
MLGB 任务终于切换成功了!!! 原因在IAR 的编译器 分享一下: IAR编译器把启动代码还有中断向量全部做到库文件中,工程里面找不到。 给客户的中断接口就是: #pragma vector=0 __interrupt void OSCtxSw( void ) 然而 用仿真器观察发现 像这样的中断函数定义,IAR进入后 直接执行了两行命令: PUSHM R0,R2,A0 POPM R0,R2,A0 REIT 所以如果我们还是按照官方例程来移植的话,无疑是自寻死路!!!!
lr2131 2013-09-06
  • 打赏
  • 举报
回复
引用 16 楼 cuiwei860526 的回复:
MLGB 任务终于切换成功了!!! 原因在IAR 的编译器 分享一下: IAR编译器把启动代码还有中断向量全部做到库文件中,工程里面找不到。 给客户的中断接口就是: #pragma vector=0 __interrupt void OSCtxSw( void ) 然而 用仿真器观察发现 像这样的中断函数定义,IAR进入后 直接执行了两行命令: PUSHM R0,R2,A0 POPM R0,R2,A0 REIT 所以如果我们还是按照官方例程来移植的话,无疑是自寻死路!!!!
那是不是需要在这里加些汇编的代码?
腹黑大胖兔 2013-09-04
  • 打赏
  • 举报
回复
引用 14 楼 lr2131 的回复:
[quote=引用 13 楼 cuiwei860526 的回复:] 瑞萨的单片机有USP ISP两个堆栈指针,所以要选择一下,目前任务可以切换成功一次,还有许多问题,还在努力DEBUG中。 如果大家有好的建议,请告诉我,不胜感激。
瑞萨也弄算堆栈指针?怎么和CM3一样呢 双堆栈的使用可以参考CM3上移植好的UCOS2。我IAR和UCOS2都还算熟悉,但瑞萨芯片不熟,帮不了忙。[/quote] 谢谢,我马上去看看CM3上的例程
lr2131 2013-09-04
  • 打赏
  • 举报
回复
引用 13 楼 cuiwei860526 的回复:
瑞萨的单片机有USP ISP两个堆栈指针,所以要选择一下,目前任务可以切换成功一次,还有许多问题,还在努力DEBUG中。 如果大家有好的建议,请告诉我,不胜感激。
瑞萨也弄算堆栈指针?怎么和CM3一样呢 双堆栈的使用可以参考CM3上移植好的UCOS2。我IAR和UCOS2都还算熟悉,但瑞萨芯片不熟,帮不了忙。
腹黑大胖兔 2013-09-04
  • 打赏
  • 举报
回复
瑞萨的单片机有USP ISP两个堆栈指针,所以要选择一下,目前任务可以切换成功一次,还有许多问题,还在努力DEBUG中。 如果大家有好的建议,请告诉我,不胜感激。
  • 打赏
  • 举报
回复
学习中...
腹黑大胖兔 2013-08-26
  • 打赏
  • 举报
回复
顶起来顶起来
腹黑大胖兔 2013-08-23
  • 打赏
  • 举报
回复
附一个我的UCOS config
/*

#ifndef OS_CFG_H
#define OS_CFG_H

                                       /* ----------------------- uC/OS-View ------------------------- */
#define OS_VIEW_MODULE            0    /* When 1, indicate that uC/OS-View is present                  */

                                       /* --------------------- TASK STACK SIZE ---------------------- */
#define OS_TASK_TMR_STK_SIZE    64    /* Timer      task stack size (# of OS_STK wide entries)        */
#define OS_TASK_STAT_STK_SIZE   64    /* Statistics task stack size (# of OS_STK wide entries)        */
#define OS_TASK_IDLE_STK_SIZE   64    /* Idle       task stack size (# of OS_STK wide entries)        */


                                       /* ---------------------- MISCELLANEOUS ----------------------- */
#define OS_ARG_CHK_EN             1    /* Enable (1) or Disable (0) argument checking                  */
#define OS_CPU_HOOKS_EN           1    /* uC/OS-II hooks are found in the processor port files         */

#define OS_DEBUG_EN               1    /* Enable(1) debug variables                                    */

#define OS_EVENT_NAME_SIZE       16    /* Determine the size of the name of a Sem, Mutex, Mbox or Q    */

#define OS_LOWEST_PRIO           31    /* Defines the lowest priority that can be assigned ...         */
                                       /* ... MUST NEVER be higher than 254!                           */

#define OS_MAX_EVENTS            10    /* Max. number of event control blocks in your application      */
#define OS_MAX_FLAGS              5    /* Max. number of Event Flag Groups    in your application      */
#define OS_MAX_MEM_PART           5    /* Max. number of memory partitions                             */
#define OS_MAX_QS                 4    /* Max. number of queue control blocks in your application      */
#define OS_MAX_TASKS             10    /* Max. number of tasks in your application, MUST be >= 2       */

#define OS_SCHED_LOCK_EN          1    /*     Include code for OSSchedLock() and OSSchedUnlock()       */

#define OS_TASK_STAT_EN           1    /* Enable (1) or Disable(0) the statistics task                 */
#define OS_TASK_STAT_STK_CHK_EN   1    /* Check task stacks from statistic task                        */

#define OS_TICK_STEP_EN           1    /* Enable tick stepping feature for uC/OS-View                  */
#define OS_TICKS_PER_SEC        100    /* Set the number of ticks in one second                        */


                                       /* ----------------------- EVENT FLAGS ------------------------ */
#define OS_FLAG_EN                1    /* Enable (1) or Disable (0) code generation for EVENT FLAGS    */
#define OS_FLAG_WAIT_CLR_EN       1    /* Include code for Wait on Clear EVENT FLAGS                   */
#define OS_FLAG_ACCEPT_EN         1    /*     Include code for OSFlagAccept()                          */
#define OS_FLAG_DEL_EN            1    /*     Include code for OSFlagDel()                             */
#define OS_FLAG_NAME_SIZE        16    /*     Determine the size of the name of an event flag group    */
#define OS_FLAG_QUERY_EN          1    /*     Include code for OSFlagQuery()                           */

#define OS_FLAGS_NBITS           16    /* Size in #bits of OS_FLAGS data type (8, 16 or 32)            */

                                       /* -------------------- MESSAGE MAILBOXES --------------------- */
#define OS_MBOX_EN                1    /* Enable (1) or Disable (0) code generation for MAILBOXES      */
#define OS_MBOX_ACCEPT_EN         1    /*     Include code for OSMboxAccept()                          */
#define OS_MBOX_DEL_EN            1    /*     Include code for OSMboxDel()                             */
#define OS_MBOX_PEND_ABORT_EN     1    /*     Include code for OSMboxPendAbort()                       */
#define OS_MBOX_POST_EN           1    /*     Include code for OSMboxPost()                            */
#define OS_MBOX_POST_OPT_EN       1    /*     Include code for OSMboxPostOpt()                         */
#define OS_MBOX_QUERY_EN          1    /*     Include code for OSMboxQuery()                           */


                                       /* --------------------- MEMORY MANAGEMENT -------------------- */
#define OS_MEM_EN                 1    /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */
#define OS_MEM_QUERY_EN           1    /*     Include code for OSMemQuery()                            */
#define OS_MEM_NAME_SIZE         16    /*     Determine the size of a memory partition name            */


                                       /* ---------------- MUTUAL EXCLUSION SEMAPHORES --------------- */
#define OS_MUTEX_EN               1    /* Enable (1) or Disable (0) code generation for MUTEX          */
#define OS_MUTEX_ACCEPT_EN        1    /*     Include code for OSMutexAccept()                         */
#define OS_MUTEX_DEL_EN           1    /*     Include code for OSMutexDel()                            */
#define OS_MUTEX_QUERY_EN         1    /*     Include code for OSMutexQuery()                          */


                                       /* ---------------------- MESSAGE QUEUES ---------------------- */
#define OS_Q_EN                   1    /* Enable (1) or Disable (0) code generation for QUEUES         */
#define OS_Q_ACCEPT_EN            1    /*     Include code for OSQAccept()                             */
#define OS_Q_DEL_EN               1    /*     Include code for OSQDel()                                */
#define OS_Q_FLUSH_EN             1    /*     Include code for OSQFlush()                              */
#define OS_Q_PEND_ABORT_EN        1    /*     Include code for OSQPendAbort()                          */
#define OS_Q_POST_EN              1    /*     Include code for OSQPost()                               */
#define OS_Q_POST_FRONT_EN        1    /*     Include code for OSQPostFront()                          */
#define OS_Q_POST_OPT_EN          1    /*     Include code for OSQPostOpt()                            */
#define OS_Q_QUERY_EN             1    /*     Include code for OSQQuery()                              */


                                       /* ------------------------ SEMAPHORES ------------------------ */
#define OS_SEM_EN                 1    /* Enable (1) or Disable (0) code generation for SEMAPHORES     */
#define OS_SEM_ACCEPT_EN          1    /*    Include code for OSSemAccept()                            */
#define OS_SEM_DEL_EN             1    /*    Include code for OSSemDel()                               */
#define OS_SEM_PEND_ABORT_EN      1    /*    Include code for OSSemPendAbort()                         */
#define OS_SEM_QUERY_EN           1    /*    Include code for OSSemQuery()                             */
#define OS_SEM_SET_EN             1    /*    Include code for OSSemSet()                               */


                                       /* --------------------- TASK MANAGEMENT ---------------------- */
#define OS_TASK_CHANGE_PRIO_EN    1    /*     Include code for OSTaskChangePrio()                      */
#define OS_TASK_CREATE_EN         1    /*     Include code for OSTaskCreate()                          */
#define OS_TASK_CREATE_EXT_EN     1    /*     Include code for OSTaskCreateExt()                       */
#define OS_TASK_DEL_EN            1    /*     Include code for OSTaskDel()                             */
#define OS_TASK_NAME_SIZE        16    /*     Determine the size of a task name                        */
#define OS_TASK_PROFILE_EN        1    /*     Include variables in OS_TCB for profiling                */
#define OS_TASK_QUERY_EN          1    /*     Include code for OSTaskQuery()                           */
#define OS_TASK_SUSPEND_EN        1    /*     Include code for OSTaskSuspend() and OSTaskResume()      */
#define OS_TASK_SW_HOOK_EN        1    /*     Include code for OSTaskSwHook()                          */


                                       /* --------------------- TIME MANAGEMENT ---------------------- */
#define OS_TIME_DLY_HMSM_EN       1    /*     Include code for OSTimeDlyHMSM()                         */
#define OS_TIME_DLY_RESUME_EN     1    /*     Include code for OSTimeDlyResume()                       */
#define OS_TIME_GET_SET_EN        1    /*     Include code for OSTimeGet() and OSTimeSet()             */
#define OS_TIME_TICK_HOOK_EN      1    /*     Include code for OSTimeTickHook()                        */


                                       /* --------------------- TIMER MANAGEMENT --------------------- */
#define OS_TMR_EN                 1    /* Enable (1) or Disable (0) code generation for TIMERS         */
#define OS_TMR_CFG_MAX           16    /*     Maximum number of timers                                 */
#define OS_TMR_CFG_NAME_SIZE     16    /*     Determine the size of a timer name                       */
#define OS_TMR_CFG_WHEEL_SIZE     8    /*     Size of timer wheel (#Spokes)                            */
#define OS_TMR_CFG_TICKS_PER_SEC 10    /*     Rate at which timer management task runs (Hz)            */


#endif
腹黑大胖兔 2013-08-23
  • 打赏
  • 举报
回复

#include "includes.h"

OS_STK OSStackSizeTaskA[64];
unsigned char u8PriorityTaskA = 8;
void OSTaskA(void *data);
void OSTaskB(void *data);
void OSTaskC(void *data);
 
void main(void)
{
  unsigned char u8OSError;
  OSInit();

  u8OSError = OSTaskCreateExt((void (*)(void *))OSTaskA, 
                              (void*)0,
                              (OS_STK*)&OSStackSizeTaskA[63],
                              (INT8U)u8PriorityTaskA,
                              (INT8U)u8PriorityTaskA,
                              (OS_STK*)&OSStackSizeTaskA[0],
                              (INT32U)64,
                              (void*)0,
                              (INT16U)(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
  OSStart();
}

void OSTaskA(void* pdata)
{
  while(1)
  {
      OSTimeDly(10);
  }
}
 
我的代码,版主求救啊,一周多了,还不行, OSStart()后什么都不进,哪怕写一句i=0;都没用
youzi722 2013-08-22
  • 打赏
  • 举报
回复
是否初始堆栈(非任务堆栈,main函数使用的堆栈)设置的太小了,你在main函数的初始化函数里用了太多的局部变量导致堆栈溢出了。 初始堆栈一般是在启动汇编中设置的。
woshi_ziyu 2013-08-22
  • 打赏
  • 举报
回复
OSStart()后应该会有个死循环
woshi_ziyu 2013-08-22
  • 打赏
  • 举报
回复
贴一下你的代码看看 可以调试一下
woshi_ziyu 2013-08-22
  • 打赏
  • 举报
回复
INT32S main (void)
{
	CPU_INT08U  os_err;
	
	os_err = os_err; /* prevent warning... */

  /* Note:  ÓÉÓÚʹÓÃUCOS, ÔÚOSÔËÐÐ֮ǰÔËÐÐ,×¢Òâ±ðʹÄÜÈκÎÖжÏ. */
	IntDisAll();                     /* Disable all ints until we are ready to accept them.  */

  OSInit();                        /* Initialize "uC/OS-II, The Real-Time Kernel".         */

	
	os_err = OSTaskCreateExt((void (*)(void *)) App_TaskStart,  /* Create the start task.                               */
                             (void          * ) 0,
                             (OS_STK        * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],
                             (INT8U           ) APP_TASK_START_PRIO,
                             (INT16U          ) APP_TASK_START_PRIO,
                             (OS_STK        * )&App_TaskStartStk[0],
                             (INT32U          ) APP_TASK_START_STK_SIZE,
                             (void          * )0,
                             (INT16U          )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
	
#if OS_TASK_NAME_EN > 0
    OSTaskNameSet(APP_TASK_START_PRIO, (CPU_INT08U *)"Start Task", &os_err);
#endif

	OSStart();                                                  /* Start multitasking (i.e. give control to uC/OS-II).  */

	return (0);
}
cod
static  void  App_TaskStart (void *p_arg)
{   
	(void)p_arg;
	
	/***************  Init hardware ***************/

  OS_CPU_SysTickInit(SystemCoreClock/1000);                 /* Initialize the SysTick.                              */

#if (OS_TASK_STAT_EN > 0)
    OSStatInit();                                            /* Determine CPU capacity.                              */
#endif

	/******************************/
	App_TaskCreate();                                       /* Create application tasks.                            */
	
	for(;;)
	{
		OSTimeDlyHMSM(0, 1, 0, 0);							 /* Delay One minute */
  }	
}
腹黑大胖兔 2013-08-22
  • 打赏
  • 举报
回复
引用 4 楼 youzi722 的回复:
是否初始堆栈(非任务堆栈,main函数使用的堆栈)设置的太小了,你在main函数的初始化函数里用了太多的局部变量导致堆栈溢出了。 初始堆栈一般是在启动汇编中设置的。
I will check it, good idea.
腹黑大胖兔 2013-08-22
  • 打赏
  • 举报
回复
引用 3 楼 woshi_ziyu 的回复:
OSStart()后应该会有个死循环
死循环,哪里?版主求救
腹黑大胖兔 2013-08-21
  • 打赏
  • 举报
回复
怎么木有人回复啊,顶起来,顶起来
lbing7 2013-08-21
  • 打赏
  • 举报
回复
LZ先到UCOS的官网找找 :)

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧