立即注册 登录
返回首页

uid:204207的个人空间

日志

2017-05-24

已有 794 次阅读2017-5-24 11:03 | 源代码, 单片机, 接口, 开发, 主机

http://blog.csdn.net/jdh99,

环境:

主机:WIN10

开发环境:MDK5.12

MCU:STM32F407


说明:
为单片机设计了一套简单的日志系统,通过日志系统提供的接口可以查看设备状态,并进行一些基本的调试。
日志系统通过串口输出,所以单片机需要准备一个串口供日志系统使用。注意串口发送不能用DMA发送(避免在在中断中打印日志造成的中断竞争),接收可以用DMA接收。

功能:
  • 打开/关闭各个模块的调试输出
  • 输入动作指令,让设备进行一些动作
  • 打印系统运行日志
指令:
  • H:帮助
  • O:调试输出全开
  • O1:打开1号模块,打开其他模块指令类似
  • F:调试输出全关
  • F1:关闭1号模块
  • I:输出系统日志
  • C:清除系统日志
  • A1:执行1号动作,执行其他动作指令类似

源代码:

log.h:

  1. /** 
  2. * Copyright (c), 2015-2025 
  3. * @file log.h 
  4. * @brief 日志模块主文件 
  5. * @author jdh 
  6. * @date 2015/5/7 
  7. * @update 2015/6/19 
  8. * @update 2015/6/23 
  9. * @update 2015/6/30 
  10. * @update 2015/7/8 
  11. * @update 2015/7/13 
  12. * @update 2015/8/12 
  13. * @update 2015/8/18 
  14. * @update 2016/5/17 
  15. * @update 2016/6/30 
  16. * @update 2016/7/22 
  17. * @update 2016/8/11 
  18. * @update 2016/8/24 
  19. * @update 2016/9/2 
  20. * @update 2016/9/5 
  21. * @update 2016/9/7 
  22. * @update 2016/9/9 
  23. */  
  24.   
  25. #ifndef _LOG_H_  
  26. #define _LOG_H_  
  27.   
  28. /********************************************************************* 
  29. *                           头文件 
  30. **********************************************************************/  
  31.   
  32. #include "world.h"  
  33. #include "console.h"  
  34.   
  35. /********************************************************************* 
  36. *                           宏定义 
  37. **********************************************************************/  
  38.   
  39. /** 
  40. * @brief 日志模块数量 
  41. */  
  42. #define NUM_LOG                 5  
  43.   
  44. /** 
  45. * @brief 模块编号 
  46. */  
  47.   
  48. #define LOG_TEST                0  
  49. #define LOG_CLOCK               1  
  50. #define LOG_DW1000              2  
  51. #define LOG_DW1000_STATUS       3  
  52. #define LOG_DEAL_BUS            4  
  53.   
  54. /********************************************************************* 
  55. *                           数据结构 
  56. **********************************************************************/  
  57.   
  58. /** 
  59. * @brief 日志 
  60. */  
  61.   
  62. struct _Log  
  63. {  
  64.     //公有日志  
  65.     //收到移动点数据次数  
  66.     uint32_t num_rf_rx;  
  67.     //发送超时被删除点数  
  68.     uint32_t num_time_out_delete;  
  69.     //RF发送次数  
  70.     uint32_t num_rf_tx;  
  71.     //RF校时或分配事件次数  
  72.     uint32_t num_rf_time;  
  73.     //RF随机信道发送次数  
  74.     uint32_t num_rf_random_tx;  
  75.     //复位次数  
  76.     uint32_t num_reset;  
  77.     //运行时间,分度为0.5s  
  78.     uint32_t time_run;  
  79.     //收到同步脉冲计数  
  80.     uint32_t num_sync_pulse;  
  81.     //收到422轮询/事件帧次数  
  82.     uint32_t num_bus_poll;  
  83.     //收到422事务命令次数  
  84.     uint32_t num_bus_down_cmd;  
  85.     //收到422事务命令中事件个数  
  86.     uint32_t num_bus_down_cmd_dot;  
  87.     //收到有效的422帧次数  
  88.     uint32_t num_valid_bus;  
  89.     //收到无效的422帧次数  
  90.     uint32_t num_invalid_bus;  
  91.     //接收时间错误  
  92.     uint32_t num_time_error;  
  93.       
  94.     //私有日志  
  95.     //dw1000芯片错误次数  
  96.     uint32_t num_dw1000_error[NUM_DW1000];  
  97.     //接收时间错误  
  98.     uint32_t num_dw1000_time_error[NUM_DW1000];  
  99.     //轮询超时被删除点数  
  100.     uint32_t num_poll_time_out_delete;  
  101.     //接收超时复位  
  102.     uint32_t num_dw1000_time_out_reset[NUM_DW1000];  
  103.     //dw1000芯片状态错误次数  
  104.     uint32_t num_dw1000_status_error[NUM_DW1000];  
  105. };  
  106.   
  107. /********************************************************************* 
  108. *                           函数 
  109. **********************************************************************/  
  110.   
  111. /** 
  112. * @brief 模块加载 
  113. */  
  114.   
  115. void log_load(void);  
  116.   
  117. /** 
  118. * @brief 读取日志 
  119. * @retval 日志 
  120. */  
  121.   
  122. struct _Log log_read(void);  
  123.   
  124. /** 
  125. * @brief 清除日志 
  126. */  
  127.   
  128. void log_clear(void);  
  129.   
  130. /** 
  131. * @brief 收到移动点数据次数 
  132. */  
  133.   
  134. void log_write_num_rf_rx(void);  
  135.   
  136. /** 
  137. * @brief 发送超时被删除点数 
  138. */  
  139.   
  140. void log_write_num_time_out_delete(void);  
  141.   
  142. /** 
  143. * @brief RF发送次数 
  144. */  
  145.   
  146. void log_write_num_rf_tx(void);  
  147.   
  148. /** 
  149. * @brief RF校时或分配事件次数 
  150. */  
  151.   
  152. void log_write_num_rf_time(void);  
  153.   
  154. /** 
  155. * @brief RF随机信道发送次数 
  156. */  
  157.   
  158. void log_write_num_rf_random_tx(void);  
  159.   
  160. /** 
  161. * @brief 复位次数 
  162. */  
  163.   
  164. void log_write_num_reset(void);  
  165.   
  166. /** 
  167. * @brief 运行时间 
  168. * @param add_time:增加的时间.单位:0.5s 
  169. */  
  170.   
  171. void log_write_time_run(uint32_t add_time);  
  172.   
  173. /** 
  174. * @brief 收到同步脉冲计数 
  175. */  
  176.   
  177. void log_write_num_sync_pulse(void);  
  178.   
  179. /** 
  180. * @brief 收到422轮询/事件帧次数 
  181. */  
  182.   
  183. void log_write_num_bus_poll(void);  
  184.   
  185. /** 
  186. * @brief 收到422事务命令次数 
  187. */  
  188.   
  189. void log_write_num_bus_down_cmd(void);  
  190.   
  191. /** 
  192. * @brief 收到422事务命令中事件个数 
  193. */  
  194.   
  195. void log_write_num_bus_down_cmd_dot(void);  
  196.   
  197. /** 
  198. * @brief 收到有效的422帧次数 
  199. */  
  200.   
  201. void log_write_num_valid_bus(void);  
  202.   
  203. /** 
  204. * @brief 收到无效的422帧次数 
  205. */  
  206.   
  207. void log_write_num_invalid_bus(void);  
  208.   
  209. /** 
  210. * @brief 收到时间错误 
  211. */  
  212.   
  213. void log_write_num_time_error(void);  
  214.   
  215. /** 
  216. * @brief dw1000芯片错误次数 
  217. * @param index:模块序号,从0开始 
  218. */  
  219.   
  220. void log_write_num_dw1000_error(uint8_t index);  
  221.   
  222. /** 
  223. * @brief dw1000芯片接收时间错误次数 
  224. * @param index:模块序号,从0开始 
  225. */  
  226.   
  227. void log_write_num_dw1000_time_error(uint8_t index);  
  228.   
  229. /** 
  230. * @brief 轮询超时被删除点数 
  231. */  
  232.   
  233. void log_write_num_poll_time_out_delete(void);  
  234.   
  235. /** 
  236. * @brief dw1000芯片接收超时复位次数 
  237. * @param index:模块序号,从0开始 
  238. */  
  239.   
  240. void log_write_num_dw1000_time_out_reset(uint8_t index);  
  241.   
  242. /** 
  243. * @brief dw1000芯片状态错误次数 
  244. * @param index:模块序号,从0开始 
  245. */  
  246.   
  247. void log_write_num_dw1000_status_error(uint8_t index);  
  248.   
  249. /** 
  250. * @brief 控制台打印 
  251. * @param index:模块编号 
  252. * @param info:打印的信息 
  253. */  
  254.   
  255. void log_print(uint8_t index,char *info);  
  256.   
  257. /** 
  258. * @brief 控制台强制打印 
  259. * @param info:打印的信息 
  260. */  
  261.   
  262. void log_print_force(char *info);  
  263.   
  264. /** 
  265. * @brief 接收处理 
  266. * @param rx:接收数据 
  267. */  
  268.   
  269. void log_deal_rx(struct _Console_Rx rx);  
  270.   
  271. #endif  

