搜索
bottom↓
回复: 70

[分享][交流]发一个控制台模块

  [复制链接]

出0入0汤圆

发表于 2014-12-24 09:41:22 | 显示全部楼层
名师出高徒,有空再分析下源程序。 好学习下。

出0入0汤圆

发表于 2014-12-24 21:43:32 | 显示全部楼层
分析了一下,不得不说,楼主状态机用的真牛,算是学习了。

出0入0汤圆

发表于 2014-12-24 23:29:39 | 显示全部楼层
想问下楼主,这个消息地图中,
  1. // parse 消息地图
  2. typedef struct _msg_t msg_t;
  3. typedef fsm_rt_t MSG_HANDLER(const msg_t *ptMsg, uint8_t *pchStr, uint8_t chNum);   // 消息处理函数类型

  4. struct _msg_t {
  5.     uint8_t *pchMsgStr;     // 消息
  6.     MSG_HANDLER *fnHandler; // 消息处理函数
  7.     uint8_t *pchHelpStr;    // 帮助信息指针
  8. };

  9. const static msg_t c_tMsgMap[] = {      // 消息地图
  10.     { "help",  &help_handler, "help -- print all command" },
  11.     { "clear", &clear_handler, "clear -- clear the screen" },
  12.     CONSOLE_MSG_MAP_SET                 // 静态扩展命令插入宏
  13. };

  14. 那个&help_handler 和这个 &clear_handler   取函数地址为什么要用&,不是取函数名就可以取地址了么?
复制代码

出0入0汤圆

发表于 2014-12-25 11:20:29 | 显示全部楼层
y574924080 发表于 2014-12-25 01:12
我觉得c语法支持加上&和省略&,

但是加上&,让人第一眼就知道这个一个指针,

这个想法好,便于阅读,指明取址。

出0入0汤圆

发表于 2015-8-27 17:14:19 | 显示全部楼层
这份源码有做过详细分析。  感觉在回车之后,获取到命令,后面就不需要过度的使用状态机。  可以做详细的精简, 最后提供的handle接口,形如main那样,
handle(int argc,char *argv[]),在模块内部开一个数组指针,这样在handle里面获参数会更加方便。

出0入0汤圆

发表于 2015-8-27 17:32:53 | 显示全部楼层
Gorgon_Meducer 发表于 2015-8-27 17:24
可能是有点过度,但也可以降低对处理器资源的占用,毕竟控制台是一个实时性要求非常低的任务,应该出让更 ...

可能的确是这方面的考虑,有时考虑到,一旦获取命令,就可以对命令进行整体解析,做尽快的回复。的确会占用一定的时间。 我作了比较多的改动,用于自己的工程。类似main参数,意思差不多,稍有点不同。


问下书月底放出来么?

  1. bool LedControl(const void *ptMSG, uint8_t argc, uint8_t *argv[])
  2. {
  3.           if(argc != 2 ){
  4.             console_print_str(console_led_warning);
  5.                   return true;
  6.           }
  7.   
  8.         if(console_cmp_str(argv[1], "on")){
  9.                 console_print_str("led on is done!");
  10.                 HalLedSet(HAL_LED_ALL,HAL_LED_MODE_ON);
  11.     }else if(console_cmp_str(argv[1], "off")){
  12.                 console_print_str("led off is done!");
  13.                 HalLedSet(HAL_LED_ALL,HAL_LED_MODE_OFF);
  14.         }else if(console_cmp_str(argv[1], "flash")){
  15.             console_print_str("led off is flash!");
  16.                 HalLedSet(HAL_LED_ALL,HAL_LED_MODE_FLASH);
  17.         }else{
  18.             console_print_str(console_led_warning);
  19.         }
  20.        
  21.     return true;
  22. }
复制代码

出0入0汤圆

发表于 2015-8-28 16:06:14 | 显示全部楼层
Gorgon_Meducer 发表于 2015-8-28 13:32
Demo月底放出来。关于如何设计多任务的。另外,你把最后一个参数去掉我觉得没必要,毕竟确切地告诉你有多 ...

已经月底啦。 最后一个参数没有去掉。。我把它改成argc的名字了,以便和main 相似。  只不过是改成总的参数数量,而非后续参数数量。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-3 07:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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