单片机

太空探索正迎来复苏期,一系列令人兴奋的新任务相继展开,如备受期待的Artemis II(阿尔忒弥斯二号计划)、JAXA SLIM 和 Chandaaryan-3成功登月以及New Space在近地轨道 (LEO)进行新部署。设计人员需要符合严格的辐射和可靠性标准的电子元件,以满足在恶劣太空环境中工作的要求。Microchip Technology(微芯科技公司)宣布推出新款耐辐射32位单片机SAMD21RT。该产品基于耐辐射(RT)Arm® Cortex®-M0+技术,采用64引脚陶瓷和塑料封装,具备128 KB闪存和16 KB SRAM。

1.jpg

SAMD21RT专为对尺寸和重量要求极高的空间受限应用而设计,基底面积仅为10 mm × 10 mm。SAMD21RT运行频率高达48 MHz,可为恶劣环境提供高性能处理能力。该器件集成了模拟功能,包括多达20路通道的模数转换器 (ADC)、数模转换器 (DAC) 和模拟比较器。 

SAMD21RT器件基于Microchip广泛应用于工业和汽车市场的现有SAMD21 MCU 系列。该器件还采用商用现货(COTS)技术,在过渡到耐辐射器件时,由于设计保持引脚兼容,可大大简化设计过程。Microchip 为空间应用提供了全面的系统解决方案,可围绕 SAMD21RT 单片机设计多种器件,包括 FPGA、电源和分立器件、存储器产品、通信接口以及各种规格的振荡器。 

为了承受包括辐射和极端温度在内的恶劣环境,SAMD21RT可在−40°C至125°C的温度范围内工作,并具有高水平的辐射耐受性,总电离剂量(TID)能力高达50 krad,单次事件闩锁 (SEL)抗扰度高达 78 MeV.cm²/mg。 

Microchip负责航空航天与防御业务部的副总裁Bob Vampola表示:“与我们合作的优势在于,我们拥有相应的历史、知识和能力,可在公司内部完成耐辐射器件的设计和测试。我们将继续引入以太网、人工智能和机器学习等在商业和工业市场发展起来的新技术,并利用辐射性能对其进行改进,以满足太空任务的需求。我们还将继续提供更高的计算性能,并将更新的技术集成到更小的封装中,减轻重量和尺寸。” 

SAMD21RT 功耗低,具有空闲和待机休眠模式以及sleepwalking外设等功能。其他外设包括一个12通道直接存储器访问控制器 (DMAC)、一个 12 通道事件系统、各种控制定时器/计数器 (TCC)、一个32位实时计数器 (RTC)、一个看门狗定时器 (WDT) 和一个 USB 2.0 接口。通信选项包括串行通信 (SERCOM)、I2C、SPI 和 LIN。 

Microchip拥有数以万计的在轨部件,一直是太空探索历史的重要组成部分,对今天和未来的太空任务至关重要。作为Artemis计划的一部分,Microchip 的产品正在飞往月球的途中,并为太空发射系统、猎户座飞船、月球门户空间站、月球着陆器和下一代宇航服的成功研制贡献力量。

来源:Microchip微芯

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 16

大小端及字节序在嵌入式软件开发过程中经常会遇到,数据传输、存储、通信等这些地方都会牵涉到,下面就来给大家分享一下相关知识。

回顾字节序

字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。

---来自百度百科

拿数据 0x01020304为例:

在大端CPU中:数据将存储为0x01(address + 0),0x02(address + 1),0x03(address + 2),0x04(address + 3)。

在小端CPU中:数据将存储为0x04(address + 0),0x03(address + 1),0x02(address + 2),0x01(address + 3)。

1.jpg

如果你的程序使用简单的数据结构(例如“ int”和“ short”),则没有什么麻烦。但是,如果数据结构类似于以下示例,则可能会遇到问题。

union 
{ 
    unsigned int dat; 
    unsigned char c[4]; 
}X;

void foo( ) 
{ 
    int t0; 
    X.dat = 0x01020304; 
    t0 = X.c[0]; ・・・
}

在大端 CPU 中编译并执行此代码时, t0”的值为0x01。在小端CPU中, t0”的值为0x04。

