初级会员
- 积分
- 54
- 金钱
- 54
- 注册时间
- 2016-1-13
- 在线时间
- 8 小时
|
1金钱
买了战舰和探索者,在搭建嵌入式开发平台,我在使用正点原子例程的过程中,积累了一些经验,下面是对于emwin部分的改进建议,看看对不对。
以 EMWIN实验23 汉字显示(FLASH外置字库) 为例子,其他例子也是差不多吧。
首先是emWin的多任务移植,应该存在BUG,下面是定义了信号量指针,,然后创建信号量,,但是这些信号量内存在哪里分配呢? 我搜索了工程,,都没有看到哦。这样的话,这三个信号量指针是悬空的。
static OS_SEM *DispSem;
static OS_SEM *EventSem;
static OS_SEM *KeySem;
void GUI_X_InitOS(void)
{
OS_ERR err;
OSSemCreate ((OS_SEM* )DispSem,
(CPU_CHAR* )"Disp_SEM",
(OS_SEM_CTR)1,
(OS_ERR* )&err);
OSSemCreate ((OS_SEM* )EventSem,
(CPU_CHAR* )"Event_SEM",
(OS_SEM_CTR)0,
(OS_ERR* )&err);
}
我自己的移植代码是这样的,,定义成静态变量,,然后再创建。
/*********************************************************************
*
* Global data
*/
static OS_MUTEX osMutex;
static OS_SEM osSemaphore;
/* Init OS */
void GUI_X_InitOS(void)
{
OS_ERR err;
/* Create Mutex lock */
//osMutexDef(MUTEX);
/* Create the Mutex used by the two threads */
//osMutex = osMutexCreate(osMutex(MUTEX));
OSMutexCreate (&osMutex, "GUI_osMutex", &err);
/* Create Semaphore lock */
//osSemaphoreDef(SEM);
/* Create the Semaphore used by the two threads */
//osSemaphore= osSemaphoreCreate(osSemaphore(SEM), 1);
OSSemCreate (&osSemaphore, "GUI_osSemaphore", 1, &err);
}
此外。。emwin对中文的支持,,我采用原子的代码,,几乎显示不了,,可能是因为我的emWin版本太高?
我改进的移植在这里:
emWin & STemWin & uCGUI 的中文支持
http://www.openedv.com/thread-66273-1-1.html
此外,触摸屏的移植,最好采用通用型触摸屏API,可用于任何类型的驱动(模拟、数字等)。
而模拟触摸屏驱动方式,,还要实现GUI_TOUCH_X_ActivateX,GUI_TOUCH_X_ActivateY,GUI_TOUCH_X_MeasureX,GUI_TOUCH_X_MeasureY四个函数,感觉没那么简洁。
|
|