• 我们需要谨慎操作Cache

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

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

    为什么需要引入SWAP机制在小容量SRAM的单片机上使用RTOS是一种很尴尬的事情,因为每个任务都需要分配独立的线程栈,栈空间少则512字节,复杂任务的栈空间则达到了几千字节的大小,这对于仅有8k字节SRAM的单片机来说显得压力太大了,两三个任务就导...
  • 内存陷阱,一种内存调试方法

    需求场景在一个多任务系统中,当一个全局可访问的数据出现了异常,如何排查问题呢?由于在多任务环境中,各个任务并行运行,一般的单步跟踪调试很难定位问题。逐个屏蔽代码又可能会导致问题无法复现。使用内存断点是比较好的方法,但是大多数集成开发环境对该功能的支持...
  • nRF52x运行蓝牙协议栈+FreeRTOS的原理

    之前有个研发的产品为了满足蓝牙连接的需求,选择了nRF52840这个芯片,它的蓝牙协议栈是一种类似使用动态库的方式进行调用,官方仅仅给出了协议栈的二进制包(SoftDevice),并给出了动态调用的方法,其调用的关键就是使用ARM单片机的SVC调用...
  • Exception Failure - Breaking the STM32F1 Read-Out Protection

    Marc Schink & Johannes Obermaier Tuesday, 17 March 2020 The firmware of microcontrollers usually contains valuable data ...
  • 统计FreeRTOS中各个线程的处理器利用率

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

    ARM处理器下的Fault异常ARM处理器当发生异常事件后就会暂停当前程序的运行,处理器进入异常模式,响应一个来自处理器内核或者外设的中断请求。 这里想要处理的Fault异常就是ARM处理器多个异常中的一类,以Cortex-M7内核的ARM处理器为例...
  • SVC系统调用的编程使用方法

    SVC称为系统服务调用(SuperVisorCall),异常类型为11,通过svc指令可用触发异常,SVC在触发异常后必须立即得到相应(触发异常后在执行异常前不能执行其它代码),除非有更高优先级的异常在执行。 对于可靠系统而言,可以使用SVC异常实现...
  • ARM嵌入式开发中的栈回溯机制

    两种ABI规范根据编译器的实现不同,存在两种ABI机制,分别为APCS(ARM Procedure Call Standard)和AAPCS(ARM Archtecture Procedure Call Standard)。两种机制存在明显的区别,且...
/4