娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2021年05月31日 | 基于STM32原子戰艦板內存管理源碼詳解

發布者:腦力激蕩 來源: eefocus關鍵字:STM32  原子戰艦板  內存管理 手機看文章 掃描二維碼
隨時隨地手機看文章

簡介:走到今天,已經開始涉及到計算機核心一點的東西了---內存管理。通過本實驗的學習,能夠較為深刻體會到“指針是c語言的靈魂”這句話的分量。自然對c語言的能力要求就高很多了。本文是基于原子老師的c源碼,自己的學習的心得,只是對源碼作出自己的學習理解,同時也插補了一些涉及到的c語言知識。貼出本文不為別的,一來但愿能有有緣人看到本文,提出指正;二來,為了那些不眠的夜,安慰一下自己。


1, 內存管理簡介

內存管理,是指軟件運行時對計算機內存資源的分配和使用的技術。其最主要的目的是如何高效,快速的分配,并且在適當的時候釋放和回收內存資源。內存管理的實現方法有很多種,他們其實最終都是要實現2個函數:malloc和free;malloc函數用于內存申請,free函數用于內存釋放。


先回顧一下c語言知識:計算機內存一般分為靜態存儲區用以存儲全局變量或常量和動態存儲區用以存儲函數內部變量或形參或函數運算結果。malloc()函數的作用是請求系統在內存的動態存儲區分配若干個字節的存儲空間,函數的返回值是首字節地址,可見malloc()函數是指針類型。free(P)的作用是釋放指針變量P所指向的動態空間。


本章,我們介紹一種比較簡單的辦法來實現:分塊式內存管理。下面我們介紹一下該方法的實現原理,如圖所示(示意圖):


內存塊1 內存塊2 內存塊3 ……內存塊n     內存池
   |       |       |          |
第1項   第2項   第3項   ……第n項       內存管理表
                       <<-----分配方向
                                 |
                        malloc,free等函數

圖解:從上圖可以看出,分塊式內存管理由內存池和內存管理表兩部分組成。內存池被等分為n塊,對應的內存管理表,大小也為n,內存管理表的每一個項對應內存池的一塊內存。


內存管理表的項值代表的意義為:當該項值為0的時候,代表對應的內存塊未被占用,當該項值非零的時候,代表該項對應的內存塊已經被占用,其數值則代表被連續占用的內存塊數。比如某項值為10,那么說明包括本項對應的內存塊在內,總共分配了10個內存塊給外部的某個指針。


內寸分配方向如圖所示,是從頂à底的分配方向。即首先從最末端開始找空內存。當內存管理剛初始化的時候,內存表全部清零,表示沒有任何內存塊被占用。


分配原理:

當指針p調用malloc申請內存的時候,先判斷p要分配的內存塊數(m),然后從第n項開始,向下查找,直到找到m塊連續的空內存塊(即對應內存管理表項為0),然后將這m個內存管理表項的值都設置為m(標記被用),最后,把最后的這個空內存塊的地址返回指針p,完成一次分配。注意,如果當內存不夠的時候(找到最后也沒找到連續的m塊空閑內存),則返回NULL(空指針)給p,表示分配失敗。


釋放原理:

當p申請的內存用完,需要釋放的時候,調用free函數實現。free函數先判斷p指向的內存地址所對應的內存塊,然后找到對應的內存管理表項目,得到p所占用的內存塊數目m(內存管理表項目的值就是所分配內存塊的數目),將這m個內存管理表項目的值都清零,標記釋放,完成一次內存釋放。

關于分塊式內存管理的原理,我們就介紹到這里。


2, 硬件設計:

本章實驗功能簡介:開機后,顯示提示信息,等待外部輸入。KEY0用于申請內存,每次申請2K字節內存。KEY1用于寫數據到申請到的內存里面。KEY2用于釋放內存。WK_UP用于切換操作內存區(內部內存/外部內存)。DS0用于指示程序運行狀態。本章我們還可以通過USMART調試,測試內存管理函數。


本實驗用到的硬件資源有:

1) 指示燈DS0

2) 四個按鍵

3) 串口 //USMART

4) TFTLCD模塊

5) IS62WV51216


3, 軟件設計:

