嵌入式软件
嵌入式软件,单线程并发,MISRA-C
半斗米
嵌入式系统设计师 & 电子工程师
展开
-
risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
凡是 Load、Store 类型的指令,汇编指令和 Reference Card 的格式是不一样的,存储地址的那个寄存器要加上圆括号,而且要放在指令的最后。原创 2022-03-02 20:51:54 · 2773 阅读 · 3 评论 -
riscv-rust-quickstart 依赖关系
riscv-rust-quickstart 依赖关系。原创 2022-03-01 17:04:59 · 229 阅读 · 0 评论 -
消除 impure_data 数据
impure_data 数据来源于 libc 使用链接选项 `-nostartfiles` 消除。原创 2022-02-26 17:41:30 · 559 阅读 · 0 评论 -
Protothreads:临时变量的可用与不可用
能不能用临时变量的基本原则是:再次进入协程时,应当能恢复上次退出协程时的状态。原创 2022-02-26 17:36:59 · 242 阅读 · 0 评论 -
Protothreads:switch 语句的可用与不可用
只要 `switch` 语句块里面不出现 `PT_*` 系列宏,那么是可以使用的。原创 2022-02-26 17:35:07 · 247 阅读 · 0 评论 -
Protothreads:常见的错误
Protothreads:常见的错误原创 2022-02-26 17:22:20 · 239 阅读 · 0 评论 -
RISC-V 编程之 Frame Pointer和 backtrace
RISC-V Frame pointer原创 2022-02-25 20:22:49 · 2696 阅读 · 1 评论 -
C语言标准ISO9899的各个版本
C90、C99、C11、C18原创 2021-07-01 17:06:09 · 2327 阅读 · 0 评论 -
为什么C语言会有整型提升(Integral Promotion)?
短整型的运算不能直接被翻译成机器指令,只能首先提升成 int(32位)或 long(64位)类型才能被翻译成机器指令。原创 2021-06-10 15:45:57 · 526 阅读 · 0 评论 -
RVBoards D1 CPU 使用率指示器
https://gitee.com/zoomdy/rvboards_d1_cpu_usage_indicator 跑在 RVBoards D1 单板机上的 CPU 使用率指示器。原创 2021-05-30 16:29:29 · 209 阅读 · 1 评论 -
不用中断实现嘀嗒计数器
用定时器的counter寄存器直接作为嘀嗒计数器。原创 2021-04-27 20:36:48 · 361 阅读 · 0 评论 -
嵌入式硬件抽象层HAL的设计实现
硬件抽象层对下必须检验查看目前硬件配置的能力与限制,以及将来可能的扩展性,对上得倾听系统软件得需求。简单得说,HAL就是我们系统的“硬件”,而“硬件”的功能就是它所提供的API,即所有上层的程序完全不需要知道硬件与驱动程序的细节,只能通过HAL来操控硬件。转载 2021-03-30 16:12:13 · 676 阅读 · 0 评论 -
keil、MDK、armcc 内存屏障语句
__schedule_barrier(); 等同于gcc 的 __asm__ __volatile__("": : :"memory")原创 2021-03-11 12:39:58 · 1602 阅读 · 0 评论 -
使用 STM32CubeMX 自动生成虚拟串口 CDC 程序不能正常工作的解决办法
堆空间不够,扩大堆空间。原创 2021-02-10 19:14:53 · 1352 阅读 · 0 评论 -
利用 watchpoint 监测堆栈溢出
在堆栈底部设置 watchpoint,当堆栈越界访问到此处时,调试器 halt 处理器,或者产生 DebugMonitor 异常。原创 2021-02-10 18:56:27 · 420 阅读 · 0 评论 -
对并发的思考
并发分成伪并发和真并发伪并发系统只有一个处理器,但执行多个任务,在某个瞬间,处理器只能执行一个任务,为了“同时”执行多个任务,将多个任务快速的来回切换,只要速度足够快,就会感觉这几个任务是同时执行的。从宏观上讲,伪并发是并发的,从微观上讲,伪并发是串行的。真并发有多个处理器,在某个瞬间是有多个任务同时在执行的。复杂系统往往是真并发和伪并发共存,系统中包含多个处理器,其中的每个处理器同时又...原创 2020-03-13 09:42:18 · 279 阅读 · 0 评论 -
协程的本质
协程是简化状态机设计的一种工具。协程编程表面上看起来与多线程编程很相似。协程与多线程有着本质的区别:协程不会抢占,任务之间是协作式的,多线程的任务之间往往是抢占式的。协程没有上下文切换,协程只有函数的进入和退出,没有多线程的上下文切换。协程没有调度器,任务间的协调完全由应用来决定。协程也是实现多任务的一种形式。...原创 2020-03-13 09:26:27 · 615 阅读 · 0 评论 -
嵌入式软件 I/O 模型的选择
不同的 I/O 模型有不一样的特性,根据应用的特点选择合适的 I/O 模型。原创 2019-05-22 13:09:39 · 360 阅读 · 0 评论 -
嵌入式软件编程中的异步、同步非阻塞、同步阻塞的对比
异步的运行效率最高,同步阻塞最简单,同步非阻塞是高效和简单的折中。原创 2019-05-10 13:34:39 · 553 阅读 · 0 评论 -
半同步/半异步的并发模式
异步的并发模式更高效,而同步的并发模式更简单。高效和简单看起来是矛盾的特性,可以通过半同步/半异步的设计共存。lwIP 是应用了半同步/半异步并发模型的典型案例。原创 2019-05-08 10:49:49 · 718 阅读 · 0 评论 -
关于 Coroutine(协程)、Continuation(接续)的参考资料
Coroutine 分为两类:stackless coroutine 和 stackful coroutine。有些语言原生支持,例如 Javascript;其它语言通过库支持,例如 C。在 C 语言中,使用 switch 语句实现 stackless coroutine。原创 2019-04-30 11:38:10 · 591 阅读 · 0 评论 -
Coroutines in C
Coroutines in C by Simon Tatham.转载 2019-04-24 11:16:49 · 423 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能
学习何时以及如何使用 POSIX AIO API。Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。转载 2019-03-01 11:58:13 · 408 阅读 · 0 评论 -
推荐一本有关嵌入式系统事件驱动编程的图书
《UML状态图的实用C、C++设计:嵌入式系统的事件驱动型编程技术(第二版)》《Practical UML Statecharts in C,C++:Event-Driven Programing for Embedded Systems, Second Edition》原创 2019-02-27 16:44:27 · 2119 阅读 · 5 评论 -
嵌入式软件异步编程:单线程编程模型(前后台系统编程模型)
嵌入式软件按照其所使用的操作系统可以分为三类:Rich OS、RTOS、Bare-metal。应用最广泛的应该是Bare-metal了,Bare-metal即裸机,也就是不采用任何操作系统的嵌入式系统,其程序内仅有主循环和中断服务例程,通常也称作前后台系统。如果套用线程的概念,那么前后台系统可以认为是单线程的。在单线程模式下,无外乎轮询驱动、事件驱动以及轮询和事件组合的混合驱动这三种编程模型。这三...原创 2018-03-23 15:16:57 · 1610 阅读 · 0 评论 -
嵌入式软件异步编程:请求的多阶段异步处理
本文节选自《深入理解Nginx模块开发与架构解析(第2版)》第8章 Nginx基础架构 >> 8.2Nginx的架构设计 >> 8.2.3 请求的多阶段异步处理,和这段文字一样格式的内容是我追加的注解。这里所讲的多阶段异步处理请求与事件驱动架构是密切相关的,换句话说,请求的多阶段异步处理只能基于事件驱动架构实现。什么意思呢?就是把一个请求的处理过程按照事件的触发...转载 2018-03-23 10:32:37 · 670 阅读 · 0 评论 -
嵌入式软件异步编程:异步带来的性能提升
以两个串口同时发送数据为例比较异步和同步的发送性能。http://blog.csdn.net/zoomdy/article/details/72677789 mingdu.zheng at gmail dot com同步编程TXD1发送时不能处理其它任务TXD2要在TXD1发送完成后才能开始发送总发送时间为TXD1和TXD2的发送时间总和,约为150ms异步编...原创 2017-05-24 16:44:23 · 762 阅读 · 0 评论 -
嵌入式软件异步编程:同步还是异步?
异步并不总是提高效率的,那什么时候用同步,什么时候用异步呢?http://blog.csdn.net/zoomdy/article/details/68952787 mingdu.zheng at gmail dot com异步要解决的是CPU和I/O速度差异的问题,所以异步适合I/O远慢于CPU的情况,如果I/O仅稍慢于CPU或速度相当,那么异步并不会提高效能。采用异步模式会有进出...原创 2017-04-02 17:18:00 · 1728 阅读 · 0 评论 -
嵌入式软件异步编程:同步转为异步
在现有同步实现的基础上进行异步实现,需要将同步代码转换成异步代码。http://blog.csdn.net/zoomdy/article/details/64125084 mingdu.zheng at gmail dot com基本方法:分开请求和结果I/O的基本操作可以细分为两个部分:发起请求检查结果 同步编程模型中,这两部分是在一个函数中的,在没有操作系统的情...原创 2017-05-24 17:26:17 · 1102 阅读 · 0 评论 -
嵌入式软件异步编程:基于回调的lwIP raw API
lwIP提供了两套API,分别是顺序模型的API和基于回调的raw API,raw API可以做到又快又省,即运行速度快,资源消耗少,非常适合嵌入式系统。原文:http://blog.csdn.net/ruizeng88/article/details/6577615 原文标题:《lwIP raw API》简介lwIP提供了两套API:底层的基于回调(callback)的r...转载 2017-03-13 14:29:16 · 1204 阅读 · 0 评论 -
嵌入式软件异步编程:应用案例
异步编程有很多成功的应用,例如lwIP、Nginx、Node.js、Linux AIO、JavaScript等。可以将这些成功案例的设计经验引入到嵌入式软件。http://blog.csdn.net/zoomdy/article/details/61916610 mingdu.zheng at gmail dot comlwIP The raw TCP/IP interfac...原创 2017-03-13 15:23:49 · 710 阅读 · 0 评论 -
嵌入式软件异步编程:思维导图
I/O分同步I/O和异步I/O,异步I/O又分轮询式异步和回调式异步。http://blog.csdn.net/zoomdy/article/details/60470131 mingdu.zheng at gmail dot com原创 2017-03-05 19:08:34 · 1645 阅读 · 0 评论 -
嵌入式软件异步编程:冥想
异步编程可以编写出速度快、资源省的高效程序,可以在单线程环境下实现高并发,可以在没有操作系统的情况下实现TCP/IP等协议栈。又快又省可以将功耗控制在最低水平,因此异步编程是低功耗设计的最佳编程模型。http://blog.csdn.net/zoomdy/article/details/60145017 mingdu.zheng at gmail dot com三重境界参禅有三重...原创 2017-03-03 21:06:30 · 1532 阅读 · 2 评论 -
嵌入式软件异步编程:异步编程模型和传统编程模型
原文:http://www.juma.io/doc/zh/basics/embedded_iot/ 原文标题《技术话题: IoT嵌入式编程》背景知识在IT技术高速发展到今天,在为我们的生活带来了翻天覆地的变化的同时。如何更有效的利用计算机资源为我们更好的服务的思考,一直是各大厂商与技术大牛们为之孜孜不倦奋斗的方向。虽然硬件性能在被不断的提升,然而需求的增长速度还是远远的超过了硬件性能...转载 2017-02-10 15:13:44 · 768 阅读 · 0 评论 -
Protothreads:一个“蝇量级” C 语言协程库
协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。转载 2019-08-14 14:22:05 · 4278 阅读 · 0 评论 -
Protothreads 子线程返回执行结果的办法
Protothreads 支持层次化线程,可以在线程中调用并等待子线程,就像函数调用子函数一样。但是有个缺憾,函数返回值被 PT 占用作为线程状态,无法通过函数返回值返回子线程的执行结果,只能使用其它办法返回执行结果。原创 2019-05-30 09:26:34 · 503 阅读 · 1 评论 -
Protothreads:背后的真相!
Protothreads 工作原理解析。转载 2019-05-15 14:15:48 · 1110 阅读 · 3 评论 -
Protothreads 和 FreeRTOS Coroutine 的对比
Protothreads 和 FreeRTOS Coroutine 都实现了协程(Coroutine),但在实现的具体细节上是有很大的区别的,这里做个对比,以便做选择。原创 2019-05-08 11:53:11 · 1311 阅读 · 0 评论 -
Contiki 和 lwIP 的作者是同一个人!
Adam Dunkels 不仅是 Contiki 的作者,同时也是 lwIP、uIP、Protothread 的作者。原创 2019-04-18 15:01:57 · 1565 阅读 · 0 评论 -
C语言实现模版
C语言有两把双刃剑,一把是“指针”,另一把是“宏”。这回咱就用“宏”来实现C++中才有的模版。这里的模版实现一个很简单的加法函数,同一个函数代码可以处理不同类型的加法运算。http://blog.csdn.net/zoomdy/article/details/79242528 mingdu.zheng at gmail dot comC++的实现template <cl...原创 2018-02-02 19:56:18 · 20767 阅读 · 5 评论