1. 一段用於嵌入式開發平台的C語言程序,效果不盡人意,請求大神們修改,多謝!!!修改後若有效果則追加分
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#defineADC"/dev/adc/0raw"
intadc_fd=-1;
floata1,a2,a0;
intthreadloop=1;
intgetADC(intchannel);
staticvoid*pe()
{
while(threadloop)
{
a1=getADC(1)*3.3/1024;
a2=getADC(2)*3.3/1024;
a0=getADC(0)*3.3/1024;
printf("d0=%f,d1=%f,d2=%f ",a0,a1,a2);
}
return0;
}
intmain()
{
intd;
pthread_tp_m;
void*retval;
if((adc_fd=open(ADC,O_RDWR))<0)
{
printf("devopenerror!");
return0;
}
threadloop=1;
pthread_create(&p_m,NULL,pe,0);
while(1)
{
d=getchar();
if(d=='q'||d=='Q')break;
}
threadloop=0;
pthread_join(p_m,&retval);
close(adc_fd);
return0;
}
intgetADC(intchannel)
{
intd=(channel<<16)|0xff;
write(adc_fd,&d,sizeof(d));
read(adc_fd,&d,sizeof(d));
returnd;
}
2. 如何自學Linux下C語言嵌入式編程詳細點謝謝!書籍及開發板用什麼的最好
開發板用友善之臂的吧
mini2440 連3.5寸屏500塊錢的樣子
有好幾張DVD學習光碟
這款口碑比較高
嵌入式Linux操作系統學習規劃
ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟體開發目標:
(1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)
(2) 必須掌握一個嵌入式操作系統 (初步定為uclinux或linux,版本待定)
(3) 必須熟悉嵌入式軟體開發流程並至少做一個嵌入式軟體項目。
從事嵌入式軟體開發的好處是:
(1)目前國內外這方面的人都很稀缺。這一領域入門門檻較高,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,大多數人無條件接觸。
(2)與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。
(3)哪天若想創業,搞自已的產品,嵌入式不像應用軟體那樣容易被盜版。硬體設計一般都是請其它公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
(4)興趣所在,這是最主要的。
從事嵌入式軟體開發的缺點是:
(1)入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特別是操作系統級軟體功底不深,則可能不適於此行。
(2)這方面的企業數量要遠少於企業計算類企業。
(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
(4)平台依託強,換平台比較辛苦。
興趣的由來:
1、成功觀念不同,不虛度此生,就是我的成功。
2、喜歡思考,挑戰邏輯思維。
3、喜歡C
C是一種能發揮思維極限的語言。關於C的精神的一些方面可以被概述成短句如下:
相信程序員。
不要阻止程序員做那些需要去做的。
保持語言短小精幹。
一種方法做一個操作。
使得它運行的夠快,盡管它並不能保證將是可移植的。
4、喜歡底層開發,討厭vb類開發工具(並不是說vb不好)。
5、發展前景好,適合創業,不想自己要死了的時候還是一個工程師。
方法步驟:
1、基礎知識:
目的:能看懂硬體工作原理,但重點在嵌入式軟體,特別是操作系統級軟體,那將是我的優勢。
科目:數字電路、計算機組成原理、嵌入式微處理器結構。
匯編語言、C/C++、編譯原理、離散數學。
數據結構和演算法、操作系統、軟體工程、網路、資料庫。
方法:雖科目眾多,但都是較簡單的基礎,且大部分已掌握。不一定全學,可根據需要選修。
主攻書籍:the c++ programming language(一直沒時間讀)、數據結構-C2。
2、學習linux:
目的:深入掌握linux系統。
方法:使用linux—〉linxu系統編程開發—〉驅動開發和分析linux內核。先看深,那主講原理。看幾遍後,看情景分析,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學習。最後深入代碼。
主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。
3、學習嵌入式linux:
目的:掌握嵌入式處理器其及系統。
方法:(1)嵌入式微處理器結構與應用:直接arm原理及匯編即可,不要重復x86。
(2)嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而後深入研究uClinux。
(3)必須有塊開發板(arm9以上),有條件可參加培訓(進步快,能認識些朋友)。
主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm匯編指令等。
4、深入學習:
A、數字圖像壓縮技術:主要是應掌握MPEG、mp3等編解碼演算法和技術。
B、通信協議及編程技術:TCP/IP協議、802.11,Bluetooth,GPRS、GSM、CDMA等。
2010-8-21 16:46 回復
122.90.173.* 2樓
C、網路與信息安全技術:如加密技術,數字證書CA等。
D、DSP技術:Digital Signal Process,DSP處理器通過硬體實現數字信號處理演算法。
說明:太多細節未說明,可根據實際情況調整。重點在於1、3,不必完全按照順序作。對於學習c++,理由是c++不只是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對於linux內核,學習編程,讀一些優秀代碼也是有必要的。
注意: 要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成為合格的程序員,前提是必須熟練至少一種編程語言,並具有良好的邏輯思維。一定要理論結合實踐。
不要一味鑽研技術,雖然擠出時間是很難做到的,但還是要留點餘地去完善其他的愛好,比如宇宙,素描、機械、管理,心理學、游戲、科幻電影。還有一些不願意做但必須要做的!
技術是通過編程編程在編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機會來了在創業(不要相信有奇跡發生,盲目創業很難成功,即便成功了發展空間也不一定很大)。
嵌入式書籍推薦
Linux基礎
1、《Linux與Unix Shell 編程指南》
C語言基礎
1、《C Primer Plus,5th Edition》【美】Stephen Prata著
2、《The C Programming Language, 2nd Edition》【美】Brian W. Kernighan David M. Rithie(K & R)著
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux應用程序開發詳解》
Linux內核
1、《深入理解Linux內核》(第三版)
2、《Linux內核源代碼情景分析》毛德操 胡希明著
研發方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP詳解》
3、《Linux內核編程》
4、《Linux設備驅動開發》(LDD)
5、《Linux高級程序設計》 楊宗德著
硬體基礎
1、《ARM體系結構與編程》杜春雷著
2、S3C2410 Datasheet
英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統――體系結構、編程與設計》
2、《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明著
3、《Building Embedded Linux Systems》
4、《嵌入式ARM系統原理與實例開發》 楊宗德著
理論基礎
1、《演算法導論》
2、《數據結構(C語言版)》
3、《計算機組織與體系結構?性能分析》
4、《深入理解計算機系統》【美】Randal E. Bryant David O''Hallaron著
5、《操作系統:精髓與設計原理》
6、《編譯原理》
7、《數據通信與計算機網路》
8、《數據壓縮原理與應用》
C語言書籍推薦
1. The C programming language 《C程序設計語言》
2. Pointers on C 《C和指針》
3. C traps and pitfalls 《C陷阱與缺陷》
4. Expert C Lanuage 《專家C編程》
5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs
《編程精粹--Microsoft 編寫優質無錯C程序秘訣》
6. Programming Embedded Systems in C and C++ 《嵌入式系統編程》
7.《C語言嵌入式系統編程修煉》
8.《高質量C++/C編程指南》林銳
盡可能多的編碼,要學好C,不能只注重C本身。演算法,架構方式等都很重要。
這里很多書其實是推薦而已,不必太在意,關鍵還是基礎,才是重中之重!!!
3. 問一段嵌入式方面位操作C語言代碼
提示你一下,
宏要一層一層替換,##表示連接前後兩個字元串:
SET_BITS(i,
TEST,
3)經過一層解釋以後是:
((i)=((i)&~(BIT_MASK(TEST)))|
(((3)<<(
bsTEST))&(BIT_MASK(TEST))))
再看BIT_MASK(TEST),代換後:
(((1U<<(bwTEST))-1)<<
(bsTEST)
==>
((1<<4)-1)<<8
綜合前兩步:
i
=
(i&~(((1<<4)-1)<<8))
|
((3<<8)&((1<<4)-1)<<8)
4. 如何在Windows XP下進行嵌入式開發(C語言)
你只要按個TC在"C"盤里
5. 該怎麼學習嵌入式啊
你先知道嵌入式是什麼,嵌入式的方向也挺多的,比如工業控制(常用:單片機、PLC),手機周邊(常用:ARM、OMAP),數字信號處理(常用:DSP、FPGA)等。一些嵌入式的基礎,C語言程序設計,單片機原理、數字電路、模擬電路等。單片機入門比較簡單,滿足一般的工業控制差不多了,學學C語言,買個單片機的開發板(8051、AVR、STM32)學個半年到一年,也能小有成績,工作了月薪4K-6K吧,就現在這物價。現在很火的手機周邊開發也不錯,不過最好報個培訓班,這個東西比較專,就是針對某個平台,如IPHONE或者ANDROID。如果成為一個嵌入式的達人,就比較難了,數字電路、模擬電路、數字信號處理都要駕輕就熟,知識都是相通的,像我的老闆是一個50左右的技術牛人,從剛有單片機時,就開始搞8051,用匯編寫數字信號處理的定點LIB,數字信號處理的很多演算法都門清,DSP玩的很轉,公司剛接的案子是一個billion級的,用到無線電、衛星、DSP、VPN、工業PC,老闆忙著給我們這些小崔講演算法,講架構。嵌入式還是挺有趣的
6. 嵌入式C語言
Linux C編程一站式學習這本書,我感覺不錯,還是免費的,GPL的,感覺講得蠻詳細的,而且比較細節...
本書有以下特點:
不是孤立地講C語言,而是和編譯原理、操作系統、計算機體系結構結合起來講。或者說,本書的內容只是以C語言為載體,真正講的是計算機的原理和程序的原理。
強調基本概念和基本原理,在編排順序上非常重視概念之間的依賴關系,每次引入一個新的概念,只依賴於前面章節已經講過的概念,而絕不會依賴後面章節要講的概念。有些地方為了敘述得完整,也會引用後面要講的內容,比如說「有關XX我們到XX章再仔細講解」,凡是這種引用都不是必要的依賴,可以當它不存在,只管繼續往下看就行了。
盡量做到每個知識點直到要用的時候才引入。過早引入一個知識點,講完了又不用它,讀者很快就會遺忘,這是不符合認知規律的。
如果僅僅是應用,那麼在 LINUX下還是在windows 編程相差不是特別大的,系統都會提供api讓你調用...但windows下IDE做得相對較好些,linux 下要自己寫makefile組織工程,不過現在應該也有IDE的一些工具提供應用編程的吧,不過在linux下,makefile 很重要,還是有必要了解的..
至於嵌入式,主要是可移動,是為某個專門功能開發的,記得就是計算機的簡化版..
7. 關於C語言手機嵌入式開發
能不能蒙的過要看你的基礎了,如果你以前做過相關的嵌入式開發,那麼你只要看一下手機開發的相關知識,面試時就用你以前的開發經驗,如開發細節,開發過程中碰到的問題移植一下也可以有模有樣的了
如果你以前沒有相關的嵌入式開發經驗,那就算了,絕對蒙不過去!
如果他問到你相關問題,你只能說輔助完成了這一項目,了解了手機嵌入式開發的大致流程,然後你就看一下相關開發書籍,至少能過講一點,不會太丟臉
8. surf演算法C語言編寫,要做嵌入式開發,不要C++和基於OPENCV的
surf借鑒了sift中簡化近似的思想,將DOH中的高斯二階微分模板進行了近似簡化,使得模板對圖像的濾波只需要進行幾個簡單的加減法運算,並且,這種運算與濾波模板的尺寸有關。實驗證明surf演算法較sift演算法在運算速度上要快3倍左右。
1積分圖像
surf演算法中要用到積分圖像的概念。藉助積分圖像,圖像與高斯二階微分模板的濾波轉化為對積分圖像的加減運算。積分圖像(IntegralImage)的概念是由viola和Jones提出來的,而將類似積分圖像用於盒子濾波是由Simard等人提出。
積分圖像中任意一點(i,j)的值為ii(i,j)為原圖像左上角到任意點(i,j)相應的對角線區域灰度值的總和即:
公式中,I(x`,y`)表示原圖像中點(i`,j`)的灰度值,ii(x,y)可以由下面兩公式迭代計算得到:
公式中,S(x,y)表示一列的積分,且S(i,-1)=0,ii(-1,j)=0.求積分圖像,只需對原圖像的所有像素素進行一遍掃描。下面的代碼為c++語言的實現
pOutImage[0][0]=pInImage[0][0];
for(intx=1,x<nWidth;i++)
{
pOutImage[x][0]=pInImage[x-1][0]+pInImage[x][0];
}
for(inty=1;y<nHeight;y++)
{
intnSum=0;
for(intx=0;x<nWidth;x++)
{
nSum=pInImage[x][y];
pOutImage[x][y]=pInImage[x][y-1]+nSum;
}
}
如圖表示,在求取窗口w內的像元灰度和時,不管窗口W的大小如何,均可利用積分圖像的4個對應點(i1,j1)(i2,j2)(i3,j3)(i4,j4)的值計算的到。也就是說,求取窗口W內的像元灰度和與窗口的尺寸是無關的。窗口W內的像元的灰度和為
Sum(W)=ii(i4,j4)-ii(i2,j2)-ii(i3,j3)+ii(i1,j1)
下面看以截圖,相信都可以看懂
關於矩形區域內像素點的求和應該是一種簡單重復性運算,採用這種思路總體上提高了效率。為什麼這么說呢?假設一幅圖片共有n個像素點,則計算n個位置的積分圖總共的加法運算有n-1次(注意:可不是次哦,要充分利用遞推思想),將這些結果保存在一個跟原圖對應的矩陣M中。當需要計算圖像中某個矩形區域內的所有像素之和是直接像查表一樣,調出A,B,C,D四點的積分圖值,簡單的加減法(注意只需要三次哦)即可得到結果。反之,如果採用naive的方式直接在原圖像中的某個矩形區域內求和,你想想,總共可能的矩形組合有多少?!!且對於一幅圖像n那是相當大啊,所以2^n
那可是天文數字,而且這裡面絕大部分的矩形有重疊,重疊意味著什麼?在算求和的時候有重復性的工作,其實我們是可以有效的利用已經計算過的信息的。這就是積分圖法的內在思想:它實際上是先計算n個互不重疊(專業點說是不相交)的矩形區域內的像素點求和,充分利用這些值(已有值)計算未知值,有點類似遞推的味道...這就完全避免了重復求和運算。
這樣就可以進行2種運算:
(1)任意矩形區域內像素積分。由圖像的積分圖可方便快速地計算圖像中任意矩形內所有像素灰度積分。如下圖2.3所示,點1的積分圖像ii1的值為(其中Sum為求和):
ii1=Sum(A)
同理,點2、點3、點4的積分圖像分別為:
ii2=Sum(A)+Sum(B);ii3=Sum(A)+Sum(C);ii4=Sum(A)+Sum(B)+Sum(C)+Sum(D);
矩形區域D內的所有像素灰度積分可由矩形端點的積分圖像值得到:
Sum(D)=ii1+ii4-(ii2+ii3)(1)
(2)特徵值計算
矩形特徵的特徵值是兩個不同的矩形區域像素和之差,由(1)式可以計算任意矩形特徵的特徵值,下面以圖2.1中特徵原型A為例說明特徵值的計算。
如圖2.4所示,該特徵原型的特徵值定義為:
Sum(A)-Sum(B)
根據(1)式則有:Sum(A)=ii4+ii1-(ii2+ii3);Sum(B)=ii6+ii3-(ii4+ii5);
所以此類特徵原型的特徵值為:
(ii4-ii3)-(ii2-ii1)+(ii4-ii3)-(ii6-ii5)
另示:運用積分圖可以快速計算給定的矩形之所有象素值之和Sum(r)。假設r=(x,y,w,h),那麼此矩形內部所有元素之和等價於下面積分圖中下面這個式子:
Sum(r)=ii(x+w,y+h)+ii(x-1,y-1)-ii(x+w,y-1)-ii(x-1,y+h)
由此可見,矩形特徵特徵值計算只與此特徵端點的積分圖有關,而與圖像坐標值無關。對於同一類型的矩形特徵,不管特徵的尺度和位置如何,特徵值的計算所耗費的時間都是常量,而且都只是簡單的加減運算。其它類型的特徵值計算方法類似。
9. 如何用C語言開發DSP嵌入式系統
ccs就是可以實現用C語言開發TI的dsp,可以在CCS的軟體開發環境下開發。