本章,我們將內存管理部分單獨做一個分組,在工程目錄下新建一個MALLOC的文件夾,然后新建malloc.c和malloc.h兩個文件,將他們保存在MALLOC文件夾下。


在MDK新建一個MALLOC的組,然后將malloc.c文件加入到該組,并將MALLOC文件夾添加到頭文件包含路徑。


打開malloc.c文件,輸入如下代碼:由于本實驗涉及到的c語言知識,尤其是指針知識較多,所以就邊用邊學

#include "malloc.h"

//內存池(4字節對齊)

__align(4) u8 mem1base[MEM1_MAX_SIZE];//內部SRAM內存池

/*

" u8 mem1base[MEM1_MAX_SIZE];"該數組是定義拿出內部內存池的40K的空間來做實驗,為什么該數組是u8類型?計算機內存是以字節為單位的存儲空間,內存中的每個字節都有唯一的編號,這個編號就叫地址。在這里就是定義40K個元素,每個元素代表一個字節。整個數組就代表整個內部SRAM內存池的總容量即40K個元字節的總空間容量。因為不管是存儲什么數據類型內存中的地址編號都是32位的,即每個地址編號可以容納4個字節,而不同的數據類型存儲在不同的內存存儲區,這就是為什么定義變量時一定要先聲明其數據類型的原因。存儲一個字符需要一個字節的存儲空間,存儲一個short類型需要2個字節的存儲空間,存儲一個int或float需要4個字節空間,就如同PLC內存中的字節,字,雙字的定義規則一樣(如字節MB0,MB1,MB0和MB1構成MW0;MW0和MW2構成32位的雙字DW0,DW4,DW8)。“__align(4)”就是規定4個字節對齊,即每個32的地址編號存儲一個數據類型?比如,字符存儲區中地址編號MB0可以存儲一個字節即8個位的數據,而存儲MB0這個地址編號是以32位的空間來存儲,也就是說不管是什么類型數據,存儲它的地址編號都是32的,所以指針值一定是32位的。


//“#define MEM1_MAX_SIZE40*1024 //最大管理內存 40K”,意思是mem1base[MEM1_MAX_SIZE]有40k個元素

*/

__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));//外部SRAM內存池

//#define MEM2_MAX_SIZE 200*1024 //最大管理內存200K,意思是mem2base[MEM2_MAX_SIZE]數組有200K個u8類型元素,第一個元素的地址存儲在 //外部存儲器SRAM的0X68000000地址,

//內存管理表

u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE];//內部SRAM內存池MAP

/*

//#define MEM1_ALLOC_TABLE_SIZEMEM1_MAX_SIZE/MEM1_BLOCK_SIZE //內存表大小,MEM1_MAX_SIZE/MEM1_BLOCK_SIZE==1250

//#define MEM1_BLOCK_SIZE32 //內存塊大小為32字節;“MEM1_MAX_SIZE/MEM1_BLOCK_SIZE ”的含義是內部SRAM內存池總共40K字節的容量除以32個字節,得到一共40K/32==1250個內存塊;也就是說將內部SRAM內存池劃為1250個內存塊。

“u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE];”實際上就等于“u16 mem1mapbase[1250];”意思是定義一個有1250個內存塊(元素)的數組,每個元素是u16類型數據;數組名“mem1mapbase”就是mem1mapbase[0](該數組的第一個元素它代表1250個內存塊中的第一個內存塊)的地址,也可以說是指針常量;結合與之關聯的結構體成員“u16 *memmap[2]={ mem1mapbase,mem2mapbase}”指針類型數組;在這里“mem2mapbase”是外部內存的第一個內存塊的地址,是個指針常量用以存放u16類型數據的地址值;結合

“mymemset(mallco_dev.memmap[0], 0,memtblsize[0]*2);”函數分析:結合本程序和結構體有關定義“u16 *memmap[2]; ”,首元素memmap[0]=mem1mapbase;也就是說“mallco_dev.memmap[0]”在這里表示1250個內部內存塊中第一個內存塊的地址,根據“u16 *memmap[2]={ mem1mapbase,mem2mapbase}”推斷出“mallco_dev.memmap[0]”是u16類型指針;

“memtblsize[0]”是什么意思呢?根據“const u32 memtblsize[2]={1250,6250};”可以得知memtblsize[0]==1250即內部內存一共有1250個管理項,

void mymemset(void *s,u8 c,u32 count)

{

u8 *xs = s;

while(count--)*xs++=c;

}//把u8類型數據c填充到以指針變量s為首地址的內存空間中,填充多少個數由count值決定


該函數的意思是把u8類型的數據“c”填充到u16類型指針元素memmap[0]中(根據結構體定義“u16 *memmap[2]; ”,而memmap[0]=mem1mapbase),說白了就是把u8類型的數據“c”填充到1250個內存塊中的count個內存塊中。


而mallco_dev.memmap[memx]是16位的,為了將其全部清零,所以乘以2.

本例中,用到了指針類型數組“u16 *memmap[2]={ mem1mapbase,mem2mapbase}”,為什么要定義指針類型數組呢?mem1mapbase是數組

“u16 mem1mapbase[1250];”的首個元素地址(即*mem1mapbase等價于mem1mapbase[0]),而mem1mapbase[0]就代表內部存儲器1250個存儲塊中的第一個存儲塊;根據結構體賦值定義可知:memmap[0]=mem1mapbase。所以mem1mapbase就是“mallco_dev.memmap[0]”,即mem1mapbase是函數mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2)的第一個形參,因為*mem1mapbase等價于mem1mapbase[0]),而mem1mapbase[0]就代表內部存儲器1250個存儲塊中的第一個存儲塊。結合

void mymemset(void *s,u8 c,u32 count)函數分析, mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2)函數的意思是:把0寫入到1250個存儲塊中的第一個存儲塊中;這樣就將一個存儲塊的值賦值為0了。


推斷出“mallco_dev.memmap[0]”是u16類型指針;

*/

