如何在裸机下设计一个嵌入式系统架构?

如何在裸机下设计一个嵌入式系统架构?

如何不使用操作系统的情况下设计一个嵌入式系统的架构呢?比如串口数据如何接受,串口数据协议在什么地方解析,SPI总线的数据如何有效的接收?等等问题。如何设计,才能尽量保证各个模块的效率呢?自己有一些设计,想一起讨论下。比如串口的数据先在中断程序中放入一个大数组中,然后在主程序中解析接收到的数据,等等~~还有哪些技巧呢?

关注者

157

被浏览

7,457

关注问题写回答

?添加评论

?分享

?邀请回答?举报

?

收起

8 个回答

默认排序?

Tony Ho

嵌入式与物联网

22 人赞同了该回答

状态机与时间触发是其中的两个方向(不一定准确,仅供参考):
1. 时间触发
建议你看一下下面这本书:
时间触发嵌入式系统设计模式 (豆瓣)
很久前读的是英文版,1000多页,易读,且有source code,因此结合使用proteus仿真验证。另外这本书有许多构建冗余与健壮性嵌入式系统的诸多讨论。
2. 状态机
可以看一下CS专业的自动机相关图书,例如《自动机理论与应用》。另外可以看看傻的一些文章,如果你有amobbs的账号的话:
[FSM]状态机实践入门——程咬金只要三斧头厉害 (amoBBS 阿莫电子论坛)
[学海拾贝]状态机思路在单片机程序设计中的应用 (amoBBS 阿莫电子论坛)
QP?状态机框架学习之菜鸟范例(一):闪灯(MDK,STM32F10x) (amoBBS 阿莫电子论坛)

前面

@桥里

提到的基于事件触发也是一种。在各类物联网芯片(2.4G)中用得不少。
最后谢邀,希望回答对你有帮助。

编辑于 2016-02-03

22?11 条评论

?分享

?收藏?感谢

?

夏宇航

学通信做嵌入式智能硬件的网管

2 人赞同了该回答

以下全程无干货
利益相关:只做过小程序,了解 51 arduino cortex-m4
根据我的理解,有两种方式,一种方式是类似于时间片,大部分代码都放在中断中,比如串口中断定时器中断,大部分时间单片机处于空闲状态,触发中断后尽快完成响相应工作,优点是功耗低,在逻辑不太复杂时候比较方便,不用控制不同功能之间的影响,缺点是如果有耗时比较长的操作(如模拟spi i2c总线)有可能不稳定,且debug比较麻烦,适用于时间长逻辑少的功能,比如智能家居的灯控制,zigbee的根节点是这么实现的
另外一种方式是大部分代码从主函数中顺序执行,串口等接收后存入数组或者解析后存入数组,之后程序继续执行,到达函数或代码块后再进行处理,优点是程序容易控制流程,debug方便,缺点是功耗比较大,程序效率不太高,适用于逻辑复杂或计算量大的功能,比如自动控制等

编辑于 2015-02-26

2?3 条评论

?分享

?收藏?感谢

?

in nek

[email protected]

1 人赞同了该回答

如果你的系统不复杂,你的所有问题就简单的是一个如何设计状态机的问题,你构造你的状态机模型就可以了。这个有很多书可以看,状态机就三个要素:状态,跃迁条件和Action,剩下的问题只是代码组织,那是个独立主题。

如果你的系统较复杂,你的问题根本就是“如何设计一个嵌入式操作系统”,这个,你按这个题目去查资料就好了。

你想问题想得太高了,什么串口处理放在哪里处理什么的,根本不着边际。你有问题解决问题,想你的CPU现在应该干什么才是正道。

编辑于 2015-12-30

1?添加评论

?分享

?收藏?感谢

?

靳小都

做正确的事的一枚小码农

1 人赞同了该回答

自己设计了一个
主要是基于FreeRTOS设计
使用事件的方式,有一个任务专门处理其他任务发送过来的事件,类似于消息处理机制。
串口使用循环缓冲区的方案,发送来的数据先放到循环缓冲区中,这样效率可能不是很高。
串口日志输出,使用一个buff,然后使用空闲任务刷新这个buff。
其他---

发布于 2016-08-17

1?添加评论

?分享

?收藏?感谢

?

STM32

ST脑残粉

3 人赞同了该回答

Practical UML Statecharts in C/C++, Second Edition: Event-Driven Programming for Embedded Systems

神书,网上可以找到电子版的中文版和英文版。我觉得还是看英文版好点。

发布于 2015-12-28

3?2 条评论

?分享

?收藏?感谢

?

桥里

我读书少只上了五年小学,你别骗我

1 人赞同了该回答

去学习嵌入式架构,给你个建议,事件驱动多任务系统架构

发布于 2015-09-13

1?2 条评论

?分享

?收藏?感谢

?

chau rong

破茧成蝶

