搜索
bottom↓
回复: 15

uCGUI裸奔成功,现想在Keil自带的RL-RTX下运行,请教大虾相关的GUI_X.c如何编写?

[复制链接]

出0入0汤圆

发表于 2011-3-3 13:44:50 | 显示全部楼层 |阅读模式
如下是uCGUI在在uCOS下时相关的参考代码

/*
*********************************************************************************************************
*                                             uC/GUI V3.98
*                        Universal graphic software for embedded applications
*
*                       (c) Copyright 2002, Micrium Inc., Weston, FL
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*              礐/GUI is protected by international copyright laws. Knowledge of the
*              source code may not be used to write a similar product. This file may
*              only be used in accordance with a license and should not be redistributed
*              in any way. We appreciate your understanding and fairness.
*
---Author-Explanation
*
* 1.00.00 020519 JJL    First release of uC/GUI to uC/OS-II interface
*
*
* Known problems or limitations with current version
*
*    None.
*
*
* Open issues
*
*    None
*********************************************************************************************************
*/

#include <ucos_ii.h>
#include "GUI_Private.H"
#include "stdio.H"

/*
*********************************************************************************************************
*                                         GLOBAL VARIABLES
*********************************************************************************************************
*/

static  OS_EVENT  *DispSem;
static  OS_EVENT  *EventMbox;

static  OS_EVENT  *KeySem;
static  int        KeyPressed;
static  char       KeyIsInited;


/*
*********************************************************************************************************
*                                        TIMING FUNCTIONS
*
* Notes: Some timing dependent routines of uC/GUI require a GetTime and delay funtion.
*        Default time unit (tick), normally is 1 ms.
*********************************************************************************************************
*/

int  GUI_X_GetTime (void)
{
    return ((int)OSTimeGet());
}


void  GUI_X_Delay (int period)
{
    INT32U  ticks;


    ticks = (period * 1000) / OS_TICKS_PER_SEC;
    OSTimeDly((INT16U)ticks);
}


/*
*********************************************************************************************************
*                                          GUI_X_ExecIdle()
*********************************************************************************************************
*/
void GUI_X_ExecIdle (void)
{
    OS_X_Delay(1);
}


/*
*********************************************************************************************************
*                                    MULTITASKING INTERFACE FUNCTIONS
*
* Note(1): 1) The following routines are required only if uC/GUI is used in a true multi task environment,
*             which means you have more than one thread using the uC/GUI API.  In this case the #define
*             GUI_OS 1   needs to be in GUIConf.h
*********************************************************************************************************
*/

void  GUI_X_InitOS (void)
{
    DispSem   = OSSemCreate(1);
    EventMbox = OSMboxCreate((void *)0);
}


void  GUI_X_Lock (void)
{
    INT8U  err;
   
   
    OSSemPend(DispSem, 0, &err);
}


void  GUI_X_Unlock (void)
{
    OSSemPost(DispSem);
}


U32  GUI_X_GetTaskId (void)
{
    return ((U32)(OSTCBCur->OSTCBPrio));
}

/*
*********************************************************************************************************
*                                        GUI_X_WaitEvent()
*                                        GUI_X_SignalEvent()
*********************************************************************************************************
*/


void GUI_X_WaitEvent (void)
{
    INT8U  err;


    (void)OSMboxPend(EventMbox, 0, &err);
}


void GUI_X_SignalEvent (void)
{
    (void)OSMboxPost(EventMbox, (void *)1);
}

/*
*********************************************************************************************************
*                                      KEYBOARD INTERFACE FUNCTIONS
*
* Purpose: The keyboard routines are required only by some widgets.
*          If widgets are not used, they may be eliminated.
*
* Note(s): If uC/OS-II is used, characters typed into the log window will be placed        in the keyboard buffer.
*          This is a neat feature which allows you to operate your target system without having to use or
*          even to have a keyboard connected to it. (useful for demos !)
*********************************************************************************************************
*/

static  void  CheckInit (void)
{
    if (KeyIsInited == FALSE) {
        KeyIsInited = TRUE;
        GUI_X_Init();
    }
}


void GUI_X_Init (void)
{
    KeySem = OSSemCreate(0);
}


