• FreeRTOS内核窥探

    在多任务环境下调试代码需要一定的代码调试经验,尤其是涉及到异步的任务流程时,单步执行可能无法跟踪到需要的执行流程。如果代码全速运行时虽然可以通过日志来梳理执行流程,但是涉及到FreeRTOS内核中的内容时,一般的日志显得比较鸡肋了。比如说我想检查某...
  • 简单尝试一下ITCM

    ITCM简介在STM32高性能单片机中存在一种供内核专用的内存TCM-SRAM,称为紧耦合内存。为了区分不同的用途,又存在称为DTCM和ITCM的两种不同内存,这两种内存本质上是一致的,但是其背后默认的MPU策略不同,所以一般将DTCM用于存储关键的...
  • 我们需要谨慎操作Cache

    成都有疫情有半个月了,在家办公的日子总是很枯燥的,很多的工作无法正常开展。今天有时间,我尝试对Ymodem的传输效率进行优化并完善其中的一些细节实现,本来一个简单的优化工作却牵出一个严重的问题,并最终折腾了一天才解决。这是一个并不典型的内存溢出问题...
  • 一个困扰我很久的问题

    大约在一年半前,我写了一篇文章介绍如何统计FreeRTOS系统中任务的实时CPU占用率的方法,其中最关键的是使用DWT计数器。我一直认为这个计数器在任意条件下都是能够正确运行的,直到我把它运用到Cortex-M7内核中。 正常情况下Cortex-M7...
  • 统计FreeRTOS中各个线程的处理器利用率

    大约是在一年前,我在工作中遇到了需要分析嵌入式系统性能的需求,需要查看系统在关键时间点上,部分任务是否存在执行时间过长导致系统实时性能降低的情况。我在基于FreeRTOS的系统中设计了一段非侵入式的代码,能够获取到各个线程实时的处理器利用率,进而分...
  • 更优雅的使用Protothreads协程框架

    PT协程框架PT(Protothreads)是一个轻量级的多任务框架,区别于一般基于栈的RTOS,它实现多任务的基本原理是通过语句间的任意跳转来实现任务切换,所以实现多任务的开销比较小。 我们看一段示例代码来了解其用法。 12345678910111...
  • PT协程的一个小扩展

    在之前的文章中介绍了使用链表来更加优雅的使用PT协程。我最近发现了当初实现的一个错误,现在已经修复了。 这里不是为了讨论之前的实现,而是介绍一个更有意思的东西。我在之前的实现基础上,实现了一个更加优雅的函数来利用协程,这应该是一种异步编程的技巧,或者...
  • 实现独有的硬件通信总线

    背景前段时间开发了一个嵌入式软件,其中有一个功能是使用PWM驱动一个无源的蜂鸣器,根据以往的经验来看,这是一个非常简单的功能,不过在实际操作时遇到了一个很多人往往都忽略的问题。我们硬件选择的单片机没有硬件PWM功能,只有普通的定时器,这就意味着我们只...
  • 初学射频信号

    从事嵌入式软件开发4年有余,我自认为还是有相当多的知识和技能存在欠缺,所以近年来一直保持良好的学习态度,持续充实自身的技能。从之前的文章内容能够看出,我主要围绕嵌入式软件开发的多个方面记录自己的学习心得。但实际上不仅限于此,在过去的一年中有很多机会...
  • 单片机总线选择焦虑

    当你有多个选择,但是每个选择都不完美时,就会出现选择焦虑! 最近在优化单片机上USB协议栈内的代码,我发现了一个我之前没有被注意到的地方,那就是写入到USB端点上的数据是由DMA自动完成的,涉及到DMA的内存区域都需要特别对待,而我之前就是将它...
/5