热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

355_通过CAN通信实现printf

其实,上大学的时候觉得嵌入式或许不是很难。虽然是一个软硬结合的东西,但是大部分的内容都是可以在电脑上看到的。当然,这是那个时候的一个初级的认识。那时候接触的开卡板种类很有限,而大多

       其实,上大学的时候觉得嵌入式或许不是很难。虽然是一个软硬结合的东西,但是大部分的内容都是可以在电脑上看到的。当然,这是那个时候的一个初级的认识。那时候接触的开卡板种类很有限,而大多数的平台都有现成的开发环境,基本还都支持串口打印的功能。加上那时候正好看到了一个故事,说ken老爷子的软件调试只需要一个printf即可。自己想了下,确实也是,不清楚的东西就printf一下呗!

       工作之后从事嵌入式让我有点傻眼了,因为printf没了!我们设计的控制器上甚至连串口都没有,如何printf呢?然而,那时候开始接触高端的调试器以及标定协议。瞬间感觉一个printf在这些东西的面前都不值一提!然而,随着时间的推进,我自己基于兴趣以及职业需要的驱动接触了更多的嵌入式平台,尤其是汽车电子的嵌入式平台。这些平台在实际的产品中一般来说就是没有串口的,而且相应的调试器价格确实是有点昂贵。这时候,我又有点怀念曾经的printf了。

       有一个词语叫做“开卷有益”,的确是。翻一本旧的老书的时候,再次看到了printf的介绍,其实这个功能本身的设计是不依赖于任何通信方式的,如果我们是STDOUT,那么就是PC上标准的命令行显示;如果是串口,那就是串口打印;如果是其他的方式,自然也可以。这样一看,说起来很容易啊,最起码汽车电子基本都少不了CAN,这个一定可以。当然,我可以实现简易的GPIO的打印也能够实现速度更快的SPI打印。不过,嵌入式的软件实现容易,我还是缺少一个东西的,那就是一个上位机,用来把我打印的东西翻译出来。这样,其实有一个CAN卡的驱动,相应的功能实现就容易多了。其实,这个功能之前我已经自己尝试做过了。但是,我感觉这有点重复造轮子的感觉,因为这方面很多成熟的工具都是基于串口的。既然如此,那么何不实现一个基础的CAN转串口?

       我找到了一个简单的方案,使用Arduino + MCP2515,之前自己做的小测试还在这里: https://blog.csdn.net/grey_csdn/article/details/101712390

       这样,一个简单的设计就有了:还是用上面的这一套,我通过我自己开发中的控制器或者板子给2515发送基于CAN的printf信息,传到Arduino之后做一个串口打印即可。整个硬件实用过程也非常简单,因为Arduino只需要一根USB线即可。关于printf的实现,之前也有一个实际测试的学习记录在此:https://blog.csdn.net/grey_csdn/article/details/105311915

       那么如何实现一个简单的上位机显示呢?这里先放一部分我自己测试的Arduino代码参考:


//——————————————————————————————————————————————————————————————————————————————
CANMessage frame;
char putc_char;void loop()
{
#if DEBUG_MODEframe.id = 0x77;frame.len = 8;frame.ext = false;frame.rtr = false;frame.idx = 0x0;if (can.tryToSend(frame)){Serial.println(counter++);}delay(100);
#endifif (can.available()){can.receive(frame);if (0x77 == frame.id){memcpy(&putc_char, frame.data, 1);Serial.print(putc_char);}}
}

       其实,核心代码就是一个接收判断并打印。本来也就没有太多的功能,而且,上面其实还带了一部分我自己的测试代码,预处理部分甚至在实用中都可以去掉。

       接下来,看看基础的效果吧!

       功能实现还是很容易的,而这个基本上也可以满足一个小型工程开发的大部分调试需要了。那么,这个设计是否足够好了呢?没有!两个因素:1,CAN的数据场只用了1/8,因此效率不高; 2,CAN的发送我采用的是1ms发送一帧,虽然足够快了但是依然没有实现最高的性能。以上两点,还是有改进之处的,后面针对第一点,我还会再做一个简单的修正。其实蛮容易,但是懒!主要是这样对我来说也够用了!(捂脸表情)


推荐阅读
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • T15483.【清华集训2017模拟11.26】简单路径T25484.【清华集训2017模拟11.26】快乐树T35485.【清华集训2017模拟11.26】字符串T1结论题,结论很 ... [详细]
  • 题目要求维护一个数列,并支持两种操作:一是查询操作,语法为QL,用于查询数列末尾L个数中的最大值;二是更新操作,用于修改数列中的某个元素。本文通过ST表(Sparse Table)优化查询效率,确保在O(1)时间内完成查询,同时保持较低的预处理时间复杂度。 ... [详细]
  • 题目链接:http://codeforces.com/gym/101190/attachments题意:在一个共享三轮车站点,某些用户需要租用车辆。该问题涉及如何通过离线查询和排序优化策略来高效地管理和分配车辆资源。具体来说,需要设计一种算法,在满足所有用户需求的同时,最小化总等待时间和资源浪费。通过合理的数据结构和算法优化,可以显著提高系统的整体性能和用户体验。 ... [详细]
  • Codeforces 1065D 解题心得与代码实现分析 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • Lua IO操作详解
    本文介绍了Lua中的IO操作,包括简单模式和完整模式下的文件处理方法,以及相关的系统调用。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
author-avatar
林琳奇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有