log.c:

  1. /** 
  2. * Copyright (c), 2015-2025 
  3. * @file log.c 
  4. * @brief 日志模块主文件 
  5. * @author jdh 
  6. * @email jdh821@163.com 
  7. * @date 2015/5/7 
  8. * @update 2015/6/19 
  9. * @update 2015/6/30 
  10. * @update 2015/7/8 
  11. * @update 2015/7/13 
  12. * @update 2015/7/15 
  13. * @update 2015/8/12 
  14. * @update 2015/8/13 
  15. * @update 2015/11/11 
  16. * @update 2016/5/17 
  17. * @update 2016/6/30 
  18. * @update 2016/7/22 
  19. * @update 2016/8/11 
  20. * @update 2016/8/18 
  21. * @update 2016/8/22 
  22. * @update 2016/8/24 
  23. * @update 2016/9/2 
  24. * @update 2016/9/5 
  25. * @update 2016/9/7 
  26. * @update 2016/9/9 
  27. * @update 2016/9/12 
  28. */  
  29.   
  30. /********************************************************************* 
  31. *                           头文件 
  32. **********************************************************************/  
  33.   
  34. #include "log.h"  
  35. #include "protocol_bus.h"  
  36. #include "protocol_uwb.h"  
  37. #include "para_manage.h"  
  38.   
  39. /********************************************************************* 
  40. *                           静态变量 
  41. **********************************************************************/  
  42.   
  43. /** 
  44. * @brief 运行日志 
  45. */  
  46.   
  47. static struct _Log Log __attribute__((section("NO_INIT"),zero_init));  
  48.   
  49. /** 
  50. * @brief 日志过滤标志数组,0:未过滤,1:过滤 
  51. */  
  52.   
  53. static uint8_t Filter[NUM_LOG] = {1, 1, 1, 1, 1};  
  54.   
  55. /** 
  56. * @brief 暂停输出标志,0:未暂停输出,1:暂停输出 
  57. */  
  58.   
  59. static uint8_t Flag_Pause = 0;  
  60.   
  61. /********************************************************************* 
  62. *                           静态函数 
  63. **********************************************************************/  
  64.   
  65. /** 
  66. * @brief 帮助界面 
  67. */  
  68.   
  69. static void help(void);  
  70.   
  71. /** 
  72. * @brief 输出本地日志 
  73. */  
  74.   
  75. static void print_log(void);  
  76.   
  77. /** 
  78. * @brief 处理动作 
  79. * @param index:动作编号 
  80. */  
  81.   
  82. static void deal_action(uint8_t index);  
  83.   
  84. /********************************************************************* 
  85. *                           函数 
  86. **********************************************************************/  
  87.   
  88. /** 
  89. * @brief 模块加载 
  90. */  
  91.   
  92. void log_load(void)  
  93. {  
  94.     //检查是否上电  
  95.     if (RCC_GetFlagStatus(RCC_FLAG_PORRST) == SET)  
  96.     {  
  97.         //清除标志位  
  98.         RCC_ClearFlag();  
  99.         //清除日志  
  100.         memset(&Log, 0, sizeof(Log));  
  101.     }  
  102.     else  
  103.     {  
  104.         //日志:复位次数  
  105.         Log.num_reset++;  
  106.     }  
  107. }  
  108.   
  109. /** 
  110. * @brief 清除日志 
  111. */  
  112.   
  113. void log_clear(void)  
  114. {  
  115.     memset(&Log, 0, sizeof(Log));  
  116. }  
  117.   
  118. /** 
  119. * @brief 读取日志 
  120. * @retval 日志 
  121. */  
  122.   
  123. struct _Log log_read(void)  
  124. {     
  125.     return Log;  
  126. }  
  127.   
  128. /** 
  129. * @brief 收到移动点数据次数 
  130. */  
  131.   
  132. void log_write_num_rf_rx(void)  
  133. {  
  134.     Log.num_rf_rx++;  
  135. }  
  136.   
  137. /** 
  138. * @brief 发送超时被删除点数 
  139. */  
  140.   
  141. void log_write_num_time_out_delete(void)  
  142. {  
  143.     Log.num_time_out_delete++;  
  144. }  
  145.   
  146. /** 
  147. * @brief RF发送次数 
  148. */  
  149.   
  150. void log_write_num_rf_tx(void)  
  151. {  
  152.     Log.num_rf_tx++;  
  153. }  
  154.   
  155. /** 
  156. * @brief RF校时或分配事件次数 
  157. */  
  158.   
  159. void log_write_num_rf_time(void)  
  160. {  
  161.     Log.num_rf_time++;  
  162. }  
  163.   
  164. /** 
  165. * @brief RF随机信道发送次数 
  166. */  
  167.   
  168. void log_write_num_rf_random_tx(void)  
  169. {  
  170.     Log.num_rf_random_tx++;  
  171. }  
  172.   
  173. /** 
  174. * @brief 复位次数 
  175. */  
  176.   
  177. void log_write_num_reset(void)  
  178. {  
  179.     Log.num_reset++;  
  180. }  
  181.   
  182. /** 
  183. * @brief 运行时间 
  184. * @param add_time:增加的时间.单位:0.5s 
  185. */  
  186.   
  187. void log_write_time_run(uint32_t add_time)  
  188. {  
  189.     Log.time_run += add_time;  
  190. }  
  191.   
  192. /** 
  193. * @brief 收到同步脉冲计数 
  194. */  
  195.   
  196. void log_write_num_sync_pulse(void)  
  197. {  
  198.     Log.num_sync_pulse++;  
  199. }  
  200.   
  201. /** 
  202. * @brief 收到422轮询/事件帧次数 
  203. */  
  204.   
  205. void log_write_num_bus_poll(void)  
  206. {  
  207.     Log.num_bus_poll++;  
  208. }  
  209.   
  210. /** 
  211. * @brief 收到422事务命令次数 
  212. */  
  213.   
  214. void log_write_num_bus_down_cmd(void)  
  215. {  
  216.     Log.num_bus_down_cmd++;  
  217. }  
  218.   
  219. /** 
  220. * @brief 收到422事务命令中事件个数 
  221. */  
  222.   
  223. void log_write_num_bus_down_cmd_dot(void)  
  224. {  
  225.     Log.num_bus_down_cmd_dot++;  
  226. }  
  227.   
  228. /** 
  229. * @brief 收到有效的422帧次数 
  230. */  
  231.   
  232. void log_write_num_valid_bus(void)  
  233. {  
  234.     Log.num_valid_bus++;  
  235. }  
  236.   
  237. /** 
  238. * @brief 收到无效的422帧次数 
  239. */  
  240.   
  241. void log_write_num_invalid_bus(void)  
  242. {  
  243.     Log.num_invalid_bus++;  
  244. }  
  245.   
  246. /** 
  247. * @brief 收到时间错误 
  248. */  
  249.   
  250. void log_write_num_time_error(void)  
  251. {  
  252.     Log.num_time_error++;  
  253. }  
  254.   
  255. /** 
  256. * @brief dw1000芯片错误次数 
  257. * @param index:模块序号,从0开始 
  258. */  
  259.   
  260. void log_write_num_dw1000_error(uint8_t index)  
  261. {  
  262.     Log.num_dw1000_error[index]++;  
  263. }  
  264.   
  265. /** 
  266. * @brief dw1000芯片接收时间错误次数 
  267. * @param index:模块序号,从0开始 
  268. */  
  269.   
  270. void log_write_num_dw1000_time_error(uint8_t index)  
  271. {  
  272.     Log.num_dw1000_time_error[index]++;  
  273. }  
  274.   
  275. /** 
  276. * @brief 轮询超时被删除点数 
  277. */  
  278.   
  279. void log_write_num_poll_time_out_delete(void)  
  280. {  
  281.     Log.num_poll_time_out_delete++;  
  282. }  
  283.   
  284. /** 
  285. * @brief dw1000芯片接收超时复位次数 
  286. * @param index:模块序号,从0开始 
  287. */  
  288.   
  289. void log_write_num_dw1000_time_out_reset(uint8_t index)  
  290. {  
  291.     Log.num_dw1000_time_out_reset[index]++;  
  292. }  
  293.   
  294. /** 
  295. * @brief dw1000芯片状态错误次数 
  296. * @param index:模块序号,从0开始 
  297. */  
  298.   
  299. void log_write_num_dw1000_status_error(uint8_t index)  
  300. {  
  301.     Log.num_dw1000_status_error[index]++;  
  302. }  
  303.   
  304. /** 
  305. * @brief 控制台打印 
  306. * @param index:模块编号 
  307. * @param info:打印的信息 
  308. */  
  309.   
  310. void log_print(uint8_t index,char *info)  
  311. {  
  312.     T_Time time;  
  313.     char log_out[256] = {0};  
  314.       
  315.     //判断是否是暂停输出  
  316.     if (Flag_Pause)  
  317.     {  
  318.         return;  
  319.     }  
  320.       
  321.     //判断是否被过滤输出  
  322.     if (Filter[index])  
  323.     {  
  324.         return;  
  325.     }  
  326.       
  327.     time = get_time();  
  328.     sprintf(log_out,"%05d:%03d:%03d %s\r\n",time.s,time.ms,time.us,info);  
  329.     console_tx((uint8_t *)log_out,strlen(log_out));  
  330. }  
  331.   
  332. /** 
  333. * @brief 控制台强制打印 
  334. * @param info:打印的信息 
  335. */  
  336.   
  337. void log_print_force(char *info)  
  338. {  
  339.     T_Time time;  
  340.     char log_out[256] = {0};  
  341.       
  342.     time = get_time();  
  343.     sprintf(log_out,"%05d:%03d:%03d %s\r\n",time.s,time.ms,time.us,info);  
  344.     console_tx((uint8_t *)log_out,strlen(log_out));  
  345. }  
  346.   
  347. /** 
  348. * @brief 接收处理 
  349. * @param rx:接收数据 
  350. */  
  351.   
  352. void log_deal_rx(struct _Console_Rx rx)  
  353. {  
  354.     uint8_t i = 0;  
  355.     int num = 0;  
  356.     char str_temp[5] = {0};  
  357.       
  358.     //判断是否是输出本地日志  
  359.     if (rx.len == 1 && rx.buf[0] == 'I')  
  360.     {  
  361.         print_log();  
  362.         return;  
  363.     }  
  364.       
  365.     //判断是否是输出本地日志  
  366.     if (rx.len == 1 && rx.buf[0] == 'C')  
  367.     {  
  368.         log_clear();  
  369.         return;  
  370.     }  
  371.       
  372.     //判断是否是暂停输出  
  373.     if (rx.len == 1 && rx.buf[0] == 'P')  
  374.     {  
  375.         Flag_Pause = 1;  
  376.         return;  
  377.     }  
  378.       
  379.     //判断是否是打开输出  
  380.     if (rx.len == 1 && rx.buf[0] == 'S')  
  381.     {  
  382.         Flag_Pause = 0;  
  383.         return;  
  384.     }  
  385.       
  386.     //判断是否是帮助  
  387.     if (rx.len == 1 && rx.buf[0] == 'H')  
  388.     {  
  389.         help();  
  390.         return;  
  391.     }  
  392.       
  393.     //判断是否是过滤规则  
  394.     if (rx.len <= 3 && rx.buf[0] == 'F')  
  395.     {     
  396.         if (rx.len == 1)  
  397.         {  
  398.             //全部过滤  
  399.             for (i = 0;i < NUM_LOG;i++)  
  400.             {  
  401.                 Filter[i] = 1;  
  402.             }  
  403.             return;  
  404.         }  
  405.           
  406.         memset(str_temp,sizeof(str_temp),0);  
  407.         memcpy(str_temp,rx.buf,rx.len);  
  408.         sscanf(str_temp,"F%d",&num);  
  409.         Filter[num] = 1;  
  410.         return;  
  411.     }  
  412.       
  413.     //判断是否是打开模块  
  414.     if (rx.len <= 3 && rx.buf[0] == 'O')  
  415.     {     
  416.         if (rx.len == 1)  
  417.         {  
  418.             //清除过滤规则  
  419.             for (i = 0;i < NUM_LOG;i++)  
  420.             {  
  421.                 Filter[i] = 0;  
  422.             }  
  423.             return;  
  424.         }  
  425.           
  426.         memset(str_temp,sizeof(str_temp),0);  
  427.         memcpy(str_temp,rx.buf,rx.len);  
  428.         sscanf(str_temp,"O%d",&num);  
  429.         Filter[num] = 0;  
  430.         return;  
  431.     }  
  432.       
  433.     //判断是否是打开模块  
  434.     if (rx.len > 1 && rx.len <= 3 && rx.buf[0] == 'A')  
  435.     {     
  436.         memset(str_temp,sizeof(str_temp),0);  
  437.         memcpy(str_temp,rx.buf,rx.len);  
  438.         sscanf(str_temp,"A%d",&num);  
  439.         deal_action(num);  
  440.         return;  
  441.     }  
  442. }  
  443.   
  444. /** 
  445. * @brief 帮助界面 
  446. */  
  447.   
  448. static void help(void)  
  449. {  
  450.     char log_out[100] = {0};  
  451.       
  452.     strcpy(log_out,"*******************************************\r\n");  
  453.     console_tx((uint8_t *)log_out,strlen(log_out));  
  454.     strcpy(log_out,"             UWB基站日志帮助界面            \r\n");  
  455.     console_tx((uint8_t *)log_out,strlen(log_out));  
  456.     sprintf(log_out,"硬件版本:%d 软件版本:%d\r\n",VERSION_HARD,VERSION_SOFT);  
  457.     console_tx((uint8_t *)log_out,strlen(log_out));  
  458.     sprintf(log_out,"总线通信协议版本:%s\r\n",VERSION_NAME_BUS);  
  459.     console_tx((uint8_t *)log_out,strlen(log_out));  
  460.     sprintf(log_out,"空口通信协议版本:%s\r\n",VERSION_NAME_UWB);  
  461.     console_tx((uint8_t *)log_out,strlen(log_out));  
  462.     sprintf(log_out,"CSSN:0x%06x ID:0x%04x\r\n",para_manage_read_cssn(), para_manage_read_id());  
  463.     console_tx((uint8_t *)log_out,strlen(log_out));  
  464.     strcpy(log_out,"快捷键I(INFO)输出本地日志\r\n");  
  465.     console_tx((uint8_t *)log_out,strlen(log_out));  
  466.     strcpy(log_out,"快捷键C(CLEAR)清除本地日志\r\n");  
  467.     console_tx((uint8_t *)log_out,strlen(log_out));  
  468.     strcpy(log_out,"快捷键P(PAUSE)暂停输出\r\n");  
  469.     console_tx((uint8_t *)log_out,strlen(log_out));  
  470.     strcpy(log_out,"快捷键S(START)开始输出\r\n");  
  471.     console_tx((uint8_t *)log_out,strlen(log_out));  
  472.     strcpy(log_out,"快捷键A(ACTION)动作\r\n");  
  473.     console_tx((uint8_t *)log_out,strlen(log_out));  
  474.     strcpy(log_out,"A1:读取1号dw1000状态寄存器\r\n");  
  475.     console_tx((uint8_t *)log_out,strlen(log_out));  
  476.     strcpy(log_out,"A2:清除1号dw1000状态寄存器\r\n");  
  477.     console_tx((uint8_t *)log_out,strlen(log_out));  
  478.     strcpy(log_out,"A3:打开1号dw1000接收\r\n");  
  479.     console_tx((uint8_t *)log_out,strlen(log_out));  
  480.     strcpy(log_out,"快捷键H(HELP)打开帮助\r\n");  
  481.     console_tx((uint8_t *)log_out,strlen(log_out));  
  482.     strcpy(log_out,"快捷键F(FILTER)过滤输出\r\n");  
  483.     console_tx((uint8_t *)log_out,strlen(log_out));  
  484.     strcpy(log_out,"例:过滤1号模块:F1\r\n");  
  485.     console_tx((uint8_t *)log_out,strlen(log_out));  
  486.     strcpy(log_out,"例:全部过滤:F\r\n");  
  487.     console_tx((uint8_t *)log_out,strlen(log_out));  
  488.     strcpy(log_out,"快捷键O(OPEN)打开模块\r\n");  
  489.     console_tx((uint8_t *)log_out,strlen(log_out));  
  490.     strcpy(log_out,"例:打开1号模块:O1\r\n");  
  491.     console_tx((uint8_t *)log_out,strlen(log_out));  
  492.     strcpy(log_out,"例:全部打开:O\r\n");  
  493.     console_tx((uint8_t *)log_out,strlen(log_out));  
  494.     strcpy(log_out,"包含的模块:\r\n");  
  495.     console_tx((uint8_t *)log_out,strlen(log_out));  
  496.     sprintf(log_out,"TEST:%d 过滤:%d \r\n",LOG_TEST,Filter[LOG_TEST]);  
  497.     console_tx((uint8_t *)log_out,strlen(log_out));  
  498.     sprintf(log_out,"CLOCK:%d 过滤:%d \r\n",LOG_CLOCK,Filter[LOG_CLOCK]);  
  499.     console_tx((uint8_t *)log_out,strlen(log_out));  
  500.     sprintf(log_out,"DW1000:%d 过滤:%d \r\n",LOG_DW1000,Filter[LOG_DW1000]);  
  501.     console_tx((uint8_t *)log_out,strlen(log_out));  
  502.     sprintf(log_out,"DW1000_STATUS:%d 过滤:%d \r\n",LOG_DW1000_STATUS,Filter[LOG_DW1000_STATUS]);  
  503.     console_tx((uint8_t *)log_out,strlen(log_out));  
  504.     sprintf(log_out,"DW1000_DEAL_BUS:%d 过滤:%d \r\n",LOG_DEAL_BUS,Filter[LOG_DEAL_BUS]);  
  505.     console_tx((uint8_t *)log_out,strlen(log_out));  
  506.     strcpy(log_out,"*******************************************\r\n");  
  507.     console_tx((uint8_t *)log_out,strlen(log_out));  
  508. }  
  509.   
  510. /** 
  511. * @brief 输出本地日志 
  512. */  
  513.   
  514. static void print_log(void)  
  515. {  
  516.     char log_out[100] = {0};  
  517.     uint8_t i = 0;  
  518.       
  519.     strcpy(log_out,"本地日志输出:\r\n");  
  520.     console_tx((uint8_t *)log_out,strlen(log_out));  
  521.     sprintf(log_out,"收到移动点数据次数:%d\r\n", Log.num_rf_rx);  
  522.     console_tx((uint8_t *)log_out,strlen(log_out));  
  523.     sprintf(log_out,"发送超时被删除点数:%d\r\n", Log.num_time_out_delete);  
  524.     console_tx((uint8_t *)log_out,strlen(log_out));  
  525.     sprintf(log_out,"RF发送次数:%d\r\n", Log.num_rf_tx);  
  526.     console_tx((uint8_t *)log_out,strlen(log_out));  
  527.     sprintf(log_out,"RF校时或分配事件次数:%d\r\n", Log.num_rf_time);  
  528.     console_tx((uint8_t *)log_out,strlen(log_out));  
  529.     sprintf(log_out,"RF随机信道发送次数:%d\r\n", Log.num_rf_random_tx);  
  530.     console_tx((uint8_t *)log_out,strlen(log_out));  
  531.     sprintf(log_out,"复位次数:%d\r\n", Log.num_reset);  
  532.     console_tx((uint8_t *)log_out,strlen(log_out));  
  533.     sprintf(log_out,"运行时间:%d\r\n", Log.time_run);  
  534.     console_tx((uint8_t *)log_out,strlen(log_out));  
  535.     sprintf(log_out,"收到同步脉冲计数:%d\r\n", Log.num_sync_pulse);  
  536.     console_tx((uint8_t *)log_out,strlen(log_out));  
  537.     sprintf(log_out,"收到422轮询/事件帧次数:%d\r\n", Log.num_bus_poll);  
  538.     console_tx((uint8_t *)log_out,strlen(log_out));  
  539.     sprintf(log_out,"收到422事务命令次数:%d\r\n", Log.num_bus_down_cmd);  
  540.     console_tx((uint8_t *)log_out,strlen(log_out));  
  541.     sprintf(log_out,"收到422事务命令中事件个数:%d\r\n", Log.num_bus_down_cmd_dot);  
  542.     console_tx((uint8_t *)log_out,strlen(log_out));  
  543.     sprintf(log_out,"收到有效的422帧次数:%d\r\n", Log.num_valid_bus);  
  544.     console_tx((uint8_t *)log_out,strlen(log_out));  
  545.     sprintf(log_out,"收到无效的422帧次数:%d\r\n", Log.num_invalid_bus);  
  546.     console_tx((uint8_t *)log_out,strlen(log_out));  
  547.     sprintf(log_out,"校时时间错误次数:%d\r\n", Log.num_time_error);  
  548.     console_tx((uint8_t *)log_out,strlen(log_out));  
  549.     for (i = 0; i < NUM_DW1000; i++)  
  550.     {  
  551.         sprintf(log_out,"%d号dw1000模块错误次数:%d\r\n", i, Log.num_dw1000_error[i]);  
  552.         console_tx((uint8_t *)log_out,strlen(log_out));  
  553.     }  
  554.     for (i = 0; i < NUM_DW1000; i++)  
  555.     {  
  556.         sprintf(log_out,"%d号dw1000模块时间错误次数:%d\r\n", i, Log.num_dw1000_time_error[i]);  
  557.         console_tx((uint8_t *)log_out,strlen(log_out));  
  558.     }  
  559.     sprintf(log_out,"轮询超时被删除点数:%d\r\n", Log.num_poll_time_out_delete);  
  560.     console_tx((uint8_t *)log_out,strlen(log_out));  
  561.     for (i = 0; i < NUM_DW1000; i++)  
  562.     {  
  563.         sprintf(log_out,"%d号dw1000模块接收时间超时复位次数:%d\r\n", i, Log.num_dw1000_time_out_reset[i]);  
  564.         console_tx((uint8_t *)log_out,strlen(log_out));  
  565.     }  
  566.     for (i = 0; i < NUM_DW1000; i++)  
  567.     {  
  568.         sprintf(log_out,"%d号dw1000模块状态错误次数:%d\r\n", i, Log.num_dw1000_status_error[i]);  
  569.         console_tx((uint8_t *)log_out,strlen(log_out));  
  570.     }  
  571. }  
  572.   
  573. /** 
  574. * @brief 处理动作 
  575. * @param index:动作编号 
  576. */  
  577.   
  578. static void deal_action(uint8_t index)  
  579. {  
  580.     uint32_t status = 0;  
  581.     char log_out[100] = {0};  
  582.       
  583.     switch (index)  
  584.     {  
  585.         //读取1号dw1000状态寄存器  
  586.         case 1:  
  587.         {  
  588.             status = dwt_read32bitreg(0, SYS_STATUS_ID);  
  589.             sprintf(log_out,"1号dw1000状态:0x%08x\r\n", status);  
  590.             console_tx((uint8_t *)log_out,strlen(log_out));  
  591.             break;  
  592.         }  
  593.         //清除1号dw1000状态寄存器  
  594.         case 2:  
  595.         {  
  596.             status = dwt_read32bitreg(0, SYS_STATUS_ID);  
  597.             dwt_write32bitreg(0, SYS_STATUS_ID, status);  
  598.             break;  
  599.         }  
  600.         //打开1号dw1000接收  
  601.         case 3:  
  602.         {  
  603.             dwt_rxenable(0, 0);  
  604.             break;  
  605.         }  
  606.     }  
  607. }  

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 999999.0 2017-5-24 11:25
通过

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部