目前找不到C51(我用的是STC8051)的程序入口函數(shù)編輯方法。
創(chuàng)新互聯(lián)網(wǎng)站建設公司是一家服務多年做網(wǎng)站建設策劃設計制作的公司,為廣大用戶提供了成都網(wǎng)站建設、成都網(wǎng)站制作,成都網(wǎng)站設計,1元廣告,成都做網(wǎng)站選創(chuàng)新互聯(lián),貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務歡迎致電。
STM32的程序入口函數(shù)編輯方法
STM32的編輯方法就比較簡單,首先新建一個工程,不導入任何運行時環(huán)境(Run-time Environment),然后導入Startup_stm32xxxx_xx.s(ASM起動文件),調(diào)試工程選項中C/C++選項卡里包含需要導入的庫文件。
隨后找到151行 IMPORT? __main
把main改為自己想要設置的入口函數(shù)就行了。
其實很多人就由于自己不會自定義C語言工程的問題,而又想先自己動手寫代碼實現(xiàn)“到手即用”,所以簡單聽老師對于程序的針對性講解,默認按照main寫入口函數(shù),其實main這個名字就是商業(yè)化的結(jié)果,一些知名廠商是給你留下一個編輯空間改入口函數(shù)的,可惜大家都不知道,而且Keil5出了那么多年都不搞官方漢化,唉,虧死了很多英語詞匯不足的業(yè)余程序愛好者。
然后很多人第一印象以為譚浩強是C語言之父,草,不就是早期寫《C程序設計》然后被各個大學紛紛膜拜然后按圖索驥的作者嘛,最忌諱應試教育搞出了填鴨式教育法讓大家失去自主探索的機會。
函數(shù)定義好以后,要被其它函數(shù)調(diào)用了才能被執(zhí)行。C
語言的函數(shù)是能相互調(diào)用的,
但在調(diào)用函數(shù)前,必須對函數(shù)的類型進行說明,就算是標準庫函數(shù)也不例外。標準庫函數(shù)的
說明會被按功能分別寫在不一樣的頭文件中,使用時只要在文件最前面用#include
預處理語
句引入相應的頭文件。如前面一直有使用的
printf
函數(shù)說明就是放在文件名為
stdio.h
的
頭文件中。調(diào)用就是指一個函數(shù)體中引用另一個已定義的函數(shù)來實現(xiàn)所需要的功能,這個時候函
數(shù)體稱為主調(diào)用函數(shù),函數(shù)體中所引用的函數(shù)稱為被調(diào)用函數(shù)。一個函數(shù)體中能調(diào)用數(shù)個
其它的函數(shù),這些被調(diào)用的函數(shù)同樣也能調(diào)用其它函數(shù),也能嵌套調(diào)用。筆者本人認為
主函數(shù)只是相對于被調(diào)用函數(shù)而言。在
c51
語言中有一個函數(shù)是不能被其它函數(shù)所調(diào)用的,
它就是
main
主函數(shù)。調(diào)用函數(shù)的一般形式如下:
函數(shù)名
(實際參數(shù)表)
“函數(shù)名”就是指被調(diào)用的函數(shù)。實際參數(shù)表能為零或多個參數(shù),多個參數(shù)時要用逗
號隔開,每個參數(shù)的類型、位置應與函數(shù)定義時所的形式參數(shù)一一對應,它的作用就是把參
數(shù)傳到被調(diào)用函數(shù)中的形式參數(shù),如果類型不對應就會產(chǎn)生一些錯誤。調(diào)用的函數(shù)是無參函
數(shù)時不寫參數(shù),但不能省后面的括號。
在以前的一些例子我們也能看不一樣的調(diào)用方式:
1.函數(shù)語句
如
printf
("Hello
World!n");
這是在
我們的第一個程序中出現(xiàn)的,它以
"Hello
World!n"為參數(shù)調(diào)用
printf
這個庫函數(shù)。在這里函數(shù)調(diào)用被看作了一條語句。
2.函數(shù)參數(shù)
“函數(shù)參數(shù)”這種方式是指被調(diào)用函數(shù)的返回值當作另一個被調(diào)用函數(shù)的實際參
數(shù),如
temp=StrToInt(CharB(16));CharB
的返回值作為
StrToInt
函數(shù)的實際參數(shù)傳遞。
3.函數(shù)表達式
而在上一篇的例子中有
temp
=
Count();這樣一句,這個時候函數(shù)的調(diào)用作為一個運算
對象出現(xiàn)在表達式中,能稱為函數(shù)表達式。例子中
Count()返回一個
int
類型的返回
值直接賦值給
temp。注意的是這種調(diào)用方式要求被調(diào)用的函數(shù)能返回一個同類型的值,
不然會出現(xiàn)不可預料的錯誤。
前面說到調(diào)用函數(shù)前要對被調(diào)用的函數(shù)進行說明。標準庫函數(shù)只要用#include
引入已
寫好說明的頭文件,在程序就能直接調(diào)用函數(shù)了。如調(diào)用的是自定義的函數(shù)則要用如下形
式編寫函數(shù)類型說明
類型標識符
函數(shù)的名稱(形式參數(shù)表);
這樣的說明方式是用在被調(diào)函數(shù)定義和主調(diào)函數(shù)是在同一文件中。你也能把這些寫到
文件名.h
的文件中用#include
"文件名.h"引入。如果被調(diào)函數(shù)的定義和主調(diào)函數(shù)不是在同
一文件中的,則要用如下的方式進行說明,說明被調(diào)函數(shù)的定義在同一項目的不一樣文件之上,
其實庫函數(shù)的頭文件也是如此說明庫函數(shù)的,如果說明的函數(shù)也能稱為外部函數(shù)。
extern
類型標識符
函數(shù)的名稱(形式參數(shù)表);
函數(shù)的定義和說明是完全不一樣的,在編譯的角度上看函數(shù)的定義是把函數(shù)編譯存放在
ROM
的某一段地址上,而函數(shù)說明是告訴編譯器要在程序中使用那些函數(shù)并確定函數(shù)的地
址。如果在同一文件中被調(diào)函數(shù)的定義在主調(diào)函數(shù)之前,這個時候能不用說明函數(shù)類型。也就
是說在
main
函數(shù)之前定義的函數(shù),在程序中就能不用寫函數(shù)類型說明了。能在一個函
數(shù)體調(diào)用另一個函數(shù)(嵌套調(diào)用),但不允許在一個函數(shù)定義中定義另一個函數(shù)。還要注意
的是函數(shù)定義和說明中的“類型、形參表、名稱”等都要相一致。
有bit這個類型嗎?
typedef?int?BOOL;
typedef?unsigned?int???type_s;
typedef?void(*funty)();?
typedef?type_s?*type_s_point;
typedef?BOOL(*bit_fun)(funty,type_s_point,type_s);
funty?a;
type_s_point?b;
bit_fun?t_t;
BOOL?pp(funty?e,type_s_point?f,type_s?g)
{
e=0;
f=0;
g=0;?
return?0;
}
void?main()
{
t_t=pp;
(*t_t)(a,b,10);
}
delay函數(shù)是帶參數(shù)的,編譯時是利用寄存器傳遞參數(shù)的,中斷程序中調(diào)用delay函數(shù)時,不定義寄存器區(qū)時,系統(tǒng)就會用同一個區(qū)的寄存器傳遞參數(shù),所以不會錯。而你人為定義了寄存器區(qū),使得中斷程序和delay使用了兩個寄存器區(qū),那就出錯了。如果delay函數(shù)不帶參數(shù)就不會出錯了,所以,子函數(shù)還是不要改變寄存器區(qū),由系統(tǒng)自動分配就好了。
先將TFT.c刈除,然后在添加進項目.
需要看TFT.c中的寫法,如果沒有實體就會link不到.
用定時器功能,設置定時器0的工作方式為方式1,然后定時50ms,再設置控制變量,設置變量要為整型,定時器初值設為TH0(65536-50000)/256、TL0=(65536-50000)%256,這種賦初值的晶振要求為12MHz,每次定時器溢出時控制變量加一,當控制變量加到2400時,定時已經(jīng)達到兩分鐘這時你需要將控制變量清零然后運行你需要運行的代碼即可,我有時間會給你上代碼的
代碼如下:
#include reg52.h
unsigned count;
void init();
void program();
void main()
{
init();
while(1)
{
if (count==2400)
{
count=0;
program();
}
}
}
//初始化函數(shù)設置定時器0的工作方式
void init()
{
TMOD=0x01; //設置定時器工作在方式0
TH0=(65536-50000)/256; //設置初值使其50ms產(chǎn)生一次中斷
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void program()
{
//自定義函數(shù)
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //產(chǎn)生一次中斷重新賦一次初值
count++; //記錄中斷的次數(shù),每2400次中斷為2分鐘
}