0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

聊聊嵌入式軟件分層

lilihe92 ? 來源:CSDN ? 2023-12-28 09:22 ? 次閱讀

正文

大家好,今天以控制LED閃爍為例,聊聊嵌入式軟件分層:

———————————
||
|P1.1|-----I<|--------------<|
|??????????|????????????????
|?????p2.1?|-------------/?---------|--.
|??????????|
|??????????|
———————————??????

1、兩層結構

硬件層<-->軟件層--最粗糙的分層架構

/**********************************************************************************/
#include
intmain()
{
inti=0;
while(1)
{
P1_1=0;
for(i=0;i<5000;i++);
??????P1_1=1;
??????for(i=0;i<5000;i++);
??}
}

2、三層結構

硬件層<--> 驅動層<-->應用層

/*******************驅動頭文件driver.h***********************************************************/
voiddelay();
voidled_on();
voidled_off();
/*******************驅動源文件driver.c************************************************************/
#include
#include"driver.h"
/*延時函數(shù)*/
voiddelay()
{
inti=0;
for(i=0;i<5000;i++);
}
void?led_on()
{
???P1_1=0;
}
void?led_off()
{
???P1_1=1;
}
/******************應用系統(tǒng)****************************************************************/
#include“../driver/driver.h”
int?main()
{
??while(1)
???{?
???????led_on();
???????delay();
???????led_off();
???????delay();
??}
}

3、四層結構

硬件層<-->驅動層<-->操作系統(tǒng)層<-->應用層

/******************************驅動****************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
intled_init(void);
voidled_cleanup();
staticintdevice_open(structinode*,structfile*);
staticintdevice_release(structinode*,structfile*);
staticssize_tdevice_write(structfile*,constchar*,size_t,loff_t*);
intinit_model(void);
voidcleanup_module(void);
structfile_operationsled_ops={
.owner=THIS_MODULE,
..............................
}
intled_init(void)
{
..............................
}
voidled_cleanup()
{
..............................
}
staticintdevice_open(structinode*inode,structfile*file)
{
..............................
}
staticintdevice_release(structinode*inode,structfile*file)
{
..............................
}
staticssize_tdevice_write(structfile*file,constchar*buffer,size_tlength,loff_t*offset)
{
..............................
intinit_model(void)
{
..............................
}
modele_init(led_init);
module_exit(led_cleanup);
MODULE_LICENCE("GPL");
/******************************應用****************************************************/
#include
#include
#include
#include
#defineLED"/dev/led"
intmain()
{
File*fp=fopen(LED,RDWR);
if(!fp){
while(1){
ioctl(fp,1);
sleep(1);
ioctl(fp,0);
sleep(0);
}
}
fclose(fp);
}

從上面的例子可以看出,層次越多,好像系統(tǒng)的代碼越多,開發(fā)者的工作量越大。實際情況是真的如此嗎?其實分層的目的主要1是降低系統(tǒng)開發(fā)難度;2是為了復用。

驅動層和中間的操作系統(tǒng)層是可以復用的,產(chǎn)品升級或更新?lián)Q代的時候,雖然總的代碼量是大的,但實際有很多代碼是不需要重新開發(fā)的,系統(tǒng)開發(fā)的工作量相對較小。比如說IO口調整了,甚至是整個硬件板子更換了,軟件上只要調整驅動即可。

很多大學的嵌入式系統(tǒng)課程中采用的是兩層結構,主要的原因是教材中的示例一般比較簡單,其主要目的是為了演示如何使用芯片,如何實現(xiàn)某個功能,很少考慮復用的問題。

為了講清楚其中的操作方法,其代碼會盡量簡單,即使是實現(xiàn)相對比較復雜的功能可能也只是采用抽象為函數(shù)的方法,很少考慮工程的問題,在潛移默化中很多人就以為兩層架構就是理所當然的。

具體采用何種分層結構是與產(chǎn)品相關的。比如大家都知道坐飛機是比步行快得,在校園里從上課的教室到休息的宿舍哪一種方式好呢?當然是步行。反之,從南京到北京,采用坐飛機肯定要比步行好(當然,更好的是坐高鐵)。

第3種方式似乎代碼量是最大的,但是要記住底層是很少改的,所以開發(fā)的時候就是寫應用,這個代碼量有多少?!優(yōu)勢可見一斑!






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式軟件
    +關注

    關注

    4

    文章

    239

    瀏覽量

    26579
  • LED閃爍
    +關注

    關注

    0

    文章

    29

    瀏覽量

    9790

原文標題:簡說嵌入式軟件分層思想