u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] __attribute__((at(0X68000000+MEM2_MAX_SIZE)));

/*

“#define MEM2_ALLOC_TABLE_SIZEMEM2_MAX_SIZE/MEM2_BLOCK_SIZE”

“#define MEM2_BLOCK_SIZE32”

外部SRAM內存池MAP,同理,“MEM2_MAX_SIZE/MEM2_BLOCK_SIZE”的含義是外部SRAM內存池總共200K字節的容量除以32個字節,得到一共200K/32==6250個內存塊;也就是說將外部SRAM內存池劃為6250個內存塊。

*/

//內存管理參數

/*

內存管理表“MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE”分別是1250和6250個“項”.

每個內存分塊大小即內部和外部SRAM每個內存塊占有32個字節空間“MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE”分別是32個字節;

內存總大小“MEM1_MAX_SIZE,MEM2_MAX_SIZE”,分別是40K和200K個字節的總容量空間

mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);

*/

const u32 memtblsize[2]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE};//內存管理表大小

const u32 memblksize[2]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE};//內存分塊大小

const u32 memsize[2]={MEM1_MAX_SIZE,MEM2_MAX_SIZE};//內存總大小

/*

struct _m_mallco_dev //內存管理控制器,定義一個結構體類型數據,或結構體變量,

{

void (*init)(u8);//初始化

u8 (*perused)(u8); //內存使用率

u8 *membase[2];//內存池 管理2個區域的內存 mem1base,mem2base內存池

u16 *memmap[2]; //內存管理狀態表 mem1mapbase(==1250塊),mem2mapbase(6250), //內存管理狀態表

u8 memrdy[2]; //內存管理是否就緒

};

1,結構體成員“void (*init)(u8);”是定義了一個指向函數的指針變量,該指針變量名是init;void表示該函數沒有返回值(函數的數據類型由返回值決定);u8是函數的形參。指向函數的指針變量格式:數據類型 + (*變量名)(形參)

本例中:

void mem_init(u8 memx)

{

mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//內存狀態表數據清零 memx:所屬內存塊,即幾號內存塊

mymemset(mallco_dev.membase[memx], 0,memsize[memx]);//內存池所有數據清零

mallco_dev.memrdy[memx]=1;//內存管理初始化OK

}

也就是說,本例中用指向函數的指針變量來表示函數。c語言規定函數名就是函數的入口地址,也就是說函數名也是一個指針,指向函數的入口,根據這個原理,可以將指向函數的指針作為函數的參數調用,可以在不同的情況調用不同的函數;如果一個指向函數的指針變量等于函數名就可以說該指向函數的指針變量指向了該函數,那么指針變量與函數就是一樣的了。比如:“mem_init(memx);”就等同于“mallco_dev.init(memx);”

2,指針類型數組“u8 *membase[2];”,意思是該指針類型數組有兩個“char *”類型的指針元素或者說有兩個“u8 *”類型指針元素;為什么要定義“u8 *”類型呢?因為內存存儲區是根據數據類型來劃分的,如果不明確聲明類型就亂套了。

在C語言和C++語言中,數組元素全為指針的數組稱為指針數組。一維指針數組的定義形式為:“類型名 *數組標識符[數組長度]”。

例如,一個一維指針數組的定義:int *ptr_array[10]。該指針數組有10個元素,每個元素都是int類型的指針即“int *”類型;

指針類型數組“u8 *membase[2];”的賦值是mem1base,mem2base,“mem1base,mem2base”分別是內部內存池和外部內存池的數組名,是指針常量即首元素的地址;因為事先已經定義“u8 mem1base[MEM1_MAX_SIZE]”即“u8 mem1base[40K];”。

*/

