你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

智能手表雏形之U/COSIII实时操作系统移植

[复制链接]
颩色四葉愺 发布时间:2015-1-8 20:58
添加u/cosIII所需的文件,如下图
QQ截图20150108205408.png
QQ截图20150108205443.png
QQ截图20150108205453.png
QQ截图20150108205500.png
QQ截图20150108205508.png
QQ截图20150108205518.png
主要代码如下:
  1. #include "app.h"
  2. #include "gui_desktop.h"
  3. #include "sim908.h"
  4. #include <string.h>
  5. #include "wm.h"
  6. #include "gui_common.h"
  7. #include "rtc.h"
  8. #include "i2c_ee.h"
  9. #include "bsp_sdfatfs_app.h"

  10. extern        OS_TCB        StartUp_TCB;                                       

  11. static  OS_TCB        LED_TCB;                                                   
  12. static        CPU_STK        LED_Stk[TASK_LED_STK_SIZE];           
  13. static  OS_TCB        GUI_TCB;                                                           
  14. static        CPU_STK        GUI_Stk[TASK_GUI_STK_SIZE];
  15. static  OS_TCB        GUI_Touch_TCB;                                                           
  16. static        CPU_STK        GUI_Touch_Stk[TASK_GUI_Touch_STK_SIZE];        
  17. //static OS_TCB AT_TCB;
  18. //static CPU_STK AT_Stk[TASK_AT_STK_SIZE];
  19. OS_TCB IntTest_TCB;
  20. static CPU_STK IntTest_Stk[TASK_INTTEST_STK_SIZE];
  21. OS_TCB MessageHandle_TCB;
  22. static CPU_STK MessageHandle_Stk[TASK_MESSAGEHANDLE_STK_SIZE];
  23. OS_TCB PhoneHandle_TCB;
  24. static CPU_STK PhoneHandle_Stk[TASK_PHONEHANDLE_STK_SIZE];
  25. OS_TCB GPRSHandle_TCB;
  26. static CPU_STK GPRSHandle_Stk[TASK_GPRSHANDLE_STK_SIZE];
  27. OS_TCB TimeUpdate_TCB;
  28. static CPU_STK TimeUpdate_Stk[TASK_TIMEUPDATE_STK_SIZE];
  29. OS_TCB SimCheck_TCB;
  30. static CPU_STK SimCheck_Stk[TASK_SIMCHECK_STK_SIZE];
  31. OS_TCB Wireless_TCB;
  32. static CPU_STK Wireless_Stk[TASK_WIRELESS_STK_SIZE];


  33. OS_MEM MyPartition;
  34. u8 MyPartitionStorage[MEMLIST_SIZE][DATA_BUFF_SIZE];


  35. OS_MUTEX Mutex_USART2;

  36. OS_Q Q_GSMResponse;

  37. OS_FLAG_GRP MessageFlagGrp;
  38. OS_FLAG_GRP PhoneFlagGrp;
  39. OS_FLAG_GRP GPRSFlagGrp;

  40. OS_TMR MyTmr1;               





复制代码


收藏 评论9 发布时间:2015-1-8 20:58

举报

