Rak439移植UCOS问题



  • UCOS 移植的时候rw_os.h文件中
    void* rw_creat_task(RW_OS_TASK_PTR p_task);
    int rw_del_task(void* p_tcb);

    void* rw_creat_mutex(void);
    int rw_del_mutex(void* p_mutex);
    int rw_lock_mutex(void* p_mutex, uint32_t timeout);
    int rw_unlock_mutex(void* p_mutex);

    void* rw_creat_sem(void);
    int rw_del_sem(void* p_sem);
    int rw_post_sem(void* p_sem);
    int rw_pend_sem(void* p_sem, uint32_t timeout);
    这些函数中全部都要写吗? 如果要 ,创建任务函数可以用malloc 来开辟控制块内存和任务堆栈内存 在删除任务用free 释放 可以吗?


  • administrators

    参考这个文件写。rw_os.c



  • @rakadmin 我改了下,主要问题是任务堆栈的内存怎么分配和释放的问题。
    还有你们这个里面这几句是干嘛的?static osMutexDef(mutex);static osSemaphoreDef(sem); UCOSIII 有相应的修改吗

    void * rw_creat_task(RW_OS_TASK_PTR p_task)
    {
    OS_ERR err;
    OS_TCB *p_tcb =(OS_TCB *)malloc(sizeof(OS_TCB));
    OSTaskCreate( (OS_TCB *)p_tcb,
    (CPU_CHAR *)0,
    (OS_TASK_PTR )p_task,
    (void *)0,
    (OS_PRIO )11,
    (CPU_STK *)p_stk_base,
    (CPU_STK_SIZE )stk_limit,
    (CPU_STK_SIZE )stk_size,
    (OS_MSG_QTY )q_size,
    (OS_TICK )0,
    (void *)0,
    (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
    (OS_ERR *)&err);
    return p_tcb;
    }

    int rw_del_task(void* p_tcb)
    {
    OS_ERR err;
    OSTaskDel( (OS_TCB *)p_tcb,
    (OS_ERR *)&err);
    free(p_tcb);
    return err;

    }

    //static osMutexDef(mutex);

    void* rw_creat_mutex(void)
    {
    OS_ERR err;
    OS_MUTEX *p_mutex=(OS_MUTEX *)malloc(sizeof(OS_MUTEX));
    OSMutexCreate ( (OS_MUTEX *)p_mutex,
    (CPU_CHAR *)0,
    (OS_ERR *)&err);
    return p_mutex;
    }

    int rw_del_mutex(void* p_mutex)
    {
    OS_ERR err;
    OSMutexDel( (OS_MUTEX *)p_mutex,
    (OS_OPT )OS_OPT_PEND_BLOCKING,
    (OS_ERR *)&err);
    free(p_mutex);
    return err;
    }

    int rw_lock_mutex(void* p_mutex, uint32_t timeout)
    {
    OS_ERR err;
    OSMutexPend( (OS_MUTEX *)p_mutex,
    (OS_TICK )timeout,
    (OS_OPT )OS_OPT_PEND_BLOCKING,
    (CPU_TS *)0,
    (OS_ERR *)&err);
    return err;
    }

    int rw_unlock_mutex(void* p_mutex)
    {
    OS_ERR err;
    OSMutexPost( (OS_MUTEX *)p_mutex,
    (OS_OPT )OS_OPT_POST_NONE,
    (OS_ERR *)&err);
    return err;
    }

    void* rw_creat_sem(void)
    {
    OS_ERR err;
    OS_SEM p_sem=(OS_SEM)malloc(sizeof (OS_SEM));
    OSSemCreate( (OS_SEM *)p_sem,
    (CPU_CHAR *)0,
    (OS_SEM_CTR )1,
    (OS_ERR *)&err);
    return p_sem;
    }

    int rw_del_sem(void* p_sem)
    {
    OS_ERR err;
    OSSemDel(p_sem,OS_OPT_DEL_ALWAYS,&err);
    free(p_sem);
    return err;
    }

    int rw_post_sem(void* p_sem)
    {
    OS_ERR err;
    OSSemPost( (OS_SEM *)p_sem,
    (OS_OPT )OS_OPT_PEND_BLOCKING,
    (OS_ERR *)&err);
    return err;
    }

    int rw_pend_sem(void* p_sem, uint32_t timeout)
    {
    OS_ERR err;
    OSSemPend( (OS_SEM *)p_sem,
    (OS_TICK )timeout,
    (OS_OPT )OS_OPT_PEND_BLOCKING,
    (CPU_TS *)0,
    (OS_ERR *)&err);
    return err;
    }



  • 显示有问题,我的星号有的没 ,有的变表情了....



  • @rakadmin 懂了!!!好的 ,谢谢!!!



  • @rakadmin 有没有这样的工程哦?直接看下来得快点,写是写好了,还没调好。



  • @rakadmin 之前没OS 初始化能过有OS 中断就不过了0_1502767492153_upload-36787cf0-c7c5-4780-a556-51429ef0e854


  • administrators

    你是在哪里过不了?你用示波器量下中断脚。



  • send=c8 recv=23
    send=0 recv=23
    send dummy=64032b8c recv=71
    send dummy=64032b8c recv=0
    send dummy=64032b8c recv=0
    send dummy=64032b8c recv=0
    send=4c recv=0
    send=0 recv=0
    send=3 recv=0
    send=0 recv=0
    send=4d recv=0
    send=0 recv=0
    send=0 recv=0
    send=1f recv=0
    RAK module platform init...failed ret=-3



  • @rakadmin 0_1502858904916_upload-cc8fd82a-1dee-4707-bb4c-3ff6c4afb611 到这个位置的时候中断脚是高,0_1502858961106_upload-070ac20c-c421-41cd-97a1-dbefb0db4223 这个函数执行完就一直是低了。



  • @rakadmin 很尴尬,这个找不到原因啊,不知道0_1502859863025_upload-1c8d9433-7af3-45b9-bab2-ed3dc98c1402 函数到底做了什么。。。


  • administrators

    1.硬件上439已经产生了中断,需要主机去处理中断。目前判断你OS的代码硬件中断处理函数没进。你对比一下你的NOS是否确定可以进硬件中断处理函数,打断点进去看下。如果NOS可以进,OS进不了,请检查你的代码。
    2.从你的OS SPI log信息,看到SPI通信log信息不正确。请对比NOS的SPI初始化的log信息,它们要是一样的。



  • @rakadmin 我试过了,没有OS 的时候是会进入中断并打印我的调试字符串,有了OS就卡死了,并且INT 本来是高的变低了!!!也没进入过中断,没有OS 好像进入了中断三次。



  • @rakadmin 我是用的1.07版本的cortex-M3 OS库


  • administrators

    那就是你OS代碼移植有問題。請檢查你的代碼。



  • @rakadmin 我的这套程序之前用的是串口WIFI模块系统还是UCOSIII也就是说出问题只能是rw_os.c rw_os.h 这个是你这边给的代码做的,应该没问题。还有就是 0_1503389336593_upload-a240b633-e508-48c4-925c-e62eb3093d5b 这个文件里面0_1503389399821_upload-5b3cc9c7-a97f-4a7e-943f-173b31f2f3eb 延时我也是用的UCOS自带的基本没改0_1503389451191_upload-1d43716d-b7fe-4e0e-9090-dde07f951c17 0_1503389492768_upload-99fc5507-4c7c-448f-b5fc-6557b991d24c 这个是中断的。现在主要就是中断过不了!!!!!中断脚为什么会变低电平?


  • administrators

    我们的NANO的平台的示例代码就是用的UCOS,你参考那里面的代码看看.



  • @rakadmin 我看了都改了差不多都一样了,本来移植就没多少代码要改的,很想知道这个初始化函数到底做了什么?


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待