int  GUI_X_GetKey (void)
{
    int r;


    r          = KeyPressed;
    CheckInit();
    KeyPressed = 0;
    return (r);
}


int  GUI_X_WaitKey (void)
{
    int    r;
    INT8U  err;


    CheckInit();
    if (KeyPressed == 0) {
        OSSemPend(KeySem, 0, &err);
    }
    r          = KeyPressed;
    KeyPressed = 0;
    return (r);
}


void  GUI_X_StoreKey (int k)
{
    KeyPressed = k;
    OSSemPost(KeySem);
}

出0入0汤圆

发表于 2011-3-3 19:13:54 | 显示全部楼层
21ic xfcjava2网友共享过这个代码 你搜搜看

出0入0汤圆

 楼主| 发表于 2011-3-3 20:46:45 | 显示全部楼层
好的. 谢谢. 明天到公司我把整理的ucgui3.98的MDK工程发下.

出0入0汤圆

发表于 2011-3-3 21:18:18 | 显示全部楼层
好,等你大作!谢谢啦!

出0入0汤圆

 楼主| 发表于 2011-3-4 13:18:20 | 显示全部楼层
点击此处下载 ourdev_619922HCO7DV.rar(文件大小:1.43M) (原文件名:uCGUI_398.rar)
ucgui3.98的MDK4.12工程文件.

出0入0汤圆

 楼主| 发表于 2011-3-4 13:21:58 | 显示全部楼层
若裸奔, 配置文件中 GUI_OS 改为(0), 再编译后即生成相关的lib文件.
在自己的工程中加入此Lib, 再修改相关的LCD显示和触摸屏部分即可.

若需支持OS, 配置文件中 GUI_OS 改为(1), 再编译后即生成相关的lib文件.

出0入0汤圆

发表于 2011-3-4 16:26:32 | 显示全部楼层
哪里搞的398~~

原版都含有MEMDEV?

出0入0汤圆

发表于 2011-3-6 13:54:29 | 显示全部楼层
相当地感谢

出0入0汤圆

发表于 2011-3-6 14:03:22 | 显示全部楼层
谢谢楼主

出0入0汤圆

 楼主| 发表于 2011-3-8 15:26:32 | 显示全部楼层
总结了RTX-CM3源码的变量.

/*----------------------------------------------------------------------------
*      Global Variables
*---------------------------------------------------------------------------*/
U16 os_time;                        // Free running system tick counter
struct OS_XTMR  os_tmr;                                        // User Timer list pointer
struct OS_TSK   os_tsk;                                        // Running and next task info.
struct OS_TCB   os_idle_TCB;                ///Running and next task info.
static BIT      os_lock;
static BIT      os_psh_flag;
struct OS_XCB   os_rdy;                                        // List head of chained ready tasks
struct OS_XCB   os_dly;                                        // List head of chained delay tasks
struct OS_ROBIN os_robin;

出0入0汤圆

 楼主| 发表于 2011-3-21 12:40:33 | 显示全部楼层
/*------------------------------------------------------------------------------------------------
       RL-ARM - RTX 源码汇总

感谢党感谢Z.F., 特将原相关的文件汇总成1个文件以便为共_产主义初级阶段而奋斗!!!!!!!!!!!!!!!
应用方法: 需将本文件和svc_table.s加入工程, 工程的Target-->Operating System选择None, 其余的无需改变
   
秋水于2011-3-3在4.12版本的源码上汇总
V4.12         Corrected: a problem in stack checking for Cortex-M library.
                The stack was checked before the task context was completely stacked.
               
V4.13         Corrected: a problem in isr_mbx_receive() function for Cortex-M library.
                If sending task was suspended on a full mailbox, a message was lost. (但代码未改变????)
                Added: big endian RTX libraries for Cortex-M0, Cortex-M1, Cortex-M3 and Cortex-M4

Add:
volatile U32 OSTime;                                // New Add

*----------------------------------------------------------------------------------------------*/  
//#include "rtx_cm3.h"