9个回答
颩色四葉愺 回答时间:2015-1-8 21:00:20
  1. /*
  2. * 函数名:Task_Start
  3. * 描述 : 启动任务,
  4. * 优先级为1,
  5. * 初始化及创建其它任务
  6. * 输入 :无
  7. * 输出 : 无
  8. */
  9. void Task_Start(void *p_arg)
  10. {
  11. OS_ERR err;
  12. (void)p_arg;

  13. /* 板级初始化 */
  14. BSP_Init();

  15. //创建任务LED
  16. /*
  17. OSTaskCreate((OS_TCB *)&LED_TCB, // 任务控制块指针
  18. (CPU_CHAR *)"LED", // 任务名称
  19. (OS_TASK_PTR )Task_LED, // 任务代码指针
  20. (void *)0, // 传递给任务的参数parg
  21. (OS_PRIO )TASK_LED_PRIO, // 任务优先级
  22. (CPU_STK *)&LED_Stk[0], // 任务堆栈基地址
  23. (CPU_STK_SIZE)TASK_LED_STK_SIZE/10, // 堆栈剩余警戒线
  24. (CPU_STK_SIZE)TASK_LED_STK_SIZE, // 堆栈大小
  25. (OS_MSG_QTY )0, // 可接收的最大消息队列数
  26. (OS_TICK )0, // 时间片轮转时间
  27. (void *)0, // 任务控制块扩展信息
  28. (OS_OPT )(OS_OPT_TASK_STK_CHK |
  29. OS_OPT_TASK_STK_CLR), // 任务选项
  30. (OS_ERR *)&err); // 返回值
  31. */
  32. OSTaskCreate( (OS_TCB *)&IntTest_TCB, //任务控制块指针
  33. (CPU_CHAR *)"inttest", //任务名
  34. (OS_TASK_PTR )Task_IntTest, //任务代码指针
  35. (void *)0, //传递给任务的参数
  36. (OS_PRIO )TASK_INTTEST_PRIO, //任务优先级
  37. (CPU_STK *)&IntTest_Stk[0], //任务堆栈基地址
  38. (CPU_STK_SIZE)TASK_INTTEST_STK_SIZE/10, //堆栈警戒线
  39. (CPU_STK_SIZE)TASK_INTTEST_STK_SIZE, //堆栈大小
  40. (OS_MSG_QTY )10, //可接收的最大消息队列数
  41. (OS_TICK )0, //时间片轮转时间
  42. (void *)0, //任务控制块扩展信息
  43. (OS_OPT )(OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR), //任务选项
  44. (OS_ERR *)&err ); //返回值

  45. OSTaskCreate( (OS_TCB *)&MessageHandle_TCB, //任务控制块指针
  46. (CPU_CHAR *)"MessageHandle", //任务名
  47. (OS_TASK_PTR )Task_MessageHandle, //任务代码指针
  48. (void *)0, //传递给任务的参数
  49. (OS_PRIO )TASK_MESSAGEHANDLE_PRIO, //任务优先级
  50. (CPU_STK *)&MessageHandle_Stk[0], //任务堆栈基地址
  51. (CPU_STK_SIZE)TASK_MESSAGEHANDLE_STK_SIZE/10, //堆栈警戒线
  52. (CPU_STK_SIZE)TASK_MESSAGEHANDLE_STK_SIZE, //堆栈大小
  53. (OS_MSG_QTY )0, //可接收的最大消息队列数
  54. (OS_TICK )0, //时间片轮转时间
  55. (void *)0, //任务控制块扩展信息
  56. (OS_OPT )(OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR), //任务选项
  57. (OS_ERR *)&err ); //返回值
  58. /*
  59. OSTaskCreate( (OS_TCB *)&PhoneHandle_TCB, //任务控制块指针
  60. (CPU_CHAR *)"PhoneHandle", //任务名
  61. (OS_TASK_PTR )Task_PhoneHandle, //任务代码指针
  62. (void *)0, //传递给任务的参数
  63. (OS_PRIO )TASK_PHONEHANDLE_PRIO, //任务优先级
  64. (CPU_STK *)&PhoneHandle_Stk[0], //任务堆栈基地址
  65. (CPU_STK_SIZE)TASK_PHONEHANDLE_STK_SIZE/10, //堆栈警戒线
  66. (CPU_STK_SIZE)TASK_PHONEHANDLE_STK_SIZE, //堆栈大小
  67. (OS_MSG_QTY )0, //可接收的最大消息队列数
  68. (OS_TICK )0, //时间片轮转时间
  69. (void *)0, //任务控制块扩展信息
  70. (OS_OPT )(OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR), //任务选项
  71. (OS_ERR *)&err ); //返回值
  72. */


  73. OSTaskCreate( (OS_TCB *)&GPRSHandle_TCB, //任务控制块指针
  74. (CPU_CHAR *)"GPRSHandle", //任务名
  75. (OS_TASK_PTR )Task_GPRSHandle, //任务代码指针
  76. (void *)0, //传递给任务的参数
  77. (OS_PRIO )TASK_GPRSHANDLE_PRIO, //任务优先级
  78. (CPU_STK *)&GPRSHandle_Stk[0], //任务堆栈基地址
  79. (CPU_STK_SIZE)TASK_GPRSHANDLE_STK_SIZE/10, //堆栈警戒线
  80. (CPU_STK_SIZE)TASK_GPRSHANDLE_STK_SIZE, //堆栈大小
  81. (OS_MSG_QTY )0, //可接收的最大消息队列数
  82. (OS_TICK )0, //时间片轮转时间
  83. (void *)0, //任务控制块扩展信息
  84. (OS_OPT )(OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR), //任务选项
  85. (OS_ERR *)&err ); //返回值

  86. //创建任务GUI
  87. OSTaskCreate((OS_TCB *)&GUI_TCB,
  88. (CPU_CHAR *)"GUI",
  89. (OS_TASK_PTR )Task_GUI,
  90. (void *)0,
  91. (OS_PRIO )TASK_GUI_PRIO,
  92. (CPU_STK *)&GUI_Stk[0],
  93. (CPU_STK_SIZE)TASK_GUI_STK_SIZE/10,
  94. (CPU_STK_SIZE)TASK_GUI_STK_SIZE,
  95. (OS_MSG_QTY )0,
  96. (OS_TICK )0,
  97. (void *)0,
  98. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  99. (OS_ERR *)&err);

  100. //创建任务GUI_Touch
  101. OSTaskCreate((OS_TCB *)&GUI_Touch_TCB,
  102. (CPU_CHAR *)"GUI_Touch",
  103. (OS_TASK_PTR )Task_GUI_Touch,
  104. (void *)0,
  105. (OS_PRIO )TASK_GUI_TOUCH_PRIO,
  106. (CPU_STK *)&GUI_Touch_Stk[0],
  107. (CPU_STK_SIZE)TASK_GUI_Touch_STK_SIZE/10,
  108. (CPU_STK_SIZE)TASK_GUI_Touch_STK_SIZE,
  109. (OS_MSG_QTY )0,
  110. (OS_TICK )0,
  111. (void *)0,
  112. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  113. (OS_ERR *)&err);
  114. /*
  115. OSTaskCreate((OS_TCB *)&TimeUpdate_TCB,
  116. (CPU_CHAR *)"TimeUpdate",
  117. (OS_TASK_PTR )Task_TimeUpdate,
  118. (void *)0,
  119. (OS_PRIO )TASK_TIMEUPDATE_PRIO,
  120. (CPU_STK *)&TimeUpdate_Stk[0],
  121. (CPU_STK_SIZE)TASK_TIMEUPDATE_STK_SIZE/10,
  122. (CPU_STK_SIZE)TASK_TIMEUPDATE_STK_SIZE,
  123. (OS_MSG_QTY )0,
  124. (OS_TICK )0,
  125. (void *)0,
  126. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  127. (OS_ERR *)&err);
  128. */

  129. OSTaskCreate((OS_TCB *)&SimCheck_TCB,
  130. (CPU_CHAR *)"SimCheck",
  131. (OS_TASK_PTR )Task_SimCheck,
  132. (void *)0,
  133. (OS_PRIO )TASK_SIMCHECK_PRIO,
  134. (CPU_STK *)&SimCheck_Stk[0],
  135. (CPU_STK_SIZE)TASK_SIMCHECK_STK_SIZE/10,
  136. (CPU_STK_SIZE)TASK_SIMCHECK_STK_SIZE,
  137. (OS_MSG_QTY )0,
  138. (OS_TICK )0,
  139. (void *)0,
  140. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  141. (OS_ERR *)&err);

  142. OSTaskCreate((OS_TCB *)&Wireless_TCB,
  143. (CPU_CHAR *)"Wireless",
  144. (OS_TASK_PTR )Task_Wireless,
  145. (void *)0,
  146. (OS_PRIO )TASK_WIRELESS_PRIO,
  147. (CPU_STK *)&Wireless_Stk[0],
  148. (CPU_STK_SIZE)TASK_WIRELESS_STK_SIZE/10,
  149. (CPU_STK_SIZE)TASK_WIRELESS_STK_SIZE,
  150. (OS_MSG_QTY )4,
  151. (OS_TICK )0,
  152. (void *)0,
  153. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  154. (OS_ERR *)&err);

  155. //创建定时器任务
  156. OSTmrCreate((OS_TMR *)&MyTmr1,
  157. (CPU_CHAR *)"My Timer #1",
  158. (OS_TICK )10,
  159. (OS_TICK )50,
  160. (OS_OPT )OS_OPT_TMR_PERIODIC,
  161. (OS_TMR_CALLBACK_PTR )TmrCallback_RTCUpdate,
  162. (void *)NULL,
  163. (OS_ERR *)&err);

  164. OSTmrStart((OS_TMR *)&MyTmr1, (OS_ERR *)&err);

  165. //任务删除自己
  166. OSTaskDel(&StartUp_TCB,&err);
  167. }