那么问题来了:要想使存储顺序从大端,变为小端,怎么办呢?

方法其实有很多种,这里讲讲针对IAR的两种方法:

  • 使用__big_endian关键字。

  • 使用__REV, __REV16, __REVSH, RBIT函数。

使用__big_endian关键字

IAR中__big_endian关键字提供了一种方便的方式来将应用程序从big-endian移植到little-endian。

__big_endian关键字用于访问以big-endian字节顺序存储的变量,而与应用程序其余部分使用的字节顺序无关。在ARMv6或更高版本进行编译时,可以使用__big_endian关键字。

只需添加__big_endian关键字即可,如:

____big_endian union 
{ 
    unsigned int dat; 
    unsigned char c[4]; 
}X;

void foo( ) 
{
    int t0;
    X.dat = 0x01020304;
    t0 = X.c[0];
    ・・・
}

修改后的代码在低位字节CPU中编译和执行,变量“ t0”为0x01。

注意:此关键字不能用于指针。同样,此属性不能在数组上使用。同时,关键字__big_endian插入REV指令以交换字节数据,REV指令的插入会影响代码大小和执行时间。

2.png

关键字具有限制,不能应用于复杂的数据结构,比如以下代码会生成错误:

__big_endian
union 
{ 
    unsigned long dat; 
    unsigned char c[4]; 
    struct 
    { 
     unsigned long a0: 1; 
     unsigned long a1: 1; 
     unsigned long a2: 2; 
     unsigned long a3: 4; 
     unsigned long a4: 8; 
     unsigned long a5: 16; 
   }s;
} f1_dat2;

使用__REV, __REV16, __REVSH, RBIT函数

大端和小端之间的字节顺序差异只是顺序,因此我们需要做的是更改字节顺序,我们再次以变量0x01020304为例:

3.png

我们可以通过代码实现交换功能,比如:

typedef unsigned long uint32_t;
uint32_t bswap_32(uint32_t x) 
{  
    uint32_t t = x;  
    uint32_t s;  
    s = ( (((uint32_t)(t) & (uint32_t)0x000000ffUL) << 24) |    
        (((uint32_t)(t) & (uint32_t)0x0000ff00UL) << 8) |      
        (((uint32_t)(t) & (uint32_t)0x00ff0000UL) >> 8) |  
        (((uint32_t)(t) & (uint32_t)0xff000000UL) >> 24) ); 
    return s; 
}

通过这种方式实现,将导致消耗更多时间和代码大小。

在C代码中,我们通常编写内联汇编代码实现交换。IAR有种内部函数可以实现该功能。

比如下面交换功能:

4.png

代码如下:

#include <intrinsics.h>
void x1( void ) 
{
    s2 = __REV(s1);
    s3 = __REV16(s1);
    s4 = __REVSH(s1);
}

以上就是在IAR中实现大小端字节序的迁移方法,感兴趣的读者可以在IAR中编码测试一下。

来源:strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 13

为什么必须考虑单片机的选型问题?

答:单片机的的选型是一件重要而费心的事情,如果单片机型号选择得合适,单片机应用系统就会得经济,工作可靠;如果选择得不合适,就会造成经济浪费,影响单片机应用系统的正常运行,甚至根本就达不到预先设计的功能。

单片机选型不当时会带来什么危害?

答:对于一个已经设计好的单片机应用系统来说,它的技术要求和系统功能都应当十分明确.如果选择功能过于少的单片机,这个单片机应用系统就无法完成控制任务;但是如果选择的单片机功能过于强大,这不但没有必要,还会造成资源浪费,不降性能价格比。

单片机正确选型会带来什么益处?

答:只要掌握和运用单片机正确选型的原则,就可以选择出最能适用于应用系统的单片机,保证单片要应用系统有最高的可靠性,最优的性能价格比,最长的使用寿命和最好的升级换代可能。

单片机的选型的总原则是什么?

答:单片机芯片选型时,总的原则是:

“芯片含有(功能或数量)略大于设计需求”,”设计需求尽可能(用)芯片完成(少用外围器件)”,

