• PT协程的一个小扩展

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

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

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

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

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

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

    一个简单的实现能否使用一个简单的宏在C语言中计算不定参数的数量,例如这样: 123foo(1) -> 1foo(cat, dog) -> 2foo(red, green, blue) -> 3 一个比较简单的实现是这样的: 1#de...
  • 实现独有的硬件通信总线

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

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

    FreeRTOS协程FreeRTOS除了支持多线程外,还支持另外一种多任务机制-协程(coroutine)。它和线程不一样,每个协程不需要独立的运行空间,它依靠编程语法技巧在逻辑上实现了多任务的机制。它避免的一般RTOS带来的栈切换开销,仅仅依靠极小...
/5