中文 EN

深圳市谆勤智能科技

18929377862

在线留言

X
公司名称
电话
邮箱
经营范围
地址
选择 原厂商 一级代理商
产品介绍

意见反馈

X
公司名称
电话
邮箱
地址
问题摘要
问题描述

行业动态

您当前位置: 首页 > 新闻中心> 行业动态

嵌入式主板开发有哪些小技巧?

深圳市谆勤智能科技 人气:137 发表时间:2020-09-24

  成为正式的嵌入式主板开发工程师。这是一个困难的过程,需要开发人员维护和管理系统的每一个位和字节。开发高可靠性嵌入式系统的技术有很多,从规范完善的开发周期到严格的实施和系统检查。今天谆勤智能给大家介绍7个易操作且可以长久使用的技巧,它们对于确保系统更加可靠地运行并捕获异常行为大有帮助。

 

嵌入式主板

  技巧一、用已知值填充ROM

  软件开发人员总是很乐观的人,只要他们的代码长期忠实运行,仅此而已。微控制器跳出应用程序空间并在意外的代码空间中执行似乎非常罕见。然而,发生这种情况的可能性不亚于缓存溢出或错误指针丢失引用。它确实发生了!这种情况发生后,系统行为会不确定,因为默认的内存空间是0xFF,或者因为内存区域通常是未写的,所以里面的值可能只有上帝知道。

  然而,相当完整的链接器或集成开发环境技能可以用来帮助识别这样的事件并从中恢复系统。诀窍是使用填充命令用已知的位模式填充未使用的只读存储器。有许多不同的可能组合来填充未使用的内存,但是如果您想构建一个更可靠的系统,最明显的选择是在这些位置放置ISR故障处理器。如果系统出现问题,处理器开始在程序空间之外执行代码,它将触发ISR,并在决定纠正措施之前提供存储处理器、寄存器和系统状态的机会。

 

  技巧二、检查应用程序的CRC

  对于嵌入式工程师来说,一个很大的好处就是我们的IDE和工具链可以自动生成应用或者内存空间校验和,从而根据这个校验和来验证应用是否完好。有趣的是,在许多情况下,校验和仅在程序代码加载到设备中时使用。

  但是,如果内存中保留了CRC或校验和,那么在启动时验证应用程序是否仍然完好无损(甚至定期验证长时间运行的系统)是确保不会发生意外情况的绝佳方式。现在,一个编程的应用程序改变的概率很小,但是考虑到每年交付的数十亿个微控制器和可能的恶劣工作环境,应用程序崩溃的概率不是零。更可能的是,系统中的缺陷可能导致扇区中的闪存写入或闪存擦除,从而破坏应用程序的完整性。

 

  技巧三、在启动时执行RAM检查

  为了构建一个更加可靠和坚固的系统,保证系统硬件正常工作是非常重要的。毕竟硬件会出问题。幸运的是,软件永远不会失败,软件只会做代码想让它做的事,不管是对还是错。通过在启动时验证内存内部或外部没有问题,这是确保硬件按预期工作的好方法。

  有许多不同的方法来执行内存检查,但常见的方法是编写一个已知的模式,然后等待一段时间再读取它。结果应该是你读的就是你写的。事实是,在大多数情况下,内存检查通过了,这是我们想要的。然而,检查失败的可能性非常小,这为系统指出硬件问题提供了一个极好的机会。

 

  技巧四、使用堆栈监视器

  对于很多嵌入式开发人员来说,栈似乎是一种神秘的力量。当奇怪的事情开始发生时,工程师们终于被难倒了,他们开始想,也许堆栈里发生了什么。结果就是盲目调整栈的大小和位置等等。但是错误往往是与栈无关的,但是你怎么能这么肯定呢?毕竟,有多少工程师实际执行过最坏情况下的堆栈大小分析?

  堆栈大小是在编译时静态分配的,但堆栈是动态使用的。随着代码的执行,应用程序所需的变量、返回的地址和其他信息会持续存储在堆栈中。这种机制导致堆栈在其分配的内存中增长。但是,这种增长有时会超过编译时确定的容量限制,导致堆栈破坏相邻内存区域中的数据。

  绝对确保堆栈正常工作的一种方法是将堆栈监视器作为系统“健康护理”代码的一部分来实现(有多少工程师会这样做?).堆栈监视器在堆栈和“其他”存储区之间创建一个缓冲区,并用已知的位模式填充它。然后显示器会不断地监控图案是否有变化。如果位模式变了,说明栈长太大,会把系统推向黑暗地狱!此时,监视器可以记录事件的发生、系统状态和任何其他有用的数据,以便将来诊断问题。

  大多数实时操作系统(RTOS)或实现内存保护单元(微处理器)的微控制器系统都提供堆栈监视器。可怕的是,这些功能都是默认关闭的,或者经常是开发人员故意关闭的。网上快速搜索发现,很多人建议关闭实时操作系统中的堆栈监控,以节省56字节的闪存空间,这是得不偿失的!

 

  技巧五、避免易失存储器分配

  不习惯在资源有限的环境中工作的工程师可能会尝试使用他们的编程语言的功能,这允许他们使用易失性内存分配。毕竟,这是计算器系统中经常使用的一种技术,只有在必要时才会分配内存。例如,在用C语言开发时,工程师可能倾向于使用malloc来分配堆上的空间。有一个操作将被执行。一旦完成,free可以用来返回分配给堆使用的内存。

  在资源受限的系统中,这可能是一场灾难!使用易失性内存分配的一个问题是,错误或不适当的技术可能会导致内存泄漏或内存碎片。如果出现这些问题,大多数嵌入式系统没有资源或知识来监控堆或正确处理它。当它们发生时,如果应用程序请求空间,但请求的空间不可用,会发生什么?

  使用易失性内存分配带来的问题非常复杂,妥善处理这些问题可以说是一场噩梦!另一种方法是直接以静态方式简化内存分配。例如,只需在程序中创建一个256字节大小的缓冲区,而不是通过malloc请求一个这样大小的内存缓冲区。这种分配的内存可以在应用程序的整个生命周期中得到维护,而不用担心堆或内存碎片。

 

  技巧六、建立一个强大的看门狗系统

  您经常会发现,最受欢迎的看门狗实现之一是启用看门狗,但它也可以通过定期计时器清除;定时器的激活与程序中发生的任何情况完全隔离。使用看门狗的目的是帮助确保如果出现错误,看门狗不会被清除,即当工作暂停时,系统将被迫执行硬件复位以进行恢复。使用独立于系统活动的定时器可以保持看门狗清零,即使系统出现故障。

  嵌入式开发人员需要仔细考虑和设计如何将应用任务集成到看门狗系统中。例如,可能有一种技术允许在某个时间段内运行的每个任务表明它们可以成功完成任务。在这种情况下,看门狗不会被清零,而是被强制复位。有一些先进的技术,例如使用外部看门狗处理器,可以用来监控主处理器的行为,反之亦然。对于一个可靠的系统来说,构建一个强大的看门狗系统非常重要。

 

  技巧七、使用MPU

  以前在小而便宜的微控制器中很难找到内存保护单元(MPU),但这种情况已经开始改变。现在从高端到低端的微控制器都有了MPU,而这些MPU为嵌入式软件开发人员提供了极大提高固件健壮性的机会。

  MPU已经逐渐与操作系统耦合,从而建立一个处理分离的内存空间,或者任务可以执行其代码而不用担心被踩。如果真的发生了什么,不受控制的治疗将被取消,并实施其他保护措施。请注意有这个组件的微控制器,如果有,请多利用这个功能。

 

  以上嵌入式工控机主板开发教程可以帮助开发者获得更好的嵌入式系统方式。这些技术都是设计人员开发可靠性更高的嵌入式系统的秘诀。