哪位大神有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
...全文
351 17 打赏 收藏 转发到动态 举报
写回复
用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的官网找找 :)
随着元宇宙概念兴起与虚拟数字人技术快速发展,虚拟主播、在线教育虚拟助教、元宇宙社交等应用场景对实时动作表情驱动系统提出更高需求。当前主流动作捕捉方案多依赖专业光学动捕设备或深度相机,设备成本高昂、部署复杂,难以在普通用户场景普及。本研究设计并实现一套基于普通单目摄像头的虚拟数字人实时动作表情驱动系统,旨在降低数字人内容生产门槛。系统采用Unity作为主开发引擎,结合Blender进行数字人模型构建与BlendShape表情系统制作,使用MediaPipe框架实现人脸关键点检测与人体姿态估计,通过C#脚本完成实时数据处理与渲染控制。系统包含五个关键模块:人脸关键点检测(MediaPipe Face Mesh提取468个关键点)、人体姿态估计(MediaPipe Pose识别33个骨骼关键点)、表情迁移映射、动作平滑优化(卡尔曼滤波与贝塞尔曲线插值消除抖动)、实时渲染(60fps流畅渲染,支持直播推流与视频录制)。实验结果表明,系统在普通笔记本上可实现60fps实时驱动,人脸关键点检测准确率达98.7%,人体姿态估计平均误差小于5像素,表情迁移相似度达92.3%。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论基础 第3章 系统架构设计 第4章 关键模块设计与实现 第5章 实验与结果分析 第6章 总结与展望 参考文献
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。
内容概要:本文研究了基于阶跃响应的V-Tiger自动增益调整PID控制器优化方法,并提供了完整的Matlab代码实现。通过深入分析PID控制的核心性能指标与V-Tiger控制器的动态特性,提出了一种融合阶跃响应特征提取与多目标协同优化的自动整定方案,设计了具备自适应迭代校正能力的优化机制,有效提升了控制系统的响应速度、稳定性和抗干扰能力。文中系统阐述了整定原理、算法架构设计及性能验证流程,通过仿真实验充分验证了该方法在复杂工业控制场景下实现高精度参数自整定的可行性与优越性,为智能PID控制提供了可复现、可拓展的技术路径。; 适合人群:具备自动控制理论基础和Matlab编程能力,从事控制工程、自动化、电气工程等领域研究的研发人员及高校研究生。; 使用场景及目标:①应用于需要高精度PID参数整定的工业控制系统中,如电机驱动、温度控制、电力电子变换器等;②为科研人员提供一种可复现、可扩展的智能PID整定方法,用于提升系统动态性能与鲁棒性;③作为教学案例帮助学生理解PID整定原理与现代优化算法的融合应用。; 阅读建议:建议读者结合文中的Matlab代码逐模块运行与调试,重点关注阶跃响应特征提取与增益优化策略的实现逻辑,同时可尝试将其应用于实际控制系统中进行对比验证,以深化对自动整定机制的理解。

27,522

社区成员

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

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