文章出處:【微信號:最后一個bug,微信公眾號:最后一個bug】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式分層架構的相關資料分享

    最近重新進入嵌入式領域,有必要對嵌入式分層架構有一個清晰的理解。經(jīng)過多方查閱以及個人的理解,本人對嵌入式分層架構概括總結如下:比較細的層次由
    發(fā)表于 10-28 08:42

    聊聊什么是嵌入式

    目錄隨便聊聊什么是嵌入式?我對嵌入式的看法單片機系統(tǒng)與嵌入式系統(tǒng)的差別PC系統(tǒng)與嵌入式系統(tǒng)的差別單片機與
    發(fā)表于 12-01 07:31

    嵌入式軟件開發(fā)過程之程序代碼分層

    嵌入式軟件開發(fā)過程中,在程序架構的搭建完成之后,為了提高項目代碼的可讀性和可維護性等,應對程序代碼分層
    發(fā)表于 12-21 06:13

    嵌入式軟件基礎的四層架構分別是哪些

    嵌入式軟件分層架構基本原則有哪些?嵌入式軟件基礎的四層架構分別是哪些?
    發(fā)表于 12-24 07:57

    探討一下嵌入式軟件分層設計

    嵌入式軟件分層設計嵌入式軟件就是某一項目的源碼文件集合,源碼文件的數(shù)量,根據(jù)項目復雜程度的不同而有規(guī)模和層次的差別。就拿簡單的一個芯片廠..
    發(fā)表于 02-14 07:19

    什么是嵌入式軟件開發(fā)

    嵌入式軟件開發(fā)又是指什么?   隨著嵌入式軟件系統(tǒng)結構越來越復雜,嵌入式軟件的開發(fā)已成
    發(fā)表于 04-20 08:43 ?8717次閱讀

    ARM嵌入式軟件開發(fā)

    ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)
    發(fā)表于 01-15 17:29 ?64次下載

    嵌入式軟件是什么意思_嵌入式軟件的分類有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹了嵌入式軟件的特征,最后介紹了嵌入式軟件的分類。
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    嵌入式軟件的開發(fā)流程_嵌入式軟件的調試

    本文首先介紹了嵌入式軟件的發(fā)展,其次闡述了嵌入式軟件的開發(fā)流程,最后介紹了嵌入式軟件的調試。
    發(fā)表于 08-31 16:02 ?6187次閱讀

    嵌入式軟件測試參考書籍

    嵌入式軟件測試的幾本參考書籍:1、《嵌入式軟件測試》;2、《嵌入式軟件測試 方法、案例與模板詳解
    發(fā)表于 10-20 12:06 ?51次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>測試參考書籍

    嵌入式框架-分層

    原有的代碼。接下來嵌入式ARM便和大家分享一下,嵌入式架構那些事兒……01嵌入式系統(tǒng)的基本架構嵌入式系統(tǒng)一般由軟件和硬件兩個部分組成,基中
    發(fā)表于 10-20 16:06 ?24次下載
    <b class='flag-5'>嵌入式</b>框架-<b class='flag-5'>分層</b>

    嵌入式分層概括總結

    最近重新進入嵌入式領域,有必要對嵌入式分層架構有一個清晰的理解。經(jīng)過多方查閱以及個人的理解,本人對嵌入式分層架構概括總結如下:比較細的層次由
    發(fā)表于 10-21 10:51 ?11次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>分層</b>概括總結

    嵌入式軟件開發(fā)的特點、設計流程、嵌入式軟件的結構

    ? ? ? ?嵌入式軟件開發(fā)的特點、設計流程、嵌入式軟件的結構?一:嵌入式軟件開發(fā)的特點1.?
    發(fā)表于 11-03 15:21 ?37次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>開發(fā)的特點、設計流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的結構

    嵌入式軟件分層隔離的典范是什么?

    嵌入式軟件開發(fā)分層、模塊化是理想狀態(tài),實際開發(fā)中因各種限制而有所取舍,但這不妨礙學習參考優(yōu)秀軟件架構,即使有部分思想在項目中落實,也是大有裨益的。
    的頭像 發(fā)表于 01-20 11:08 ?1039次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>分層</b>隔離的典范是什么?

    嵌入式軟件架構設計之程序分層

    嵌入式MCU軟件開發(fā)過程中,程序分層設計也是重中之重,關系到整個軟件開發(fā)過程中的協(xié)同開發(fā),降低系統(tǒng)軟件的復雜度(復雜問題分解)和依賴關系、
    的頭像 發(fā)表于 02-15 14:41 ?1096次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>架構設計之程序<b class='flag-5'>分層</b>