-
ARM嵌入式开发中的栈回溯机制
两种ABI规范根据编译器的实现不同,存在两种ABI机制,分别为APCS(ARM Procedure Call Standard)和AAPCS(ARM Archtecture Procedure Call Standard)。两种机制存在明显的区别,且... -
Macro returning the number of arguments it is given in C?
一个简单的实现能否使用一个简单的宏在C语言中计算不定参数的数量,例如这样: 123foo(1) -> 1foo(cat, dog) -> 2foo(red, green, blue) -> 3 一个比较简单的实现是这样的: 1#de... -
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 ... -
在RTOS中如何优雅的处理Fault异常
ARM处理器下的Fault异常ARM处理器当发生异常事件后就会暂停当前程序的运行,处理器进入异常模式,响应一个来自处理器内核或者外设的中断请求。 这里想要处理的Fault异常就是ARM处理器多个异常中的一类,以Cortex-M7内核的ARM处理器为例... -
SVC系统调用的编程使用方法
SVC称为系统服务调用(SuperVisorCall),异常类型为11,通过svc指令可用触发异常,SVC在触发异常后必须立即得到相应(触发异常后在执行异常前不能执行其它代码),除非有更高优先级的异常在执行。 对于可靠系统而言,可以使用SVC异常实现... -
常见的字符串Hash算法
常见hash算法的碰撞概率统计 10万 50万 100万 500万 1000万 一亿 1000万次的平均执行时间 一亿次的平均执行时间 一亿次的平均长度 BKDRHash 0.00002 0.000112 0.000251 0.00118...