板子是黑金的。
昨天看書,是關於nios中字符設備的使用,有關於uart的內容,看到一個使用系統函數操作uart口的方式,當時很感興趣,感覺很方便,因為不用自己寫驅動程序。然后按照書上的方式做了一下,經過驗證和調試,發現這種方式的確很簡單,在此和大家一起分享。 首先解釋一下,這里所謂的字符設備。在nios中,系統將flash,uart,lcd以及dma等設備抽象化為字符設備,以方便開發者進行使用。程序開發只需要獲得被操作設備的文件描述符,然后使用系統的文件函數來讀寫,獲取設備中的數據。 當然開發者也可以自己寫驅動程序,但是那是相當的繁瑣的。所以建議大家還是使用系統自帶的程序,因為這樣程序簡潔一些,可移植性也強一些。 前幾天也做過uart口的實驗,是按照黑金視頻中提供的方式來弄的,驅動程序和頭文件都自己寫的,因為程序較長,所以還是很麻煩。關於那個較長的程序就不說了,現在直接說那個簡單的操作吧。
#include "system.h"
#include <unistd.h>
#include <stdio.h>
#include "../inc/sopc.h"
#include<string.h>
#include"sys/alt_cache.h"
int main(void)
{
printf("This application will print 'hello 88' to uart!\n");
char *msg="you are successful!\n";
FILE *fp;
while(1) {
fp=fopen("/dev/uart","w");
if(fp!=NULL) {
alt_dcache_free(msg);
fprintf(fp,"%s",msg);
fclose(fp);
}
usleep(100000);
}
return 0;
}
這里需要注意一下這個函數alt_dcache_free(msg); 因為我用的cpu的核是f核,高速的核配備了數據緩存,正常情況下,數據都會先進入緩存,但是數據進入緩存就會導致輸出出錯。所以這里需要把發送的數據旁路掉了,避免進入到緩存中。當然數據緩存旁路有很多方式,我這里僅僅提供一種而已。
另外那個文件描述符的句柄,因為書中沒定義,我就用了FILE來定義,因為其他的文件描述符指針,都是和這個類型兼容的。 至於結果就不貼圖片呢,百度空間這個編輯不是很方便,大家有興趣可以試一下。