确定执行的框架:
一个while循环里面检查串口是否有输入,在判断每个字符的时候,执行 switch_job(),
switch_job()里面做如下工作:
1. 定时处理,检查定时器是否到期,到期则定时处理。
2. 消息处理,检查消息队列是否有数据,(消息队列里的数据会在中断里面写入)有则处理。

================================================================
以上就实现了一个裸系统的shell,周期处理,基于消息的处理。这个架构下面不能延时处理要重新规划。因为实际上除了中断就是单线程的。

发布于 2016-10-30

0?添加评论

?分享

?收藏?感谢

?

深夜吃不胖

跟风公众号:转行碎碎念。MyLostStory。

其实重要的是架构。
一个典型的项目包括按键输入,显示输出,通讯。恰好我就是这种。
模块的组织以数据为核心,以状态来判断。按键输入改变数据,显示输出提取数据。同一个按键同一个显示在不同情况下功能不同,我通过状态来分别。
存在问题是全局变量满天飞,状态很多,但是我目前找不到更好的方法。

显示用显存输出,

发布于 2015-12-27

原文地址:https://www.cnblogs.com/tianqiang/p/9175650.html

时间: 2024-08-13 21:22:53

如何在裸机下设计一个嵌入式系统架构?的相关文章

petshop4.0 具体解释之中的一个(系统架构设计)

前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的商业色彩,对于我们开发者而言,没有必要过多关注.然而PetShop随着版本号的不断更新,至如今基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又非常多能够借鉴之处.PetShop是一个小型的项目,系统架构与代码都比較简单,却也凸现了很多颇有价值的设计与开发理念.本系列试

如何设计一个RPC系统

版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qcloud.com/community RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型.使用习惯的约束,有大量的妥协和取舍之处.本文就是通过分析几种流行的RPC实现案例,提供

2017-5-26/描述一个高性能高可靠的网站架构——如何设计一个秒杀系统

一.秒杀的应用场景 电商网站的抢购活动.12306网站的抢票.抢红包. 二.秒杀的特点 1.秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增. 2.数据库的并发读写冲突以及资源的锁请求冲突非常严重. 3.秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功. 三.秒杀架构的原则 1.将请求拦截在系统上游,降低下游压力:秒杀系统特点是并发量极大,请求都压倒了后端数据层,但实际秒杀成功的请求数量却很少.所以如果不在前端拦截很可能造成数据库读写锁冲突严重,并发高响应慢,甚至导

如何设计一个秒杀系统----学习总结

第一章学习总结--概览https://time.geekbang.org/column/article/40153 1.秒杀主要解决问题--并发读和并发写.并发读的核心优化理念是尽量减少用户到服务端来读取数据,或者让他们读更少的数据.并发写的处理原则是在数据库层面独立出一个库,做特殊的处理.另外针对秒杀系统做一些保护,针对意料之外的情况设计兜底方案,以防止最坏的情况发生. 2.从一个架构师的角度来看,要想打造并维护一个超大流量并发读写.高性能.高可用的系统,在整个用户请求路径上从浏览器到服务端我

如何设计一个 RPC 系统

本文由云+社区发表 RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型.使用习惯的约束,有大量的妥协和取舍之处.本文就是通过分析几种流行的RPC实现案例,提供大家在设计RPC系统时的参考. 由于RPC底层的网络开发一般和具体使用环境有关,而编程实现手段也非常多样化,但不影响使用者,因此本文基本涉及如何实现一个RPC系统. 认识 RPC (远程调用) 我们在各种操作系统

面试题:如何设计一个权限系统?

前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题. 目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Contr

转:RBAC如何设计一个权限系统

前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Contro

我想做产品,我希望设计一个电脑系统的一个自动化管理程序

我希望能做一个电脑系统的程序,它能够,让我自定义的,选择是电脑上某些时候,自动的开启,自动关机,然后帮我充的,以保证秩序的顺序,打开我的某些程序,并进入到某些步骤,或者说保留我的某些不知道工作. 原因,因为,我们,作为一个如何现在现在画的现代化的一个工作,大概很多人都会与电脑经常打交道,甚至有非常多的人每天,的工作就是借助电脑来完成,所以说大家一定让他教他的时间非常多,然后在这个时候我们会开启不同的关机,不让他去打开电脑,浪费了很多时间和精力,去,降低我们的效率,如果说有一个程序能够帮我们实现,

架构师如何才能够设计一个安全的架构

架构师不可能做到全知全能,但是仍然担负着成功交付可用的解决方案的任务.满足安全需求常常是其中不可或缺的一环,而且这一点常常没有明确指出.下面我们从整体上讨论架构的安全性,比如如何撰写安全的代码.部署中的安全.架构层的物理隔离.加密.证书的使用等等方面.推荐学习相关系统架构教程. 用户或者SQL的攻击注入时,怎么样做到安全? 很多英国的公司从安全的角度讲,做得很烂,因为团队不知道安全到底意味着什么.可能在网上随便问一些人到底该怎样做. 作为架构师要分析需求的话,并不是说做大型的前端设计,而是做一些