复制代码


颩色四葉愺 回答时间:2015-1-8 21:01:21


  1. void Task_IntTest(void *p_arg)
  2. {
  3. OS_ERR err;
  4. CPU_TS ts;

  5. u8 flag = 0;
  6. u8 *pdata = NULL;
  7. char *p = NULL;
  8. OS_MSG_SIZE Mes_size;

  9. p_arg = p_arg;


  10. while( 1 )
  11. {
  12. pdata = (u8 *)OSTaskQPend(0, OS_OPT_PEND_BLOCKING, &Mes_size, &ts, &err);
  13. // USART_printf(USART1, "\r\n $%s$ \r\n", pdata);
  14. if(GSM_Response[0] != 0)
  15. {
  16. p = strstr((char *)pdata, (char *)&GSM_Response[0]);
  17. if(p != NULL)
  18. {
  19. GSM_Response[0] = 0; //相当于标志位
  20. OSQPost(&Q_GSMResponse, pdata, 1, OS_OPT_POST_FIFO, &err);
  21. flag = 1;
  22. }
  23. else
  24. {
  25. flag = 0;
  26. }
  27. }

  28. if(flag == 0)
  29. {
  30. if(NULL != strstr((char *)pdata, "+CMTI"))
  31. {
  32. u8 mesaddr[3];

  33. mesaddr[0] = *(strstr((char *)pdata, ",")+1);
  34. mesaddr[1] = *(strstr((char *)pdata, ",")+2);
  35. if( mesaddr[1] >= '0' && mesaddr[1] <= '9')
  36. {
  37. Messagenum = (mesaddr[0] - '0')*10 + (mesaddr[1] - '0');
  38. }
  39. else
  40. {
  41. Messagenum = (mesaddr[0] - '0');
  42. }
  43. Messagebuff[Messagenum-1] = 1;

  44. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);

  45. OSFlagPost(&MessageFlagGrp, FlagNewMessage, (OS_OPT)OS_OPT_POST_FLAG_SET, &err);

  46. }
  47. else if(NULL != strstr((char *)pdata, "+CLIP:")) //来电
  48. {
  49. u8 *p1 = NULL;
  50. u8 *p2 = NULL;
  51. p1 = (u8 *)strstr((char *)pdata, """);
  52. p2 = (u8 *)strstr((char *)(p1+1), """);
  53. p2[0] = '\0';
  54. strcpy(RingNumber, p1+1);
  55. if(!WM_IsWindow(WinPara.hRing))//判断当前激活的窗口
  56. {
  57. WM_SendMessageNoPara(WinPara.hWinMain, MY_MESSAGE_RING);
  58. }
  59. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  60. }
  61. else if(NULL != strstr((char *)pdata, "CLOSE")) //网络断开连接
  62. {
  63. OSFlagPost(&GPRSFlagGrp, FlagGPRSConnect, OS_OPT_POST_FLAG_CLR, &err);
  64. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  65. }
  66. else if(NULL != strstr((char *)pdata, "NO PIALTONE")) //无拨号音
  67. {
  68. WM_DeleteWindow(WinPara.hCalling);
  69. WM_DeleteWindow(WinPara.hRing);
  70. WM_DeleteWindow(WinPara.hPhone);

  71. //GUI_MessageBox("\r\n NO PIALTONE! \r\n","error",GUI_MESSAGEBOX_CF_MOVEABLE);
  72. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  73. }
  74. else if(NULL != strstr((char *)pdata, "BUSY")) //占线
  75. {

  76. WM_DeleteWindow(WinPara.hCalling);
  77. WM_DeleteWindow(WinPara.hRing);
  78. WM_DeleteWindow(WinPara.hPhone);
  79. //GUI_MessageBox("\r\n BUSY! \r\n","error",GUI_MESSAGEBOX_CF_MOVEABLE);
  80. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  81. }
  82. else if(NULL != strstr((char *)pdata, "NO CARRIER")) //无法连接
  83. {

  84. WM_DeleteWindow(WinPara.hCalling);
  85. WM_DeleteWindow(WinPara.hRing);
  86. WM_DeleteWindow(WinPara.hPhone);
  87. //GUI_MessageBox("\r\n NO CARRIER! \r\n","error",GUI_MESSAGEBOX_CF_MOVEABLE);
  88. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  89. }
  90. else if(NULL != strstr((char *)pdata, "NO ANSWER")) //无应答
  91. {

  92. WM_DeleteWindow(WinPara.hCalling);
  93. WM_DeleteWindow(WinPara.hRing);
  94. WM_DeleteWindow(WinPara.hPhone);
  95. //GUI_MessageBox("\r\n NO ANSWER! \r\n","error",GUI_MESSAGEBOX_CF_MOVEABLE);
  96. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  97. }
  98. else if(NULL != strstr((char *)pdata, "NORMAL POWER DOWN")) //无应答
  99. {
  100. Sim908_Reset(); //掉电后复位
  101. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  102. }
  103. else //其他未用响应
  104. {
  105. OSMemPut((OS_MEM *)&MyPartition, (void *)pdata, (OS_ERR *)&err);
  106. }
  107. }
  108. flag = 0;
  109. }
  110. }



  111. /*
  112. 描述:短信处理任务
  113. */
  114. void Task_MessageHandle(void *p_arg)
  115. {
  116. u8 i;
  117. OS_ERR err;
  118. CPU_TS ts;
  119. OS_FLAGS Flags_Rdy;


  120. while( 1 )
  121. {
  122. OSFlagPend(&MessageFlagGrp,
  123. FlagMessageFull + FlagNewMessage,
  124. (OS_TICK)0,
  125. (OS_OPT)(OS_OPT_PEND_FLAG_SET_ANY + OS_OPT_PEND_FLAG_CONSUME),
  126. &ts,
  127. &err);

  128. Flags_Rdy = OSFlagPendGetFlagsRdy( &err );

  129. if(Flags_Rdy & FlagNewMessage) //有新短信
  130. {
  131. for(i=0; i<50; i++)
  132. {
  133. if(Messagebuff == MESSAGE_UNREAD)
  134. {
  135. if(SIM_ERR_NONE == Sim908_ReadMessage(i+1, MESSAGE_ENGLISH))
  136. {

  137. Messagebuff = MESSAGE_CMD;

  138. //I2C_EE_BufferWrite(Messagebuff, MESSAGE_FLASH_ADDR, sizeof(Messagebuff));
  139. }
  140. else
  141. {
  142. u8 databuff[300];
  143. Messagebuff = MESSAGE_NOTCMD;
  144. myres = f_open(&myfsrc, "0:/messages.txt", FA_WRITE | FA_OPEN_EXISTING);
  145. myres = f_lseek(&myfsrc, myfsrc.fsize);

  146. sprintf(databuff, "20%s\r\n", MES_STR.Time);
  147. myres = f_write(&myfsrc, databuff, strlen(databuff), &mybw);
  148. //USART_printf(USART1, "\r\n %s \r\n", databuff);
  149. sprintf(databuff, "%s\r\n", MES_STR.Phonenum);
  150. myres = f_write(&myfsrc, databuff, strlen(databuff), &mybw);
  151. //USART_printf(USART1, "\r\n %s \r\n", databuff);
  152. sprintf(databuff, "%s\r\n", MES_STR.Message);
  153. myres = f_write(&myfsrc, databuff, strlen(databuff), &mybw);
  154. //USART_printf(USART1, "\r\n %s \r\n", databuff);
  155. f_close(&myfsrc);

  156. //I2C_EE_BufferWrite(Messagebuff, MESSAGE_FLASH_ADDR, sizeof(Messagebuff));

  157. }
  158. if(i > 40 )
  159. {
  160. Sim908_SendCmd("AT+CMGDA="DEL INBOX"", "OK", 100, NULL); //删除全部接收的短信
  161. }
  162. }
  163. }
  164. }
  165. }
  166. }


  167. /*
  168. 描述:电话处理函数
  169. */
  170. void Task_PhoneHandle(void *p_arg)
  171. {
  172. // OS_ERR err;
  173. // CPU_TS ts;

  174. while( 1 )
  175. {

  176. }
  177. }



  178. /*
  179. 描述:GPRS处理任务
  180. */
  181. void Task_GPRSHandle(void *p_arg)
  182. {
  183. OS_ERR err;
  184. CPU_TS ts;
  185. OS_FLAGS Flags_Rdy;
  186. u8 gpsdatabuff[100];
  187. p_arg = p_arg;
  188. OSTimeDlyHMSM( 0, 0, 13, 0, OS_OPT_TIME_HMSM_STRICT, &err);
  189. //Sim908_TCPClose();
  190. //Sim908_TCPConnect("175.6.4.74", "40487");
  191. while( 1 )
  192. {

  193. OSFlagPend(&GPRSFlagGrp,
  194. FlagGPRSConnect,
  195. (OS_TICK)0,
  196. (OS_OPT)OS_OPT_PEND_FLAG_SET_ANY,
  197. &ts,
  198. &err);

  199. Flags_Rdy = OSFlagPendGetFlagsRdy( &err );

  200. if(Flags_Rdy & FlagGPRSConnect)
  201. {

  202. if(SIM_ERR_NONE == Sim908_GetGPSInformation(&GPS_STR, gpsdatabuff))
  203. {
  204. Sim908_TCPSendData(gpsdatabuff);

  205. }
  206. else
  207. {
  208. Sim908_TCPSendData("还没成功获取GPS数据,请稍候");
  209. }

  210. //Sim908_TCPSendData("AT+CGPSINF=32 32,063824.000,A,2256.040527,N,11203.090490,E,0.00,0.00,040914,,E,A OK");
  211. }
  212. OSTimeDlyHMSM( 0, 0, 2, 0, OS_OPT_TIME_HMSM_STRICT, &err);
  213. }
  214. }




  215. /*
  216. 描述:定时器1的回掉函数
  217. */
  218. void TmrCallback_RTCUpdate(void *p_arg)
  219. {
  220. // OS_ERR err;
  221. p_arg = p_arg;
  222. if(WM_IsWindow(WinPara.hWinMain))//判断当前激活的窗口
  223. WM_SendMessageNoPara(WinPara.hWinMain, MY_MESSAGE_RTC);//向主窗口发送时间更新消息
  224. if(WM_IsWindow(WinPara.hBkWheel))
  225. WM_SendMessageNoPara(WinPara.hBkWheel,MY_MESSAGE_RTC);//向调节时间窗口发送更新消息

  226. }


  227. /*
  228. 描述:GPS校时任务
  229. */
  230. void Task_TimeUpdate(void *p_arg)
  231. {
  232. OS_ERR err;


  233. while( 1 )
  234. {
  235. if(SIM_ERR_NONE == Sim908_GetGPSInformation(&GPS_STR, NULL))
  236. {
  237. //USART_printf(USART1, "\r\n TimeAdjust \r\n");
  238. RTC_Config();
  239. Sim908_TimeAdjust(&TIME_CALENDAR);
  240. OSTimeDlyHMSM( 12, 0, 0, 0, OS_OPT_TIME_HMSM_STRICT, &err); //延时12个小时
  241. }
  242. else
  243. {
  244. //USART_printf(USART1, "\r\n GPS not ready \r\n");
  245. OSTimeDlyHMSM( 0, 0, 30, 0, OS_OPT_TIME_HMSM_STRICT, &err); //延时30秒
  246. }
  247. }

  248. }


  249. /*
  250. 函数名:Task_SimCheck
  251. 描述: 检查sim卡的相关状态
  252. */
  253. void Task_SimCheck(void *p_arg)
  254. {
  255. u32 i = 0;
  256. u8 *p1 = NULL;
  257. u8 *p2 = NULL;

  258. u8 databuff[20];
  259. OS_ERR err;

  260. Sim908_Reset();
  261. OSTimeDlyHMSM( 0, 0, 10, 0, OS_OPT_TIME_HMSM_STRICT, &err);
  262. Sim908_GPSSet( 1 );
  263. Sim908_SendCmd("AT", "OK", 50, NULL);
  264. OSTimeDlyHMSM( 0, 0, 0, 10, OS_OPT_TIME_HMSM_STRICT, &err);
  265. Sim908_SendCmd("ATE0", "OK", 50, NULL); //关闭回显
  266. OSTimeDlyHMSM( 0, 0, 0, 10, OS_OPT_TIME_HMSM_STRICT, &err);
  267. Sim908_SendCmd("AT+COLP=1", "OK", 50, NULL); //开启被叫号码显示
  268. OSTimeDlyHMSM( 0, 0, 0, 10, OS_OPT_TIME_HMSM_STRICT, &err);
  269. Sim908_SendCmd("AT+CLIP=1", "OK", 50, NULL); //开启来电显示
  270. OSTimeDlyHMSM( 0, 0, 0, 10, OS_OPT_TIME_HMSM_STRICT, &err);

  271. //Sim908_ReadMessage(5, MESSAGE_ENGLISH);

  272. while( 1 )
  273. {
  274. //USART_printf(USART1, "\r\n breath \r\n");


  275. if(i % 1 == 0)
  276. {
  277. if(SIM_ERR_NONE == Sim908_SendCmd("AT+COPS?", "+COPS:", 50, databuff)) //检查信号
  278. {
  279. if(strstr(databuff, "CHINA MOBILE"))
  280. {
  281. Sim_Operator = 1; //标志运营商为中国移动
  282. WM_SendMessageNoPara(WinPara.hWinStatus, MY_MESSAGE_OPERATOR);

  283. if(SIM_ERR_NONE == Sim908_SendCmd("AT+CSQ", "+CSQ", 50, databuff))
  284. {
  285. p1 = strstr((char *)databuff, ":");
  286. p2 = strstr((char *)p1, ",");
  287. p2[0] = '\0';
  288. strcpy(Sim_RSSI, p1+2);
  289. WM_SendMessageNoPara(WinPara.hWinStatus, MY_MESSAGE_RSSI);
  290. }
  291. }
  292. else
  293. {
  294. Sim_Operator = 0;
  295. WM_SendMessageNoPara(WinPara.hWinStatus, MY_MESSAGE_OPERATOR);
  296. }
  297. }
  298. }

  299. if( i % 1 == 0)
  300. {
  301. if(SIM_ERR_NONE == Sim908_GetGPSInformation(&GPS_STR, NULL))
  302. {
  303. Sim908_GPSConvert(GPS_STR.Latitude, GPS_STR.Longtude, LOCATION);
  304. WM_SendMessageNoPara(WinPara.hWinMain, MY_MESSAGE_GPS);
  305. }
  306. else
  307. {
  308. strcpy(LOCATION, "NO GPS INFORMATION");
  309. WM_SendMessageNoPara(WinPara.hWinMain, MY_MESSAGE_GPS);
  310. }
  311. }
  312. if(i % 6 == 0)
  313. {
  314. if(SIM_ERR_NONE == Sim908_SendCmd("AT+CBC", "+CBC", 50, databuff)) //检查电量
  315. {
  316. p1 = strstr((char *)databuff, ",");
  317. p2 = strstr((char *)p1+1, ",");
  318. p2[0] = '\0';
  319. strcpy(Sim_Battery, p1+1);
  320. WM_SendMessageNoPara(WinPara.hWinStatus, MY_MESSAGE_BAT);
  321. }
  322. }

  323. i++;
  324. if(i >= 1000)
  325. {
  326. i = 0;
  327. }
  328. OSTimeDlyHMSM( 0, 0, 10, 0, OS_OPT_TIME_HMSM_STRICT, &err);

  329. }
  330. }



  331. /*
  332. 无线处理任务
  333. */
  334. void Task_Wireless( void *p_arg )
  335. {
  336. OS_ERR err;
  337. u8 *pdata = NULL;
  338. OS_MSG_SIZE Mes_size;
  339. CPU_TS ts;

  340. while( 1 )
  341. {
  342. pdata = (u8 *)OSTaskQPend(0, OS_OPT_PEND_BLOCKING, &Mes_size, &ts, &err);
  343. if(NULL != pdata)
  344. {
  345. //USART_printf(USART1, "\r\n 接收到 %s \r\n", WirelessBuff);



  346. }
  347. }
  348. }


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

adersonl 回答时间:2015-1-8 22:06:44
不要用鸡蛋那么大的芯片 不然小不了下来的。
zhous 回答时间:2015-1-8 22:43:43
智能手表用STM32F103???靠谱吗
晓枫VS枯叶 回答时间:2015-1-9 08:32:30
楼主你的代码缩进格式怎么全都没有,看的相当费劲.........
颩色四葉愺 回答时间:2015-1-9 10:49:59
adersonl 发表于 2015-1-8 22:06
不要用鸡蛋那么大的芯片 不然小不了下来的。

没办法啊   ram不够用   所以要用到外部运存,这就要用到stm32的fomc的地址线    只有Z以上的才有
adersonl 回答时间:2015-1-9 11:28:59
颩色四葉愺 发表于 2015-1-9 10:49
没办法啊   ram不够用   所以要用到外部运存,这就要用到stm32的fomc的地址线    只有Z以上的才有 ...

手表嘛。。8位口模拟下就差不多了吧,不然肯定 是太大或者太厚
MouseCat 回答时间:2015-2-14 10:16:06
基于什么硬件平台的?
deepin666 回答时间:2015-2-14 10:55:22
一头雾水啊

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版