“选大(大厂)不选小,选多(供应量多)不选少,选名(名牌)不选渺(飘渺,不知详情的厂子),选廉(谦价)但要好(质量保证)。

怎样对单片机选型?

对单片机选型,主要应用从单片机应用系统的技术性,实用性和要开发性三方面来考虑.

(1)技术性:要从单片机的技术指标角度,对单片机芯片进行选择,以保证单片机应用系统在一定的技术指标下可靠运行;

(2)实用性:要从单片机的供货渠道、信誉程序等角度,对单片机的生产厂家进行选择以保证单片机应用系统在能长期、可靠运行;

(3)可开发性:选用的单片机要有可靠的可以开发手段,如程序开发工具、仿真调试手段等。

从技术性的角度看,对单片机选型的总原则是什么?

答:从技术性的角度看,对单片机总的选型原则就是看一个单片机能否完成对系统的预定控制,或者需要增加几个附加的集成电路才能实现对系统的控制。

从技术性的角度看,对单片机的外围端口怎能样选择?

答:这要看所选单片机的I/O端口中用多少种不同类型的I/O方式。例如,单片机是否含有下列I/O方式或I/O器件:

(1)SR232C终端;

(2)开关、继电器、键盘;

(3)传感器,如温度、压力、流量、光线、电压等;

(4)声音报警;

(5)显示,如LED、LCD显示等;

(6)A/D或D/A转换器;

(7)其他I/O方式或功能器件。

选型时,如果设计的单片机应用系统中需要不述某些I/O方式或I/O器件,那就首先选用单片机芯片内部含有所需的机型;如果芯片中不含所需的I/O方式或I/O器件,则只好选用I/O功能尽量多的符合需求的芯片,然后再采用其他外围电路达到或满足设计需求。

对单片机内部已经大量超出设计需求的芯片,最好不选用,否则会因超出需求而增加不必要的经济费用。

从技术性的角度看,怎样对单片机的CPU选型?

答:选型的关键在于看单片机的CPU是否有合适的吞吐量。

单片机的CPU吞吐量关系到处理信息和执行控制的能力问题。如果选用处理能力过强的单片机CPU,则浪费了单片机资源,反之,单片机处理能力会不够,无法正常工作

从技术性的角度看,单片机的处理能力表现在哪几方面?

答:单片机的处理能力主要表现在:CPU的运行速度、指令的功能、指令周期的长短、中断能力、堆栈大小等方面。

从技术性的角度看,单片机有哪些极限性能?

答:单片机应用时,都具有特定的应用环境,因此,每个型号的单片机都会有极限性能的指标要求。单片机的极限性能一般包括:最高使用温度、最低使用温度、最高使用电压、最低使用电压、最大功耗、最大电流等。

从实用性角度看,单片机的实用性包括哪几方面?

答:单片机制实用性包括:芯片的购货渠道、供应量、生产量和更新换代趋势等。

单片机应用系统从准备到运行大体需要经过哪几个阶段?

答:一个单片机应用系统的实施,大体要经过对控对象的需求调研、控制方案选择、总体构思,硬件设计、软件设计、印板制作、元器件安装、编制程序、软硬件仿真调试、固化应用程序、微机运行、整机调试等几个阶段。

在单片机调试过程中,为什么要使用开发工具?

答:单片机应用系统必须经过调试阶段,只有经过调试才能发现问题、改正错误、最终得到应用。但是,由于单片机在执行程序时人工是无法控制的,因此,为了在调试程序、检查软硬件的运行状态时调试人员能够掌握和控制它,随时观察程序的运行过程而不改变运行中原有的数据、性能和结果,模仿现场真实调试,就必须借助某种单片机的开发工具进行。

单片机在线仿真器应当具备哪些特点才能完善?

答:(1)不占用单片机的任何资源;

(2)能提供给用户从零地址开始的、足够的仿真RAM空间作为用户的程序存储器的数据存储器使用;

(3)对于仿真RAM或样机EPROM内的用户程序,以及中断控制指令和中断服务程序,可以单拍、断点、全速断点、连续方式运行;

(4)有软齐全的软件开发工具,这些软件开发工具包括:

