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

tianqiang tianqiang     2022-11-21     203

关键词:

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

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

8 个回答

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

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

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

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

你想问题想得太高了,什么串口处理放在哪里处理什么的,根本不着边际。你有问题解决问题,想你的CPU现在应该干什么才是正道。
自己设计了一个
主要是基于FreeRTOS设计
使用事件的方式,有一个任务专门处理其他任务发送过来的事件,类似于消息处理机制。
串口使用循环缓冲区的方案,发送来的数据先放到循环缓冲区中,这样效率可能不是很高。
串口日志输出,使用一个buff,然后使用空闲任务刷新这个buff。
其他---

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

神书,网上可以找到电子版的中文版和英文版。我觉得还是看英文版好点。
去学习嵌入式架构,给你个建议,事件驱动多任务系统架构

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

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

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

显示用显存输出,


























读《嵌入式系统项目分析入门与实践》③

...后,系统设计人员就要开始对所需要的软硬件进行评估,嵌入式系统是软件与硬件的结合体。规划分析的目的在于给开发团队一个机会去检查系统 查看详情

嵌入式开发需要架构设计吗?

...概念的认识相信看这篇文章的同学,大部分都是从事嵌入式开发的,大家也肯定有这么一个印象:在招聘网站上的一些架构设计的岗位,都是针对Web方向的,却很少看到招聘嵌入式岗位的系统架构师的岗位。 ... 查看详情

嵌入式中pattern是啥

嵌入式系统中,Pattern指系统设计过程中,通过多种语言、技术、方法设计实现的可重复利用的模式。嵌入式系统的Pattern主要有架构模式、设计模式、编程模式、编码模式等。架构模式指的是系统层面上的组件模式,可以将系统... 查看详情

多核片上系统(soc)架构的嵌入式dsp软件设计

多核片上系统(SoC)架构的嵌入式DSP软件设计MulticoreaSystem-on-a-Chip(SoC)ArchitectureSoCs的软件开发涉及到基于最强大的计算模型在各种处理单元之间划分应用程序。这可能需要大量的试用anderror来建立正确的分区。在高层次上,SoCparti... 查看详情

[架构之路-20]:目标系统-硬件平台-嵌入式系统硬件电路基础:架构设计流程总线外设基本电路编码

目录前言:第1章嵌入式系统软硬件架构概览1.1什么是嵌入式系统 1.2嵌入式系统发展历程1.3嵌入式系统软件+硬件架构 1.4嵌入式系统的模型1.5嵌入式系统的硬件设备树1.6 嵌入式SOC芯片内部架构第2章硬件电路设计基础2.1嵌... 查看详情

[架构之路-124]-《软考-系统架构设计师》-操作系统-3-操作系统原理-io设备微内核嵌入式系统

第11章操作系统第5节设备管理/文件管理:IO5.1文件管理5.2IO设备管理(内存与IO设备之间)数据传输控制是指如何在内存和IO硬件设备之间传输数据,即:设备何时空闲?设备何时完成数据的传输?SPOOLIN... 查看详情

[架构之路-25]:目标系统-系统软件-bootloaderuboot内存映射与启动流程(代码片段)

...第1章uboot概述1.1概述1.2内存映射(案例)1.3uboot在嵌入式系统启动中的位置第2章 uboot启动流程(源码分析)2.1入口函数:_start2.3执行流程(文字描述)2.4初始化过程第3章uboot如何加载内核3.1 vmlinuz/vmlin... 查看详情

[架构之路-25]:目标系统-系统软件-bootloaderuboot内存映射与启动流程(代码片段)

...第1章uboot概述1.1概述1.2内存映射(案例)1.3uboot在嵌入式系统启动中的位置第2章 uboot启动流程(源码分析)2.1入口函数:_start2.3执行流程(文字描述)2.4初始化过程第3章uboot如何加载内核3.1 vmlinuz/vmlin... 查看详情

嵌入式系统设计技术arm实验(1~4)(代码片段)

实验1&2:裸机下的led和蜂鸣器实验DeepLed.c#defineGPL2CON(*(volatileunsignedlong*)0x11000100)#defineGPL2DAT(*(volatileunsignedlong*)0x11000104)#defineGPD0CON (*(volatileunsignedlong*)0x114000A0)#defineGP 查看详情

soc嵌入式软件架构设计之七:嵌入式系统固件的系统区文件系统设计

 嵌入式固件的系统区(systemdisk,SD)包括操作系统、驱动、中间件、应用和字库、UI资源等文件,本文讲述SD区的文件系统设计。文件系统最主要的目标是为了实现单个文件的定位和读写。因为一般代码都是不可自修改的,... 查看详情

c语言编写串口通信程序在裸机下运行

我想用C语言编写一个串口通信程序,然后再裸机下运行,有没有人有经验或者推荐我看些什么东西呢,谢谢!QQ:554287219单片机你在网上搜一下吧如果想入门最好去图书馆借点书看,比较难理解祝好运了!!我给你提供以下资料... 查看详情

saas架构模式下的多租户系统设计

SaaS系统架构成熟度模型的5个级别——从“混乱”到“乌托邦“第0级(混乱):每次新增一个客户,都会新增软件的一个实例。第1级(受控的混乱):所有客户都运行在软件的同一个版本上,而且... 查看详情

从头开始编写一个实时嵌入式操作系统的内核

...业设计。因为毕设题目是一个比较复杂的多传感器监控的嵌入式系统,然后最近自己有使用一些rtos,比方说freertos和ucos,感觉比起单纯对单片机的裸机开发还是有很多好玩的地方。特别喜欢这种抢占式和时间片轮询这两种内核... 查看详情

[架构之路-125]-《软考-系统架构设计师》-操作系统-4-浅谈vxworks与linux操作系统的区别

相同点(1)都可以用于嵌入式操作系统(2)都提供多任务的执行环境(3)WindRiverSystem公司可以提供者两种操作系统的硬件定制化(BSP)2.不同点2.1内核结构不同vxworks是微内核,只提供基本的服务... 查看详情

[架构之路-5]:架构师-中国计算机技术职业资格(软考)考试是如何定义系统架构师?

...架构设计246第9章设计模式287第10章测试评审方法307第11章嵌入式系统设计319第1 查看详情

嵌入式软件架构设计之分层设计

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!在实际的项目开发中,项目往往是并行开发的,也就是说硬件设计,底层软件设计,应用软件设计是同步进行的。比如说在开发板上调试模块驱动&#x... 查看详情

嵌入式linux-c01嵌入式linuxc语言编程的概念

拿嵌入式Linux硬件平台下的软件开发来说,我们大可将编程分为三种,分别为裸机编程、Linux驱动编程以及Linux应用编程。裸机编程:一般把没有操作系统支持的编程环境称为裸机编程环境,譬如单片机上的编程开发,编写直接在... 查看详情

嵌入式linux-c01嵌入式linuxc语言编程的概念

拿嵌入式Linux硬件平台下的软件开发来说,我们大可将编程分为三种,分别为裸机编程、Linux驱动编程以及Linux应用编程。裸机编程:一般把没有操作系统支持的编程环境称为裸机编程环境,譬如单片机上的编程开发,编写直接在... 查看详情