//內存管理控制器,結構體變量賦值,即初始化

struct _m_mallco_dev mallco_dev=

{

mem_init,//內存初始化,將函數名“mem_init”賦給結構體成員“void (*init)(u8);”即指向函數的指針變量,

mem_perused,//內存使用率

mem1base,mem2base,//內存池

mem1mapbase,mem2mapbase, //內存管理狀態表,mem1mapbase(1250項),mem2mapbase(6250項)

0,0, //內存管理未就緒

};

/*

1,“void *des”無類型指針,不能指向具體的數據,“void *des”無類型指針指向內存中的數據類型由用戶自己確定,如malloc()函數的返回值就是“void *des”無類型指針,因為malloc()函數的返回值是不確定的是根據形參的數據類型確定的

2,“void mymemcpy(void *des,void *src,u32 n) ”函數的理解:

des是指針,但是不確定指向什么類型的數據,換句話說des指針存儲的什么類型數據不確定,“u8 *xdes=des;”將des指針存儲的數據

存儲到一個新的“u8 *”類型指針xdes中;“u8 *xsrc=src;”同理。

“*xdes++=*xsrc++; ”,當*xsrc++(自增)時,即指針“src”指針自增,也就是說把“src”指針逐位復制到des目標指針去了。復制個數就是n。

3,“*P”的意義:a),“*P”就是以指針變量P的內容(P的內容就是指針變量P里存儲的某一類型數據的指針值)為地址的變量;b),指針運算符“*”如果是在定義變量時候加在前面,意思是這個變量是指針變量,如 char *a;如果是在訪問指針變量的時候加在前面(如*a),意思是取指針變量指向的值,如 char b=*a; 上面定義了a是一個字符指針,這里就是把指針變量a指向的值取出來并賦給b。

*/

//復制內存,作用是將源地址的內容復制到目標地址

//*des:目的地址

//*src:源地址

//n:需要復制的內存長度(字節為單位)

void mymemcpy(void *des,void *src,u32 n)

{ //“void *des”無類型指針,不能指向具體的數據,“void *des”無類型指針指向內存中的數據類型由用戶自己確定

u8 *xdes=des;//目標地址,“*xdes”轉換成u8類型,也可以理解為把目的地地址des存儲到xdes指針中

u8 *xsrc=src;

while(n--)*xdes++=*xsrc++;

}

//設置內存

//*s:內存首地址

//c :要設置的值

//count:需要設置的內存大小(字節為單位)

void mymemset(void *s,u8 c,u32 count)

{

u8 *xs = s;

while(count--)*xs++=c;

}//以*s為內存首地址的count個字節中,填充c,即把c寫入到*s為首地址的內存中,個數多少由count值決定


//內存管理初始化

//memx:所屬內存塊,要么SRAMEX==1(外部內存);要么SRAMIN(內部內存)==0

/*

const u32 memtblsize[2]={MEM1_ALLOC_TABLE_SIZE,MEM2_ALLOC_TABLE_SIZE};//內存管理表大小

const u32 memblksize[2]={MEM1_BLOCK_SIZE,MEM2_BLOCK_SIZE};//內存分塊大小

const u32 memsize[2]={MEM1_MAX_SIZE,MEM2_MAX_SIZE};//內存總大小


*/

