STM32呼叫C庫自帶函式
在MDK5的安裝路徑中:D:\MDK5\ARM\ARMCC\include
,可以看到很多C庫標頭檔案,在程式中只要包含了相應的標頭檔案,編譯器就會自動把相應的程式碼編譯連結進去。
下面介紹在STM32可能會用到的函式:
include "math.h"
1、 三角函式
double sin(double);正弦
double cos(double);餘弦
double tan(double);正切
2、指數與對數
double frexp(double value,int *exp);這是一個將value值拆分成小數部分f和(以2為底的)指數部分exp,並返回小數部分f,即f*2^exp。其中f取值在0.5~1.0範圍或者0。
double ldexp(double x,int exp);這個函式剛好跟上面那個frexp函式功能相反,它的返回值是x*2^exp
double modf(double value,double *iptr);拆分value值,返回它的小數部分,iptr指向整數部分。
double log (double); 以e為底的對數
double log10 (double);以10為底的對數
double pow(double x,double y);計算x的y次冪
float powf(float x,float y); 功能與pow一致,只是輸入與輸出皆為浮點數
double exp (double);求取自然數e的冪
double sqrt (double);開平方
3 、取整
double ceil (double); 取上整,返回不比x小的最小整數
double floor (double); 取下整,返回不比x大的最大整數
4 、絕對值
int abs(int i); 求整型的絕對值
double fabs (double);求實型的絕對值
double cabs(struct complex znum);求複數的絕對值
5 、取整與取餘,用/和%可代替
double modf (double,double*); 將引數的整數部分通過指標回傳,返回小數部分
double fmod (double,double); 返回兩引數相除的餘數
include "stdio.h"
主要就是printf
函式在串列埠上的應用:
以正點原子的程式模版為例:
在
usart.c
中定義了把printf
和串列埠一輸出相關聯的函式:
//加入以下程式碼,支援printf函式,而不需要選擇use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//標準庫需要的支援函式
struct __FILE
{
int handle;
};
FILE __stdout;
//定義_sys_exit()以避免使用半主機模式
void _sys_exit(int x)
{
x = x;
}
//重定義fputc函式
int fputc(int ch, FILE *f)
{
while((USART1->SR&0X40)==0);//迴圈傳送,直到傳送完畢
USART1->DR = (u8) ch;
return ch;
}
#endif
如果你註釋掉這段話,但程式上使用了 printf,雖然軟體編譯不會報錯,但是硬體上 STM32 是無法啟動的,這段程式碼最好不要去修改。
若要對映到其他串列埠,只要把上訴的USART1改為USARTX或UARTX(X表示其他串列埠號)
通過%d,%f,就可以通過輸出變數值。sprintf
函式!!(非常靈活好用):
int sprintf( char *buffer, const char *format [, argument] ... );
//把整數123列印成一個字串儲存在s中。
sprintf(s, "%d", 123); //產生"123"
整數拼接。可以指定寬度,不足的左邊補空格:
sprintf(s, "%8d%8d", 123, 4567); //產生:" 123 4567"
當然也可以左對齊:
sprintf(s, "%-8d%8d", 123, 4567); //產生:"123 4567"
也可以按照16 進位制列印:
sprintf(s, "%8x", 4567); //小寫16 進位制,寬度佔8 個位置,右對齊
還可以字串拼接等等
u8 *p;
u8 res;
p=mymalloc(SRAMIN,40);//申請40位元組記憶體,SRAMIN表示內部記憶體池
sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",WEATHER_SERVERIP,WEATHER_PORTNUM); //配置目標TCP伺服器
res = atk_8266_send_cmd(p,"OK",200);//連線到目標TCP伺服器
...
...
...
myfree(SRAMIN,p);//務必釋放記憶體,防止記憶體洩露無法回收
這裡記憶體申請很有用,有時候不申請時會亂碼!
include "stdlib.h"
//返回整數變元num的絕對值
int abs(int num);
//返回長整形num的絕對值。
long labs(long int num);
//把str指向的串轉換為雙精度浮點值,串中必須含合法的浮點數,否則返回值不確定。
//串中的數可以由有效浮點數中的任何字元結束,如空白符、除句號外的標點符號和E或e之外的字元等。
double atof(const char *str);
//把str指向的串轉換為整數(int)值。串中必須含合法整型數,否則返回值無定義。
//串中的整數內容可由任何不是該整數的一部分的字元終止,如空白符、標點符號和字元等。
int atoi(const char *str);
//把str指向的串轉換為長整數(long int)值。串中必須含合法整型數,否則返回值無定義。
//串中的整數內容可由任何不是該整數的一部分的字元終止,如空白符、標點符號和字元等。
long atol(const char *str);
//產生偽隨機數序列,每次它被呼叫時返回一個0到RAND_MAX間的整數。RAND_MAX值至少是32767。
int rand(void);
//為rand()生成的偽隨機數序列設定起點。
void srand(unsigned int seed);
void* calloc (size_t, size_t); //分配記憶體, 並清零
void* malloc (size_t); //分配記憶體
void* realloc (void*, size_t); //重新分配記憶體, 返回新指標
void free (void*); //釋放記憶體
rand和srand函式用法:https://blog.csdn.net/xiaoxiongli/article/details/1667215
相關文章
- C程式函式呼叫&系統呼叫C程式函式
- C語言函式呼叫棧C語言函式
- Python自帶的函式Python函式
- 核心函式 系統呼叫 系統命令 庫函式函式
- C 庫函式 - strstr()函式
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- C++中函式呼叫的用法C++函式
- C++如何解析函式呼叫C++函式
- JNI呼叫c動態連結庫函式程式碼實踐函式
- 類的解構函式自動呼叫函式
- C++入門教程(11):呼叫函式C++函式
- Swift3.0 呼叫C函式-_silen_nameSwift函式
- C++函式呼叫棧從何而來C++函式
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- 子函式呼叫函式
- 函式呼叫棧函式
- Python函數語言程式設計自帶函式Python函數程式設計函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- c語言是如何處理函式呼叫的?C語言函式
- C++:建構函式的分類和呼叫C++函式
- C語言庫函式及示例C語言函式
- 後來才知道的JavaScript自帶函式JavaScript函式
- oracle 系統自帶幾個常用函式Oracle函式
- 自帶的 print 函式居然會報錯?函式
- [C#解惑] #1 在建構函式內呼叫虛方法C#函式
- Swift 呼叫 Objective-C 的可變引數函式SwiftObject函式
- C++ 反彙編:關於函式呼叫約定C++函式
- 外部函式的呼叫函式
- gdb 如何呼叫函式?函式
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- 普通函式與函式模板呼叫規則函式
- c語言快速排序(庫函式使用)C語言排序函式
- C++11 標準庫 bind 函式C++函式
- C++ functional庫中的仿函式C++Function函式
- 學習javaScript必知必會(1)~js介紹、函式、匿名函式、自呼叫函式、不定長引數JavaScriptJS函式
- 棧空間受限情況下C/C++函式呼叫注意事項C++函式
- 普通函式與函式模板呼叫規則2函式
- httprunner yml 呼叫外部函式HTTP函式