//#include "RTX_Config.h"
//#include "rt_TypeDef.h"
//#include "rt_HAL_CM.h"
//#include "rt_Task.h"
//#include "rt_Time.h"
//#include "rt_Timer.h"
//#include "rt_MemBox.h"
//#include "rt_Mailbox.h"
//#include "rt_Mutex.h"
//#include "rt_System.h"
//#include "rt_Semaphore.h"
//#include "rt_List.h"
//#include "rt_Robin.h"
//#include "rt_Event.h"

/*----------------------------------------------------------------------------
*      RL-ARM - RTX Include Files
*---------------------------------------------------------------------------*/

/* Types */
typedef char               S8;
typedef unsigned char      U8;
typedef short              S16;
typedef unsigned short     U16;
typedef int                S32;
typedef unsigned int       U32;
typedef long long          S64;
typedef unsigned long long U64;
typedef unsigned char      BIT;
typedef unsigned int       BOOL;
typedef void               (*FUNCP)(void);

typedef U32     OS_TID;
typedef void    *OS_ID;
typedef U32     OS_RESULT;

typedef struct OS_TCB {
  /* General part: identical for all implementations.                        */
  U8     cb_type;                 /* Control Block Type                      */
  U8     state;                   /* Task state                              */
  U8     prio;                    /* Execution priority                      */
  U8     task_id;                 /* Task ID value for optimized TCB access  */
  struct OS_TCB *p_lnk;           /* Link pointer for ready/sem. wait list   */
  struct OS_TCB *p_rlnk;          /* Link pointer for sem./mbx lst backwards */
  struct OS_TCB *p_dlnk;          /* Link pointer for delay list             */
  struct OS_TCB *p_blnk;          /* Link pointer for delay list backwards   */
  U16    delta_time;              /* Time until time out                     */  
  U16    interval_time;           /* Time interval for periodic waits        */  
  U16    events;                  /* Event flags                             */
  U16    waits;                   /* Wait flags                              */
  void   **msg;                   /* Direct message passing when task waits  */
  U8     ret_val;                 /* Return value upon completion of a wait  */

  /* Hardware dependant part: specific for CM processor                      */
  U8     ret_upd;                 /* Updated return value                    */
  U16    priv_stack;              /* Private stack size, 0= system assigned  */
  U32    tsk_stack;               /* Current task Stack pointer (R13)        */
  U32    *stack;                  /* Pointer to Task Stack memory block      */

  /* Task entry point used for uVision debugger                              */
  FUNCP  ptask;                   /* Task entry address                      */
} *P_TCB;

#define TCB_RETVAL      32        /* 'ret_val' offset                        */
#define TCB_RETUPD      33        /* 'ret_upd' offset                        */
#define TCB_TSTACK      36        /* 'tsk_stack' offset                      */

typedef struct OS_PSFE {          /* Post Service Fifo Entry                 */
  void  *id;                      /* Object Identification                   */
  U32    arg;                     /* Object Argument                         */
} *P_PSFE;

typedef struct OS_PSQ {           /* Post Service Queue                      */
  U8     first;                   /* FIFO Head Index                         */
  U8     last;                    /* FIFO Tail Index                         */
  U8     count;                   /* Number of stored items in FIFO          */
  U8     size;                    /* FIFO Size                               */
  struct OS_PSFE q[1];            /* FIFO Content                            */
} *P_PSQ;

typedef struct OS_TSK {
  P_TCB  run;                     /* Current running task                    */
  P_TCB  new;                     /* Scheduled task to run                   */
} *P_TSK;

typedef struct OS_ROBIN {         /* Round Robin Control                     */
  P_TCB  task;                    /* Round Robin task                        */
  U16    time;

出0入0汤圆

 楼主| 发表于 2011-3-21 12:43:07 | 显示全部楼层
在热心网友 Chnny的帮助下, 顺利完成了接口部分的代码. 在此向Chnny表示诚挚的谢意!

出0入0汤圆

发表于 2011-7-5 21:45:37 | 显示全部楼层
我用这个编译出来的库,不能绘制对话框啊,对话框是个黑块,而且就死机在那了

出0入0汤圆

发表于 2011-7-8 22:31:09 | 显示全部楼层
看看,不错

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-29 12:27

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

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