1. 51單片機把數據存入指定的地址或在讀指定地址的數據用c語言怎麼寫
1. 絕對宏:
在程序中,用「#include<absacc.h>」即可使用其中定義的宏來訪問絕對地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具體使用可看一看absacc.h便知,例如:
rval=CBYTE[0x0002];指向程序存貯器的0002h地址
rval=XWORD[0x0002];指向外RAM的0002h地址
2. _at_關鍵字
直接在數據定義後加上_at_ const即可,但是注意:
(1)絕對變數不能被初使化;
(2)bit型函數及變數不能用_at_指定。
例如:
idata struct link list _at_ 0x40;指定list結構從40h開始。
xdata char text[25b] _at_0xE000;指定text數組從0E000H開始
提示:如果外部絕對變數是I/O埠等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。
2. C語言中,如何把數組里的數據寫入文件
buffer
指針,指向將要被寫入的數據
size
項的大小,以位元組為單位
count
項的數目
stream
文件指針
比如
將100個
int
數組寫入
C:\data.datFILE
*pF;int
data[100];
//數組初始化代碼省略
pF=fopen("C:\\data.dat","wb");fwrite(data,
//
要寫入文件的數據指針,這里即數組首地址
sizeof(int),
//每一項數據的大小,是
int
數組,每項的大小可以用
sizeof(int)
來得到,如果是結構體,方法相同
100,
//總項數,一共是100個
int
3. 怎麼把c裡面的數據存入到本地的一個文件中,用什麼函數能給個例子嗎,謝謝
C對文件的操作
1、定義文件: FILE * fp;2、打開文件:
fp=fopen("C:\\f11.txt","r+");//"C:\\f11.txt"為文件地址,r+表示讀操作
if (!fp)
{
printf("file cannot be opened");
exit(1);
}.....................fclose(fp);使用了fopen後必須使用fclose,編程時可以先寫上 #include <stdio.h>//文件操作必須包括的頭文件
#include <stdlib.h>
//#define naxx 1
typedef struct student//結構體
{
int unsigned id;
float score [3];
float rank;
}Student;int main(int argc, char* argv[])
{ Student s,s1;
char xxna[3],xx;
s.id=100;//結構體初始化
s.score[0]=77;
s.score[1]=77;
s.score[2]=77;
s.rank=77;
#ifdef naxx //用fwrite與fread,二進制操作,TXT文檔為亂碼
FILE *xfile;
xfile=fopen("f11.txt","w");
if(!xfile)
{
printf("file cannot be opened");
exit(1);
}
fwrite(&s,sizeof(struct student),1,xfile); //&s結構體地址,sizeof(struct student)結構體的長度,1為有幾個結構體長度,xfile寫入文檔
//while(!feof(xfile))//判斷文件是否處於結束為止,是返回1,不是返回0
// {
fclose(xfile);
//這里是對同一個文件進行操作,固將數據寫入文件後要關閉這個文件指針,不然後面 FILE *Readfile就讀不出來數據 FILE *Readfile;
Readfile=fopen("f11.txt","r");
if(!Readfile)
{
printf("file cannot be opened");
exit(1);
}
fread(&s1,sizeof(struct student),1,xfile);
//printf(xxna);
//printf("\n");
// }
printf("%d,%.1f,%.1f,%.1f",s1.id,s1.score[0],s1.score[1],s1.score[2],s1.rank);
fclose(Readfile); //用完文件不要忘記關閉
while(1)
{
scanf("%c",&xx);
return 1;
}
#endif
//一下是用fscanf與fprintf進行文檔操作 ,TXT可以看到數據
FILE * fp;
fp=fopen("C:\\f11.txt","r+");
if (!fp)
{
printf("file cannot be opened");
exit(1);
}
// fscanf(fp,"%03d%f%f%f",&s.id,&s.score[0],&s.score[1],&s.score[2]);
//fprintf(stdout,"%g",s.score[2]);
FILE *fw;
fw=fopen("C:\\f11a.txt","w+");
if (!fw)
{
printf("file cannot be opened");
exit(1);
}
while(!feof(fp))//文件每讀取一次指針增加,直到文件末尾,到文件結束時,feof(fp)返回1
{
//fscanf(fp,"%03d%f%f%f",&s.id,&s.score[0],&s.score[1],&s.score[2]);
fscanf(fp,"%03d%f%f%f",&s.id,&s.score[0],&s.score[1],&s.score[2]);//fp文件,後面為讀取的數有哪些,放到什麼地方//讀文件時,"%03d%f%f%f"為挨個讀取,"%03d,%f,%f,%f"以逗號分隔讀取,如果文件中數據為100,20,30,40。用"%03d%f%f%f"將讀不出來文件。也就是說寫入文件的格式要和讀文件的格式一致。
s.rank=(s.score[0]+s.score[1]+s.score[2])/3;
fprintf(fw,"%03d\t%.2f\t%.2f\t%.2f\t%.2f\n",s.id,s.score[0],s.score[1],s.score[2],s.rank);//輸入文件
//fwrite(&s,sizeof(s),1,fw);
}
// s.rank=(s.score[0]+s.score[1]+s.score[2])/3;
//fprintf(fw,"%03d,%f,%f,%f,%f",&s.id,&s.score[0],&s.score[1],&s.score[2],s.rank);
fclose (fp);
fclose(fw);
return 0; }
4. C語言中怎麼把一個數字存放在內存的指定地址上 內存地址是用malloc分配的
C語言:
int*
ptr
=
(int*)malloc(sizeof(int));
//分配內存
*ptr
=
100;
//對ptr指向的內存賦值100
free(ptr);
//用完之後釋放
C++
int*
ptr
=
new
int;
*ptr
=
100;
delete
ptr;
Win32程序可以調用Windows
API:
int*
ptr
=
(int*)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof(int));
*ptr
=
100;
HeapFree(ptr);
5. 如何把c語言中輸出的數據保存到一個文件夾中
1、首先,可以先查看整體代碼,了解保存整體框架。
6. 請問用c語言怎麼實現把一個數放到指定的地址里就像匯編語言那樣
搞嵌入式開發的人有兩類:一類是學電子工程、通信工程等偏硬體專業出身的人,他們主要是搞硬體設計,有時要開發一些與硬體關系最密切的最底層軟體,如BootLoader、 Board Support Package(像PC的BIOS一樣,往下驅動硬體,往上支持操作系統),最初級的硬體驅動程序等。他們的優勢是對硬體原理非常清楚,不足是他們更擅長定義各種硬體介面,但對復雜軟體系統往往力不從心(例如嵌入式操作系統原理和復雜應用軟體等)。另一類是學軟體、計算機專業出身的人,主要從事嵌入式操作系統和應用軟體的開發。如果我們學軟體的人對硬體原理和介面有較好的掌握,我們完全也可寫BSP和硬體驅動程序。嵌入式硬體設計完後,各種功能就全靠軟體來實現了,嵌入式設備的增值很大程度上取決於嵌入式軟體,這佔了嵌入式系統的最主要工作(目前有很多公司將硬體設計包給了專門的硬體公司,稍復雜的硬體都交給台灣或國外公司設計,國內的硬體設計力量很弱,很多嵌入式公司自己只負責開發軟體,因為公司都知道,嵌入式產品的差異很大程度在軟體上,在軟體方面是最有"花頭"可做的),所以我們搞軟體的人完全不用擔心我們在嵌入式市場上的用武之地,越是智能設備越是復雜系統,軟體越起關鍵作用,而且這是目前的趨勢。
從事嵌入式軟體開發的好處是:
(1) 目前國內外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟體(例如操作系統級、驅動程序級軟體),對軟體專業水平要求較高(嵌入式系統對軟體設計的時間和空間效率要求較高),而且必須懂得硬體的工作原理,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬體技術出現時間不長或正在出現(如ARM處理器、嵌入式操作系統、MPEG技術、無線通信協議等),掌握這些新技術的人當然很難找。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發板和軟體,另外需要有經驗的人進行指導開發流程。
(2) 與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。搞企業應用軟體的IT企業,這個用戶的系統搞完了,又得去搞下一個用戶的,而且每個用戶的需求和完成時間都得按客戶要求改變,往往疲於奔命,重復勞動。相比而言,搞嵌入式系統的公司,都有自己的產品計劃,按自己的節奏行事。所開發的產品通常是通用的,不會因客戶的不同而修改。一個產品型號開發完了,往往有較長一段空閑時間(或只是對軟體進行一些小修補),有時間進行充電和休整。另外,從事嵌入式軟體的每個人工作范圍相對狹窄,所涉及的專業技術范圍就是那些(ARM、RTOS、MPEG、802.11等),時間長了這些東西會越搞越有經驗,賣賣老本,幾句指導也夠讓那些初入道者琢磨半年的。若搞應用軟體,可能下一個客戶要換成一個完全不同的軟體開發平台,那就苦了。
(3) 哪天若想創業,搞自已的產品,那麼嵌入式是一個不錯的主意,這可不像應用軟體那樣容易被盜版。我們這屆有個同學自己有點此類小生意,具體做什麼的沒細問, 他每月要進貨幾千片8位單片機,現在自己已經有車有房了。還有現在開發的飯館用的點菜PDA(WinCE平台,可無線連網和上網),據說銷路不錯,飯館點點PDA讓客戶點菜,多顯派頭檔次。這些PDA的硬體設計一般都是請別的公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
從事嵌入式軟體開發的缺點是:
(1) 入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特別是操作系統級軟體功底不深,則可能不適於此行。
(2) 這方面的企業數量要遠少於企業計算類企業。特別是從事嵌入式的小企業數量較多(小企業要搞自己的產品創業),知名大公司較少(搞嵌入式的大公司主要有 Intel、Motorola、TI、Philip、Samsung、Sony、Futjtum、Bell-Alcatel、意法半導體、 Microtek、研華、華為、中興通信、上廣電等製造類企業)。這些企業的習慣思維方式是到電子、通信等偏硬專業找人。
(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
同學們若學習嵌入式,顯然應偏重於嵌入式軟體,特別是嵌入式操作系統方面,應是我們的強項。對於搞嵌入式軟體的人,最重要的技術顯然是(實際上很多公司的招聘廣告上就是這樣寫的):
(1) 掌握主流嵌入式微處理器的結構與原理
(2) 必須掌握一個嵌入式操作系統
(3) 必須熟悉嵌入式軟體開發流程並至少做過一個嵌入式軟體項目。
在嵌入式軟體方面最重要的課程包括:
(1) 嵌入式微處理器結構與應用:這是一門嵌入式硬體基礎課程,我們說過,嵌入式是軟硬體結合的技術,搞嵌入式軟體的人應對ARM處理器工作原理和介面技術有充分了解,包括ARM的匯編指令系統。若不了解處理器原理,怎麼能控制硬體工作,怎麼能寫出節省內存又運行高速的最優代碼(嵌入式軟體設計特別講究時空效率),怎麼能寫出驅動程序(驅動程序都是與硬體打交道的)?很多公司招聘嵌入式軟體人員時都要求熟悉ARM處理器,將來若同學到公司中從事嵌入式軟體開發,公司都會給你一本該設備的硬體規格說明書 (xxx Specification),你必須能看懂其中的內存分布和埠使用等最基本的說明(就像x86匯編一樣),否則怎麼設計軟體。有些同學覺得嵌入式處理器課程較枯燥,這主要是硬體課程都較抽象的原因。還有同學對ARM匯編不感興趣,以為嵌入式開發用C語言就足夠了。其實不應僅是將匯編語言當成一個程序設計語言,學匯編主要是為了掌握處理器工作原理的。一個不熟悉匯編語言的人,怎麼能在該處理器寫出最優的C語言代碼。在嵌入式開發的一些關鍵部分,有時還必須寫匯編,如Bootloader等(可能還包括BSP)。特別是在對速度有極高要求的場合(如DSP處理器的高速圖像採集和圖像解壓縮),目前還會用到匯編寫程序的,盡管用到的機會相對C要小得多。當你在一個嵌入式公司工作時,在查看描述原理的手冊時,可能很多都是用匯編描述的,這是因為很多硬體設計人員只會寫或者喜歡用匯編描述,此時你就必須看懂匯編程序,否則軟硬體人員可能就無法交流。很多嵌入式職位招聘時都要求熟悉匯編。
(2) 嵌入式操作系統類課程
除了WinCE的實時性稍差外,大多數嵌入式操作系統的實時性都很強,所以也可稱為實時操作系統Real TimeOperating System。從事嵌入式的人至少須掌握一個嵌入式操作系統(當然掌握兩個更好),這在嵌入式的所有技術中是最為關鍵的了。
目前最重要的RTOS主要包括:第一類、傳統的經典RTOS:最主要的便是Vxworks操作系統,以及其Tornado開發平台。Vxworks因出現稍早,實時性很強(據說可在1ms內響應外部事件請求),並且內核可極微(據說最小可8K),可靠性較高等,所以在北美,Vxworks占據了嵌入式系統的多半疆山。特別是在通信設備等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的很多概念和技術都和Linux很類似,主要是C語言開發。像Bell- alcatel、Lucent、華為等通信企業在開發產品時,Vxworks用得很多。但Vxworks因價格很高,所以一些小公司或小產品中往往用不起。目前很多公司都在往嵌入式Linux轉(聽說華為目前正在這樣轉)。但無論如何,Vxworks在一段長時間內仍是不可動搖的。與Vxworks類似的稍有名的實時操作系統還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操作系統:Linux的前途除作為伺服器操作系統外,最成功的便是在嵌入式領域的應用,原因當然是免費、開源、支持軟體多、呼擁者眾,這樣嵌入式產品成本會低。Linux本身不是一個為嵌入式設計的操作系統,不是微內核的,並且實時性不強。
目前應用在嵌入式領域的Linux系統主要有兩類:一類是專為嵌入式設計的已被裁減過的Linux系統,最常用的是uClinux(不帶MMU功能),目前占較大應用份額,可在ARM7上跑;另一類是跑在 ARM 9上的,一般是將Linux 2.4.18內核移植在其上,可使用更多的Linux功能(當然uClinux更可跑在ARM 9上)。很多人預測,嵌入式Linux預計將占嵌入式操作系統的50%以上份額,非常重要。缺點是熟悉Linux的人太少,開發難度稍大。另外,目前我們能發現很多教材和很多大學都以ucOS/II為教學用實時操作系統,這主要是由於ucOS/II較簡單,且開源,非常適合入門者學習實時操作系統原理,但由於ucOS/II功能有限,實用用得較少。況且熟悉了Linux開發,不僅在嵌入式領域有用,對開發Linux應用軟體,對加深操作系統的認識也有幫助,可謂一舉多得。據我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在自己的處理器上大搞Linux 開發。目前在嵌入式Linux領域,以下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發版上;二是能寫Linux驅動程序的人; 三是熟悉Linux 內核裁減和優化的人。不過LINUX有一個硬傷,就是沒有WINDOWS那樣的友好方便美觀的交互界面,不然微軟帝國早就守不住了。
第三類、 Windows CE嵌入式操作系統:Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來只有幾年時間,但目前已佔據了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(據說有一家賣工控機的公司板子賣得太好,以至來不及為客戶裁減WinCE)。WinCE目前主要為4.2版(.NET),開發平台主要為WinCE Platform Builder,有時也用EVC環境開發一些較上層的應用,由於WinCE開發都是大家熟悉的VC++環境,所以我院學過Windows程序設計課程的同學都不會有多大難度,這也是WinCE容易被人們接受的原因,開發環境方便快速,微軟的強大技術支持,WinCE開發難度遠低於嵌入式Linux。對於急於完成,不想拿嵌入式Linux冒險的開發場合,WinCE是最合適了(找嵌入式Linux的人可沒那麼好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不同的側重點 ,WinCE還有兩個特殊版本,一個是MS PocketPC操作系統專用於PDA上(掌上電腦),另一個是MS SmartPhone操作系統用於智能手機上(帶PDA功能的手機),兩者也都屬於WinCE平台。在PDA和手機市場上,除WinCE外,著名的PDA 嵌入式操作系統還有Palm OS(因出現很早,很有名)、Symbian等,但在WinCE的強勁沖擊下,Palm和Symbian來日還能有多長?同學學過VC++後再學 WinCE,非常方便自然,通過學習WinCE同樣也可了解嵌入式軟體的一般開發過程,對Linux有懼怕心理的同學也很合適。很顯然,嵌入式Linux 永遠不可能替代WinCE,而且將來誰占份額大還很難講,畢竟很多人更願意接受MS的平台,就像各國政府都在大力推LINUX已好長時間,但你能看到幾個在PC機上真正使用LINUX的用戶?據我觀察,目前在嵌入式平台上,LINUX是叫得最響,但還是WinCE實際用得更多。嵌入式LINUX可能更多地是一些有長遠產品計劃的公司,為降低成本而進行長遠考慮。WinCE和多媒體(如MPEG技術)是微軟亞洲工程院目前做得較多的項目領域之一,現在社會很需要精通WinCE的人。現在有WINCE的智能手機,金山詞霸、WORD、EXCEL、REGEDIT等居然都有 smartphone版的,PC上的MP3、DOC等居然在download時都可被自動轉換成smartphone格式,很爽的。完全可用 Windows CE自己開發一些需要的程序download到自己的手機上。現在市面銷售PDA智能手機火爆,MS總是財源滾滾。
總結關於嵌入式操作系統類課程,若你覺得自己功底較深且能鑽研下去,則可去學嵌入式Linux;若你覺得自己VC++功底較好且想短平快地學嵌入式開發,自學WINCE是非常好的選擇。
(3) 嵌入式開發的相關領域
搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關領域包括:
A、數字圖像壓縮技術:這是嵌入式最重要最熱門的應用領域之一,主要是應掌握MPEG編解碼演算法和技術,如DVD、MP3、PDA、高精電視、機頂盒等都涉及MPEG高速解碼問題。
B、通信協議及編程技術:這包括傳統的TCP/IP協議和熱門的無線通信協議。首先,大多數嵌入式設備都要連入區域網或Internet,所以首先應掌握 TCP/IP協議及其編程,這是需首要掌握的基本技術;其次,無線通信是目前的大趨勢,所以掌握無線通信協議及編程也是是很重要的。無線通信協議包括無線區域網通信協議802.11系列,Bluetooth,以及移動通信(如GPRS、GSM、CDMA等)。
C、網路與信息安全技術:如加密技術、數字證書CA以及各種網路安全設備,包括硬體防火牆、入侵檢測IDS、還有防毒牆、IPS等,中國在這方面還是沒有自己優勢的,我們陳院長好象正在往這方面發展。
D、 DSP技術:DSP是Digital Signal Process數字信號處理的意思,DSP處理器通過硬體實現數字信號處理演算法,如高速數據採集、壓縮、解壓縮、通信等。數字信號處理是電子、通信等硬體專業的課程,對於搞軟體的人若能了解一下最好。目前DSP人才較缺。如果有信號與系統、數字信號處理等課程基礎,對於學習MPEG編解碼原理會有很大幫助。
(4)嵌入式開發的相關硬體基礎
對於軟體工程專業的學生,從事嵌入式軟體開發,像數字電路、計算機組成原理、嵌入式微處理器結構等硬體課程是較重要的。另外,匯編語言、C/C++ 數據結構演算法、特別是操作系統等軟體基礎課也是十分重要的。我們的主要目地是能看懂硬體工作原理,但重點應是在嵌入式軟體,特別操作系統級軟體,那將是我們的優勢。我們的研究生里有些是學電子、通信類專業過來的,有較好的模擬電路和單片機基礎,學嵌入式非常合適。
嵌入式本身就是從單片機發展過來的,只是單片機不帶OS,而現在很多嵌入式應用越來越復雜,以至不得不引入嵌入式操作系統。另外,為追求更高速的信號處理速度,現在在一些速度要求較高場合,有不少公司是將一些DSP演算法,如MPEG壓縮解壓縮演算法等用硬體來實現,這就涉及到HDL數字電路設計技術及其 FPGA/IP核實現技術,這方面的人目前市場上也很缺。
關於嵌入式領域內的相關專業問題,建議LZ還可以到華清遠見的網站上了解一下,也可以具體電話咨詢一下華清遠見的專業老師,另外,各大書店及圖書館也有華清遠見出版的暢銷嵌入式專業圖書,了解一下相信對你有幫助。
希望我的回答對你有幫助。
另外,虛機團上產品團購,超級便宜
7. c語言怎麼將數據寫入文件
利用VC軟體通過代碼書寫就可以將數據寫入文件。
8. C語言怎麼寫數據到文件指定位置(覆蓋原有數據)
舉個例子吧 我在網吧沒發給你打代碼
一個文本裡面存著 "123456"
一句話 你想把它從3以後改成"abc" 就是"123abc"
首先要讀入這個文件然後把123存到一個數組中然後將123與abc相連接(這個你總會了吧)
最後將這個字元串在寫出 就搞定了
9. c語言如何用文件存儲數據
具體操作步驟如下:
1、首先,創建一個新文件夾,在該文件夾中創建一個文檔,如下圖所示,然後進入下一步。