配备有交叉汇编软件,以将用户用汇编语言编制的应用程序生成可执行的目标文件;

具有丰富的子程序库,汇编时,连同用户设计的程序一同编译成目标程序,装入仿真RAM供调试和固化用;

具有高级语言编译系统,用户可以方便地用这些高级语言进行编程;

具有反汇编功能,对目标程序反汇编的结果可以打印或存盘等。

单片机开发系统的种类有哪些?

答:单片机开发系统在何可分为4类:通用型开发系统、实用型开发系统、通用机开发系统、模拟开发系统。

通用型单片机开发系统的基本配置是什么?

答:通用型单片机开发系统中配备有EPROM读出/写入器、仿真插头和其他外设,基本配置。

实用型开发系统的特点是什么?

答:单片机实用型开发系统的特点是:开发系统的硬件按照单片机典型应用系统进行配置,系统配有监控程序,具有自开发能力。

实用型单片机开发系统的优缺点是什么?

答:其优点是:减少了系统研制时的硬件工作量,研制周期短,开发效率高,具有二次开发能力。缺点是:当不是最佳配置时,软硬件资源浪费软大,应用场合也有局限性。

什么是通用机开发系统?

答:在通用计算机中加开发模板的开发系统称为通用机开发系统。

通用机开发系统中,开发模板由哪些部分组成?怎样使用?

答:开发模板的硬件结构包含有计算机不可替代的部分,如EPROM写入系统、仿真头以及CPU仿真所必需的单片机系统等。开发模板既可插在计算机的扩展槽中,也可以总线连接的方式放在机器外部。

通用机开发系统的优点是什么?

答:其优点是能够充分利用计算机的软硬件资源,开发效率高。

什么是模拟开发系统?

答:一般来说,由计算机和模拟开发软件构成的、完全依靠软件手段进行开发的系统,称为模拟开发系统。

模拟开发系统的工作原理是什么?

答:其工作原理是:利用模拟开发软件在计算机上实现对单片机的硬件模拟、指令模拟、运行状态模拟,从而完成应用软件开发的全过程。

模拟开发系统的优缺点是什么?

答:以SIM8051模拟开发系统为便,它的模拟调试功能很强,效率高,成本低。模拟开发系统基本上包括了在线仿真器的单步、跟踪、检查和修改功能,并且还能够模拟产生各种中断和I/O应答过程。用户只要配备了模拟/调试软件,就可使微机成为一台通用的模拟开发系统。其缺点是不能对硬件系统进行诊断和适时仿真。

来源:单片机与嵌入式学堂

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 17

有网友问:

bin文件转C语言,谁可以做?

说实话,在我的认知里,bin文件转C语言是不可能的,即便能转,也是那种非常简单的程序,比如:点灯。

之前一直都没认真研究过,今天索性花了一点时间研究了一下。包括百度/谷歌、ChatGPT、下载工具验证等。

我验证的最终结果是:bin文件转C语言,几乎不可能,但转汇编还是有可能。

逆向工程


bin文件转C语言这种工作,专业一点来讲,叫逆向工程。直白一点的说呢,叫破解。

这种工作,一般会深度结合硬件平台(比如单片机具体型号),逆向才会更容易。

网上也能找到一些专门做逆向工程的公司,通常是结合板卡一起做的,比如PCB抄板、芯片解密等。

1.png

芯片破解不是什么新鲜事,自程序(芯片)问世,就有破解,还有PCB也是一样,这种事见怪不怪了。

其实,不管破解程序、还是抄板,绝大多数情况下,能破解的产品,其实不值得花这个钱去破解。

bin文件转C语言的原理

要想搞明白bin文件能不能转C语言,就要明白一下它们底层的原理。

这个问题,我问了百度/谷歌,出来的结果,没有找到满意的答案,都是一些“敷衍”的内容。

2.png

于是,我又问了ChatGPT,得到的答案还算勉强:

将二进制文件转换为C语言代码的过程涉及到反汇编和逆向工程技术。下面是一个简要的解释:

反汇编:二进制文件是由机器码组成的,这些机器码是计算机可以直接执行的指令。反汇编就是将这些机器码转换回其对应的汇编指令形式。

