硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3173|回复: 4
收起左侧

[emWin] ST的emwin5.44包里面有个配置文件GUI_X_OS.c有错误!

[复制链接]

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2020-9-9 14:14:22 | 显示全部楼层 |阅读模式
Snipaste_2020-09-09_14-11-32.png
使用环境是cubeMX配置FreeRTOS后,加上emwin。
我在使用的时候发现emwin的定时器不准,原来是st给的配置文件有错误!
分享给大家,避免掉坑。

回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2020-9-9 14:24:59 | 显示全部楼层
不错不错,感谢大神啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115797
QQ
发表于 2020-9-9 17:24:01 | 显示全部楼层
用MDK安装目录里面的,各种OS接口齐全。
回复

使用道具 举报

3

主题

30

回帖

39

积分

新手上路

积分
39
发表于 2020-9-10 09:19:12 | 显示全部楼层
据我了解。。他这个文件没有对 CMSIS_OS V2 兼容
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
 楼主| 发表于 2020-9-10 09:55:17 | 显示全部楼层
eric2013 发表于 2020-9-9 17:24
用MDK安装目录里面的,各种OS接口齐全。

找到了,附件中。
他这里的处理方式是,emwin GUI初始化时,创建一个cmsis_os的独立定时器,1ms的周期,作为emwin的时钟。

  1. #include "cmsis_os.h"
  2. #include "GUI.h"

  3. /*********************************************************************
  4. *
  5. *       Global data
  6. */
  7. volatile GUI_TIMER_TIME OS_TimeMS;


  8. /*********************************************************************
  9. *
  10. *       GUI Tick (executed each ms)
  11. */

  12. static void GUI_Tick (void const *argument) {
  13.   OS_TimeMS++;
  14. }

  15. /*********************************************************************
  16. *
  17. *      Timing:
  18. *                 GUI_X_GetTime()
  19. *                 GUI_X_Delay(int)

  20.   Some timing dependent routines require a GetTime
  21.   and delay function. Default time unit (tick), normally is
  22.   1 ms.
  23. */

  24. GUI_TIMER_TIME GUI_X_GetTime(void) {
  25.   return OS_TimeMS;
  26. }

  27. void GUI_X_Delay(int ms) {
  28.   osDelay(ms);
  29. }

  30. /*********************************************************************
  31. *
  32. *       GUI_X_Init()
  33. *
  34. * Note:
  35. *     GUI_X_Init() is called from GUI_Init is a possibility to init
  36. *     some hardware which needs to be up and running before the GUI.
  37. *     If not required, leave this routine blank.
  38. */

  39. osTimerDef(GUI_Timer, GUI_Tick);
  40. osTimerId  GUI_TimerId;

  41. void GUI_X_Init(void) {
  42.   GUI_TimerId = osTimerCreate(osTimer(GUI_Timer), osTimerPeriodic, NULL);
  43.   osTimerStart(GUI_TimerId, 1);
  44. }

  45. /*********************************************************************
  46. *
  47. *       GUI_X_ExecIdle
  48. *
  49. * Note:
  50. *  Called if WM is in idle state
  51. */

  52. void GUI_X_ExecIdle(void) {
  53.   osDelay(1);
  54. }

  55. /*********************************************************************
  56. *
  57. *      Logging: OS dependent

  58. Note:
  59.   Logging is used in higher debug levels only. The typical target
  60.   build does not use logging and does therefor not require any of
  61.   the logging routines below. For a release build without logging
  62.   the routines below may be eliminated to save some space.
  63.   (If the linker is not function aware and eliminates unreferenced
  64.   functions automatically)

  65. */

  66. void GUI_X_Log     (const char *s) { GUI_USE_PARA(s); }
  67. void GUI_X_Warn    (const char *s) { GUI_USE_PARA(s); }
  68. void GUI_X_ErrorOut(const char *s) { GUI_USE_PARA(s); }

  69. /*********************************************************************
  70. *
  71. *      Multitasking:
  72. *
  73. *                 GUI_X_InitOS()
  74. *                 GUI_X_GetTaskId()
  75. *                 GUI_X_Lock()
  76. *                 GUI_X_Unlock()
  77. *
  78. * Note:
  79. *   The following routines are required only if emWin is used in a
  80. *   true multi task environment, which means you have more than one
  81. *   thread using the emWin API.
  82. *   In this case the
  83. *                       #define GUI_OS 1
  84. *  needs to be in GUIConf.h
  85. */

  86. osMutexDef(GUI_Mutex);
  87. osMutexId  GUI_MutexId;

  88. void GUI_X_InitOS(void)    { GUI_MutexId = osMutexCreate(osMutex(GUI_Mutex)); }
  89. void GUI_X_Unlock(void)    { osMutexRelease(GUI_MutexId); }
  90. void GUI_X_Lock(void)      { osMutexWait   (GUI_MutexId, osWaitForever); }
  91. U32  GUI_X_GetTaskId(void) { return ((U32)osThreadGetId()); }

  92. /*********************************************************************
  93. *
  94. *      Event driving (optional with multitasking)
  95. *
  96. *                 GUI_X_WaitEvent()
  97. *                 GUI_X_WaitEventTimed()
  98. *                 GUI_X_SignalEvent()
  99. */

  100. osThreadId GUI_ThreadId;

  101. void GUI_X_WaitEvent(void) {
  102.   GUI_ThreadId = osThreadGetId();
  103.   osSignalWait(0x00000001, osWaitForever);
  104. }

  105. void GUI_X_WaitEventTimed(int Period) {
  106.   GUI_ThreadId = osThreadGetId();
  107.   osSignalWait(0x00000001, Period);
  108. }

  109. void GUI_X_SignalEvent(void) {
  110.   if (GUI_ThreadId) {
  111.     osSignalSet(GUI_ThreadId, 0x00000001);
  112.   }
  113. }

  114. /*************************** End of file ****************************/
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-19 09:19 , Processed in 0.351227 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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