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

智能手表雏形之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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版