逆向工程:逆向工程旨在通过分析程序或二进制文件来理解其功能、结构和行为。在本例中,我们试图从二进制文件中推导出相应的C语言代码。

符号重建:符号重建是一项关键任务,它涉及识别并还原出函数、变量以及其他数据结构等元素在二进制文件中所代表的含义和用法。

控制流恢复:控制流恢复意味着确定程序中各个部分之间的跳转和流程,并以此重新构建函数调用关系图。

伪代码生成:最终阶段通常会生成类似于C语言风格(也称为伪代码)表示形式来描述源代码结构,并尽可能准确地还原原始程序。

需要注意的是,该过程并非完全自动化且非常复杂。结果可能不够精确或无法直接使用,尤其是对于复杂的二进制文件。因此,在实际应用中,人们通常会结合手动分析和编写代码来进行更深入的逆向工程。


3.png

其实,大体的流程,相信有一定经验的小伙伴都明白:bin文件转C语言之前,肯定是先转汇编,再从汇编到C语言。

bin转汇编应该难度相对低一点,要想汇编再转C,即便能转,又有多少人能看懂转出来的C代码呢?

bin文件转C语言有哪些工具?

为了搞明白,我还特意在网上找了一下bin转C的工具:

bin文件是二进制文件,不能直接转换为C语言代码。如果要将其转换为可读的C语言代码,那么您需要使用逆向工程工具,如IDA Pro,OllyDbg或Radare2。

4.png


也顺便问了下ChatGPT:

有几个工具可以将二进制(.bin)文件转换为C语言代码,帮助您进行反汇编或分析。以下是一些常用的工具:

IDA Pro:这是一个广泛使用的逆向工程平台,它提供了强大的反汇编和静态分析功能。IDA Pro可以将二进制文件转换为C语言伪代码,使得理解和重建源代码更加容易。

Ghidra:这是由美国国家安全局开发并于2019年发布的免费逆向工程框架。Ghidra支持将二进制文件转换为C语言代码,并且功能非常强大。

Binary Ninja:这是另一个流行的逆向工程平台,它提供了高级反汇编、数据流分析和可视化等特性。Binary Ninja也支持将二进制文件转换为C语言表示形式。

请注意,以上列出的工具都需要一定水平的技术知识才能正确使用,并且结果可能不完全准确或直接可用。因此,在处理敏感信息之前,请遵循法律法规以及相关道德准则,并确保拥有合法许可证(如果需要)。

5.png


我也尝试用了一下 IDA Pro 这个广泛使用的逆向工程平台进实践验证了一下。

6.png

大概得出的结果就是,转(反)汇编问题不大,想要转成C语言,很难,即便能转为C语言,都是“伪C”,是你看不懂那种C语言。

所以,小工程(比如点灯)不用转,大工程转不了。

好了,就分享到这里。因为时间和精力的有限,我了解的可能不是很充分,也不一定对。

来源:微信公众号 | strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 66

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

