1. 程式人生 > >在 S5PV210 的 開發板上 點亮 一個 LED 燈

在 S5PV210 的 開發板上 點亮 一個 LED 燈

ubuntu 連接服務器 tde 教程 ins connect mage 參考 operation

參考學習教程:周立功嵌入式Linux開發教程-(上冊)

材料:首先 準備一個 安裝好 Linux 的 開發板

使用 xshell 工具 連接 開發板 ,winscp 工具 連接 開發板 , 準備 一個 Ubuntu 32位 ,裝上 交叉編譯鏈。。

使用下面 代碼 和 Makefile 文件 進行編譯 ,生成的 執行 文件 利用 winscp 軟件復制到 Linux開發板上 ,利用 xshell 運行 這個可執行文件。

下面 代碼的 功能 是 新建 一個 TCP 客戶端 連接服務器 (Windows上 的一個 網絡 調試工具 NetAssist.exe ,簡稱網絡調試助手 ,類似串口工具)

註意 其中: #define LED_PATH "/sys/devices/platform/x210-led" 是 開發板 中 led 的路徑

#include <stdint.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include 
<string.h> //socket 頭文件 2017年6月28日09:40:47,所長 #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> #include <stdbool.h> #define LED_PATH "/sys/devices/platform/x210-led" #define OPEN_LED "1" #define OFF_LED "0" #define
LED1 1 #define LED2 2 #define LED3 3 #define LED4 4 #define ledOperationTypeOPEN 1 #define ledOperationTypeOFF 0 #define SERVER_IP "192.168.10.11" #define SERVER_PORT ((uint16_t)7007) int led(int ledNumber,int ledOperationType) { char path[40],data[2]; int fd, ret, flag; strcpy(path, LED_PATH); if ( ledNumber == 1 ) strcat(path, "/led1"); else if( ledNumber == 2 ) strcat(path, "/led2"); else if( ledNumber == 3 ) strcat(path, "/led3"); else if( ledNumber == 4 ) strcat(path, "/led4"); else return -1; printf("打開路徑%s文件",path); fd = open(path, O_RDWR);//打開/sys/devices/platform/x210-led路徑下的 led ledNumber 文件 if( fd < 0 ) //判斷是否打開失敗 { perror("open"); return -2; } else { printf("led%d 文件打開成功.\r\n",ledNumber); } if( ledOperationType == 1) ret = write(fd, OPEN_LED, strlen(OPEN_LED) );//文件寫入內容: OPEN_LED else if( ledOperationType == 0) ret = write(fd, OFF_LED, strlen(OFF_LED) ); //文件寫入內容: OFF_LED else return -3; if( ret < 0 ) { perror("write"); return -4; } else { flag =1; printf("led%d 文件寫入ledOperationType(1:打開LED 0:關閉LED): %d 數據成功.\r\n",ledNumber,ledOperationType); } /* for(;;) { //閃爍 LED1 if( flag == 1 ) {//如果LED燈 是打開的狀態 就關閉LED燈 flag = 0; ret = write(fd, OFF_LED, strlen(OFF_LED) );//文件寫入內容: OFF_LED } else {//如果LED燈 是關閉的狀態 就打開LED燈 flag = 1; ret = write(fd, OPEN_LED, strlen(OPEN_LED) );//文件寫入內容:OPEN_LED } sleep(1); } */ printf("關閉文件,退出進程!\r\n"); close(fd);//文件寫入完畢後 要進行關閉文件 return 0; } int main(int argc, char *argv[]) { int flag =0 ; int conn_sock; struct sockaddr_in server_addr; char tempBuffer[64] ={0}; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SERVER_PORT); conn_sock = socket(AF_INET, SOCK_STREAM, 0); if (conn_sock < 0) { perror("socket(2) error"); goto create_err; } else { printf("socket 創建成功 .\r\n"); } if (connect(conn_sock,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0) { perror("connect(2) error"); printf("連接服務器IP:%s 端口號:%d 連接失敗 .\r\n",SERVER_IP,SERVER_PORT); //goto err; } else { printf("連接服務器IP:%s 端口號:%d 連接成功 .\r\n",SERVER_IP,SERVER_PORT); } for(;;) { if ( read( conn_sock, tempBuffer, sizeof(tempBuffer) ) < 0) { perror("receive data error"); printf("接收數據失敗.\r\n"); //goto err; } //printf("接收的數據是:%s\n", tempBuffer); led( tempBuffer[0] - 0x30, tempBuffer[1] - 0x30 ); sprintf(tempBuffer,"LED%c ledOperationType(1:OPEN 0:OFF):%c OK.\r\n",tempBuffer[0], tempBuffer[1]); if (write(conn_sock, tempBuffer, strlen(tempBuffer)) < 0) { perror("send data error"); //goto err; } } err: close(conn_sock); return -1; create_err: fprintf(stderr, "client error"); return -1; /* for(;;) { //閃爍 LED1 if( flag == 1 ) {//如果LED燈 是打開的狀態 就關閉LED燈 flag = 0; led( LED1 ,ledOperationTypeOFF ); } else {//如果LED燈 是關閉的狀態 就打開LED燈 flag = 1; led( LED1 ,ledOperationTypeOPEN ); } sleep(1); } */ }

註意 下面 是 Makefile 文件 : 其中 arm-gcc-linux 在 安裝交叉 編譯器 的時候被我 重定義了 應該是 :arm-none-linux-gnueabi-gcc

CFLAGS += -Wall
obj := led 
src := led.c
CC  := arm-linux-gcc 

$(obj): $(src)
    $(CC) $(CFLAGS) $^ -o $@ -g

.PHONY: clean
clean:
    -rm $(obj) 

技術分享

在 S5PV210 的 開發板上 點亮 一個 LED 燈