void mem_init(u8 memx) //如“mem_init(SRAMIN);”表示內部內存塊

{ //memmap,是16位的,mymemset,設置是針對8位的,那么1個16位的數據是不是2個8位組成的啊?!

mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//內存狀態表數據清零

//把u8類型的數據“0”填充到u16類型指針元素memmap[0]中(根據結構體定義“u16 *memmap[2]; ”),memmap[0]=mem1mapbase==1250,

//也就是說“mallco_dev.memmap[memx]”在這里表示1250個內部內存塊用以存儲u16類型指針,

//“memtblsize[memx]”是什么呢?memtblsize[memx]即memtblsize[0]==1250個內部內存管理表,

//而mallco_dev.memmap[memx]是16位的,為了將其全部清零,所以乘以2.

mymemset(mallco_dev.membase[memx], 0,memsize[memx]);//內存池所有數據清零

//memsize[0]==40K字節空間,mallco_dev.membase[memx]==40K字節空間,

mallco_dev.memrdy[memx]=1;//內存管理初始化OK

}

/*


*/

//獲取內存使用率

//memx:所屬內存塊,要么SRAMEX==1(外部內存);要么SRAMIN(內部內存)==0

//返回值:使用率(0~100)

u8 mem_perused(u8 memx)

{

u32 used=0;

u32 i;

for(i=0;i{

if(mallco_dev.memmap[memx][i])used++;

} //mallco_dev.memmap[memx][i]是二維數組。當內存塊初始化后該值為0,

return (used*100)/(memtblsize[memx]); //used*100,乘以100是將小數變成整數

}

//內存分配(內部調用)

//memx:所屬內存塊

//size:要分配的內存大小(字節數)

//返回值:0XFFFFFFFF,代表錯誤;其他,內存偏移地址

//向memx存儲器申請size個字節的連續存儲空間,并將size個字節中首個字節的地址偏移值標注出來,注意是地址偏移值而不是地址。

u32 mem_malloc(u8 memx,u32 size)

{

signed long offset=0;

u16 nmemb;//需要的內存塊數

u16 cmemb=0;//連續空內存塊數

u32 i;

if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先執行初始化

/*

“mallco_dev.init(memx);”是什么意思?mallco_dev.init(memx)是結構體變量mallco_dev的一個成員,本句中就是對結構體成員的引用,即執行

[1] [2] [3]
關鍵字:STM32  原子戰艦板  內存管理 引用地址:基于STM32原子戰艦板內存管理源碼詳解

上一篇:STM32 4-20mA輸出電路
下一篇:基于STM32的電池管理系統觸摸屏設計方案

推薦閱讀

在2018年的博鰲亞洲論壇中,除了主要議程外,最引人注目的熱點是首次引進了人工智能進行會議中的即時口語翻譯。然而,人工智能并沒有出現原先大肆宣稱的“讓即時口譯業界面對即將失業的威脅”,相反的,嚴重失誤的翻譯結果,反倒讓即時口譯從業人員松了口氣,看來這行飯還可以吃很久。《圣經. 舊約. 創世紀》第11章記載,在大洪水退去后,這世界上的人...
??關于STM32F4單片機,使用HAL庫自帶的SPI,驅動TFTLCD屏幕的資料網上好像不太多,正好最近我做了這項工作,把成果分享給大家。我的代碼實現了這些功能:任意坐標畫點,指定首尾坐標畫線,畫方框,指定區域顯示彩圖,顯示16* 16或者12* 12的漢字、ASCII碼,并附帶ASCII碼表與少量的漢字字庫。硬件設計??屏幕選擇:使用了一款低成本十六位彩屏,只要...
協作機器人夾爪制造商OnRobot推出2.5D視覺系統Eyes,適用于各家先進機器手臂,提供外加的深度感知和零件辨識功能。 據報導,機器手臂經常遇到的難題,就是無法拾放大小、形狀或擺放方向不一的物品,通常需要外加夾具、送料盤等其它硬件協助作業,但也因此增加作業成本和復雜度,局限了設備的應用范圍。 OnRobot新推出的2.5D視覺系統Eyes,只要照一張...
數字化轉型已經成為社會經濟共同探討、關注和推動的時代命題。而在宏觀的數字化轉型視野之下,每一項新技術、新解決方案、新商業模式,都需要有一部分企業去率先探索,勇做先鋒。這些先鋒的合力最終會推開一扇大門,迎來數字經濟的真正繁榮。 在數字化升級的確定性未來面前,園區網絡正在成為一個入口和契機。園區網絡是距離企業業務最近、直接承載企業數...

史海拾趣

問答坊 | AI 解惑

帶運算放大器的數字電位器DS1667

DS1667內含兩個集成電路電位器,它可以通過計數法選擇電阻元件的辦法來調整,每個電位器由256個電阻元件組成,在每一個電阻段都有可連接到游標的抽頭。電阻陣列中游標的位置由一個8位寄存器來設定,該寄存器控制游標的輸出端連接在哪一個抽頭上。每 ...…

查看全部問答∨

關于網絡視頻監控的十大應用揭秘

關于網絡視頻監控的十大應用揭秘 IP監控解決方案變革了一些長久以來圍繞著網絡視頻監控的一些錯誤觀念。 什么是IP監控? IP是Internet Protocol(因特網協議)的縮寫,它是通過計算機網絡進行交流的最常用的協議之一。IP監控解決方案就是通 ...…

查看全部問答∨

武漢理工大學-2009初賽題——挺不錯!

本帖最后由 paulhyde 于 2014-9-15 08:58 編輯 在nuedc上看到的! 不錯,當做比賽預測題來做吧!  …

查看全部問答∨

對比一下歐洲某大學的考試題,國內工程師請進!

注:看了國內某電子工程師考試題,覺得國內注重實踐,不知道是否知其然并知其所以然,因此小弟在此首次灌水,希望拋磚引玉,了解一下國內工程師的水平。 1。普通二極管和電力電子用的二極管在結構上有什么區別?提示:psn結構,s層的作用是什么? ...…

查看全部問答∨

P0口與地址譯碼

一個這樣的電路:主要有AT89C51、74LS32(或門)、74LS273!接法大致如下:               P3.6(WR)和P2.7(A15)接74LS32(或門)的出入;            &nb ...…

查看全部問答∨

Quartus 警告中文說明

Error: Quartus II Analysis & Synthesis was unsuccessful. 1 error, 0 warnings   Error: Quartus II Analysis & Synthesis was unsuccessful. 1 error, 0 warnings   Error: Top-level design entity "ctrl" is undef ...…

查看全部問答∨

下面的結構體類型定義中的冒號代表什么?

typedef struct bGPIOx_CRL { unsigned int MODE0 :2; unsigned int CNF0  :2; unsigned int MODE1 :2; unsigned int CNF1  :2; unsigned int MODE2 :2; unsigned int CNF2  :2; unsigned int M ...…

查看全部問答∨

AD7793的高精度溫度測量系統--進展貼

沒有按時間完成整個項目,PCB,硬件電路已完成。 電路圖打包…

查看全部問答∨

貼士:脈沖IV測試有講究

之前,與大家聊了那么多關于脈沖IV測試的內容;今天,為大家總結了進行脈沖IV測試的幾點注意事項:(好好收藏,一生享用!)   1、 確認連接:在連接到設備之后,執行任何脈沖測試前,使用scope-shot進行第一次測試以確認到DUT[1]的連接是正 ...…

查看全部問答∨

為什么我的Application UART驅動無法安裝???

我用的MSP430 G2231,電腦里裝有CCS5.1,但為什么我把launchpad 接電腦usb上后無法安裝驅動啊???哪位大神能幫幫忙???跪謝。。。我試過右鍵點更新驅動,手動找到CCS5.1的安裝文件夾下的驅動,無法安裝,還試過裝TIUSBFET,CP2012之類的,都無效啊 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 贡嘎县| 永济市| 巴林左旗| 广安市| 苏尼特左旗| 历史| 玉门市| 迁西县| 英吉沙县| 吴川市| 韶山市| 宜兰县| 英德市| 辽源市| 宜宾市| 北京市| 浮梁县| 海南省| 中西区| 建阳市| 永川市| 宣威市| 英吉沙县| 西乡县| 宝清县| 武安市| 武山县| 沛县| 宜黄县| 湘阴县| 滕州市| 兴业县| 香格里拉县| 二连浩特市| 化州市| 宝应县| 汨罗市| 宁城县| 吉林省| 棋牌| 乌兰县|