2024年生效的新法律法规对从消费物联网设备到关键基础设施的网络安全提出了更严格的要求。从产品和供应链的角度来看,满足这些新的安全合规要求可能非常复杂、昂贵且耗时。为了向开发人员提供嵌入式安全解决方案,使他们能够设计出符合法规要求的应用,Microchip Technology(微芯科技公司)今日宣布推出新型PIC32CK 32位单片机(MCU系列。该系列集成了硬件安全模块(HSM)子系统和采用TrustZone®技术的Arm®Cortex®-M33内核,可帮助隔离并确保设备安全。

1.jpg

PIC32CK SG是市场上首款将HSM的强大安全性与基于硬件的安全权限环境TrustZone技术相结合的32位器件。Microchip针对中端MCU的最新创新为设计人员提供了符合最新网络安全要求的高性价比嵌入式安全解决方案。内置的HSM为身份验证、安全调试、安全启动和安全更新提供了高水平的安全性,而TrustZone技术则为关键软件功能提供了额外的保护。HSM可加速各种对称和非对称加密标准、真正的随机数生成和安全密钥管理。

MicrochipPIC32CK MCU支持ISO 26262功能安全和ISO/SAE 21434网络安全标准。为了提高灵活性和成本效益,PIC32CK MCU系列提供了多种选件,可根据最终应用的要求调整安全级别、内存和连接带宽。可提供的选择包括高达2 MB的双区闪存和512 KB SRAM,以及10/100以太网、CAN FDUSB等各种连接选项。

Microchip负责MCU32 MPU32业务部的副总裁Rod Drake表示:“新出台的要求使得大多数物联网设备必须具备安全性。PIC32CK为中端单片机应用提供了高水平的基于硬件的安全性,从而实现了成本效益。Microchip的工具生态系统和安全专业知识有助于客户应对新要求的复杂性,并为客户产品在整个生命周期内提供支持。”

对于需要额外安全保护的产品供应链,如工业设计、医疗设备、家用电器和消费类物联网设备,PIC32CK将通过Microchip的可信平台设计套件(Trust Platform Design Suite)获得支持,可作为一项服务进行配置。该平台可实现密钥、证书和IP的安全工厂配置,无需在供应链中透露这些秘密。

开发工具

Microchip的软件平台(包括MPLAB® Harmony v3Trust Platform Design Suite)支持32PIC32CK MCU系列。PIC32CK SGPIC32CK GC Curiosity Ultra开发板(包括EV33A17AEV44P93A)也支持 PIC32CK系列。

供货与定价

PIC32CK系列现已量产可供订购。如需了解更多信息或购买,请联系Microchip销售代表、全球授权分销商,或访问Microchip的采购和客户服务网站www.microchipdirect.com

Microchip Technology Inc. 简介

Microchip Technology Inc.是致力于智能、互联和安全的嵌入式控制解决方案的领先供应商。其易于使用的开发工具和丰富的产品组合让客户能够创建最佳设计,从而在降低风险的同时减少系统总成本,缩短上市时间。Microchip的解决方案为工业、汽车、消费、航天和国防、通信以及计算市场中约125千家客户提供服务。Microchip总部位于美国亚利桑那州Chandler市,提供出色的技术支持、可靠的产品交付和卓越的质量。详情请访问公司网站www.microchip.com

围观 20

微控制器和单片机是一种芯片,但两者并不完全相同。微控制器是一种集成了处理器、存储器和各种输入/输出接口的芯片,通常用于控制电子设备或系统。它们通常包含了一个完整的计算机系统,可以独立运行程序。

而单片机是一种在单个芯片上集成了处理器、存储器和输入/输出接口的微型计算机。它们通常用于简单的控制任务,如传感器数据的采集和处理。

两者主要有以下方面的区别

1. 硬件结构

微控制器通常只包含一个小型微处理器核心和少量外围电路,外部需要添加其它电路扩展功能。而单片机是一套完整的系统,由核心处理器、存储器、输入输出接口和时钟等部分组成,所有元件都被集成在单个芯片上。

2. 功耗

在单片机运行时,包括其它外设在内的所有元件都不断工作,因而单片机的功耗比较高。而微控制器的 GPIO 通常只在需要输入或输出时才会进行工作,这种方式可以支持大部分操作模式,从而大大降低了功耗。

3. 复杂度

微控制器集成了更多的功能,包括模拟转换器、数字信号处理器和硬件调制解调器等。另外,微控制器通常有更多的I/O接口和特定的子系统模块(如CAN总线),这些模块可以无需复杂的硬件即可接通。

4. 处理速度

微控制器的处理速度通常比单片机更快。

5. 开发难度

由于微控制器的硬件和软件开发难度较高,因此需要有一些专业知识和技能。相比之下,单片机通常更容易入门。

虽然两者都是芯片,但微控制器更加强大和复杂,适用于更复杂的控制任务,而单片机更适合于简单的嵌入式系统。因此在选择芯片时,需要根据具体的控制需求和系统复杂度来选择合适的芯片类型。

来源:兆亿微波

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 39

很多初学者都是从裸机开始学起,不能明白裸机和操作系统的区别。甚至有不少人认为用中断就能代替多任务处理,你认同吗?

裸机系统    

裸机系统通常分成轮询系统和前后台系统。

1 轮询系统

轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情,大概的伪代码具体如代码清单所示:

int main(void)
{  
    /* 硬件相关初始化 */  
    HardWareInit();
    
  /* 无限循环 */  
  for (;;) 
  {    
      /* 处理事情 1 */    
      DoSomething1();
      
    /* 处理事情 2 */    
    DoSomethingg2();
    
    /* 处理事情 3 */    
    DoSomethingg3();  
  }
}

轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单 1-1 中,如果只是实现 LED 翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。

假设DoSomethingg3 是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响 应 , 并 做 紧 急 处 理 , 而 这 个 时 候 程 序 刚 好 执 行 到 DoSomethingg1 , 要 命 的 是DoSomethingg1 需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到 DoSomethingg3 的时候就会丢失掉一次事件。足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

2 前后台系统    

相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台, main 函数里面的无限循环我们称为后台,大概的伪代码见代码清单所示:

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;

int main(void)
{  
    /* 硬件相关初始化 */  
    HardWareInit();
  
    /* 无限循环 */  
    for (;;) 
    {    
        if (flag1) 
        {      
            /* 处理事情 1 */      
            DoSomething1();    
        }
        
        if (flag2) 
        {      
            /* 处理事情 2 */      
            DoSomethingg2();    
        }
    
        if (flag3) 
        {      
            /* 处理事情 3 */      
            DoSomethingg3();    
        }  
    }
}

void ISR1(void)
{ 
     /* 置位标志位 */  
     flag1 = 1;  
     
     /* 如果事件处理时间很短,则在中断里面处理  
     如果事件处理时间比较长,在回到后台处理 */  
     DoSomething1();
}

void ISR2(void)
{  
    /* 置位标志位 */  
    flag2 = 2;
  
    /* 如果事件处理时间很短,则在中断里面处理  
    如果事件处理时间比较长,在回到后台处理 */  
    DoSomething2();
}

void ISR3(void)
{  
    /* 置位标志位 */  
    flag3 = 1; 
    
    /* 如果事件处理时间很短,则在中断里面处理  
    如果事件处理时间比较长,在回到后台处理 */  
    DoSomething3();
}

在顺序执行后台程序的时候,如果有中断来临,那么中断会打断后台程序的正常执行流,转而去执行中断服务程序,在中断服务程序里面标记事件,如果事件要处理的事情很简短,则可在中断服务程序里面处理,如果事件要处理的事情比较多,则返回到后台程序里面处理。

虽然事件的响应和处理是分开了,但是事件的处理还是在后台里面顺序执行的,但相比轮询系统,前后台系统确保了事件不会丢失,再加上中断具有可嵌套的功能,这可以大大的提高程序的实时响应能力。在大多数的中小型项目中,前后台系统运用的好,堪称有操作系统的效果。

RTOS多线程    

相比前后台系统,多线程系统的事件响应也是在中断中完成的,但是事件的处理是在线程中完成的。在多线程系统中,线程跟中断一样,也具有优先级,优先级高的线程会被优先执行。    当一个紧急的事件在中断被标记之后,如果事件对应的线程的优先级足够高,就会立马得到响应。相比前后台系统,多线程系统的实时性又被提高了。    

多线程系统大概的伪代码具体见代码清单所示:

int flag1 = 0;
int flag2 = 0;
int flag3 = 0;

int main(void)
{  
    /* 硬件相关初始化 */  
    HardWareInit();
    
    /* OS 初始化 */  
    RTOSInit();
   
    /* OS 启动,开始多线程调度,不再返回 */  
    RTOSStart();
}

void ISR1(void)
{  
    /* 置位标志位 */  
    flag1 = 1;
}

void ISR2(void)
{  
    /* 置位标志位 */  
    flag2 = 2;
}

void ISR3(void)
{  
    /* 置位标志位 */  
    flag3 = 1;
}

void DoSomething1(void)
{  
    /* 无限循环,不能返回 */  
    for (;;) 
    {    
        /* 线程实体 */    
        if (flag1) {
        }  
    }
}

void DoSomething2(void)
{ 
     /* 无限循环,不能返回 */  
     for (;;) {    
         /* 线程实体 */    
         if (flag2) {
         }  
     }
}

void DoSomething3(void)
{  
    /* 无限循环,不能返回 */  
    for (;;) {    
        /* 线程实体 */    
        if (flag3) {
        }  
    }
}

相比前后台系统中后台顺序执行的程序主体,在多线程系统中,根据程序的功能,我们把这个程序主体分割成一个个独立的,无限循环且不能返回的小程序,这个小程序我们称之为线程。

每个线程都是独立的,互不干扰的,且具备自身的优先级,它由操作系统调度管理。加入操作系统后,我们在编程的时候不需要精心地去设计程序的执行流,不用担心每个功能模块之间是否存在干扰。

加入了操作系统,我们的编程反而变得简单了。整个系统随之带来的额外开销就是操作系统占据的那一丁点的 FLASH 和 RAM。现如今,单片机的 FLASH 和 RAM 是越来越大,完全足以抵挡 RTOS 那点开销。

轮询、前后台和多线程系统软件模型区别:

1.jpg

来源:单片机与嵌入式

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 30

通用串行总线(USB)接口在嵌入式设计中的优势包括与各种设备的兼容性、简化的通信协议、现场更新能力和供电能力。为了帮助将这一功能轻松集成到嵌入式系统中,Microchip Technology Inc.(微芯科技公司)推出了 AVR® DU 系列单片机。作为集成USB连接的下一代Microchip 8位MCU,AVR DU系列的设计旨在提供比以往版本更强的安全功能和更高的功率输出。

1.jpg

Microchip负责8 位MCU事业部的副总裁Greg Robinson表示:“USB是电子设备的标准通信协议和电源输出方案。Microchip的AVR DU系列将我们最先进的8位MCU的灵活性与增强型电源输出的多功能性相结合,为更广泛的嵌入式系统带来了USB的优势。” 

AVR DU MCU支持从USB接口提供高达15W的功率,这在同类其他USB单片机中并不多见。该功能可在5V电压下以高达3A的电流为USB-C®充电,使这些MCU成为充电宝和可充电玩具等设备的绝佳选择。

为了加强对恶意攻击的防御,AVR DU系列采用了Microchip的编程和调试接口禁用 (PDID) 功能。启用该功能后,增强的代码保护可锁定对编程/调试接口的访问,阻止未经授权的读取、修改或擦除固件的尝试。为了实现安全固件更新,AVR DU系列采用了“边写边读”(RWW)闪存,结合安全引导加载程序,设计人员可以使用 USB接口修补漏洞、解决安全问题和添加新功能,而不会中断产品运行。AVR DU MCU的这一新增功能可实现不间断的现场更新,有助于延长产品的使用寿命。 

此外,AVR DU系列还具有USB时钟恢复功能,无需昂贵的外部晶振,有助于降低总体设计和物料清单 (BOM) 成本。独立于内核的外设 (CIP)  使设计人员能够将主要器件功能和系统管理任务集成到紧凑的单芯片解决方案中,从而节省电路板空间并减少设计工作量。 

从健身可穿戴设备和家用电器到农业和工业应用,各种嵌入式设计的开发人员都可以从在设计中纳入高效的AVR DU MCU中获益。有关AVR DU系列的线上演示,请访问try.microchip.com。

开发工具

MPLAB®代码配置器(MCC)包含一个软件协议栈,支持AVR DU MCU USB模块的硬件功能。完全集成到MPLAB开发工具系统中可直接用于生产的USB软件协议栈可通过MCC Melody轻松配置,从而简化开发流程,缩短产品上市时间。为了进一步实现快速原型设计和开发,还提供 Curiosity Nano 开发板 (EV59F82A)、MPLAB X集成开发环境 (IDE)和MPLAB XC8编译器,以支持AVR DU系列。

2.jpg

供货与定价

如需了解更多信息或购买,请联系Microchip销售代表、全球授权分销商或访问 Microchip采购和客户服务网站 www.microchipdirect.com

来源:Microchip微芯

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 14

页面

订阅 RSS - 单片机