在s5pv210的开发板上点亮一个led灯

所长 所长     2022-09-06     620

关键词:

 

参考学习教程:周立功嵌入式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的开发板上使用串口收发信息

 参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先准备一个安装好Linux的开发板  使用 xshell工具连接开发板 ,winscp工具连接开发板 , 准备一个Ubuntu 32位,装上交叉编译链。。使用下... 查看详情

s5pv210开发板常用易忘操作记录

一、调试串口2、SD卡槽  查看详情

第一章之s5pv210启动顺序

我所使用的开发板是:友善之臂smart210,cpu为s5pv210.u-boot版本是:u-boot-2012-101,首先在u-boot中配置相对应的开发板的配置文件#makes5p_goni_config2,设事先编译好的交叉编译器放在Makefile中添加上去,打开Makefile在67行补充CROSS_COMPILE?=arm-linux-... 查看详情

s5pv210开发板如何关闭看门狗(代码片段)

看门狗是什么?是SoC内部的一个定时器为什么需要看门狗?现实生活中由于一些外部环境因素,例如高温低温信号干扰,运行在电子设备上的程序容易跑飞和死机,在这种情况下,我们希望设备自动复位&#x... 查看详情

s5pv210实现流水led

1、整体思路:把相应的配置数据写入相应的寄存器,控制GPIO电平(Led.s)——运用工程管理Makefile编译、链接文件(由Led.s编译得到led.bin,该文件用于USB启动方式点亮LED,若使用SD卡方式启动LED,则需要添加mkv210_image.c,使... 查看详情

s5pv210开发板连接虚拟机的网络设置(代码片段)

1、前言用PC机进行嵌入式设备开发,会在pc机上安装虚拟机来运行linux系统,其中就涉及到开发板和虚拟机的通信问题。本文介绍的就是如何正确的设置网络,开发板通过有线网络与虚拟机通信。如果不知道如何设置... 查看详情

s5pv210移植minigui3.0.12

移植平台:ubuntu:14.04 开发板:s5pv210(A8) Minigui版本:3.0.12-----------------------------------------------------以下软件是开发板正常运行的必须安装包,在MiniGui官网可以下载http://www.minigui.org/zhcn/【已放在嵌入式软件组资料共享文件夹】--... 查看详情

s5pv210裸机程序之重定位与链接脚本

s5pv210开发板要求代码在0xD0020010处开始执行(BL1),但是有时我们的程序需要重定位在另外一个地址执行(如uboot),这个时候需要我们在汇编代码处加入重定位操作的代码,使得程序能够长跳转到另外一个地址继续执行代码而... 查看详情

s5pv210开发系列八_yaffs的移植

S5PV210开发系列八Yaffs的移植象棋小子   1048272975Nand作为市面上最基本的非易失性闪存技术之中的一个,应用在各种固态大容量存储解决方式中。因为Nandflash自身的特点,Nand存储器往往须要一款专用的Nand文件系统进行... 查看详情

s5pv210开发板用汇编设置栈和调用c语言(代码片段)

使用C语言前为什么要先用汇编设置栈?C语言程序运行时需要栈,因为C语言中的局部变量都是用栈来实现的,如果没有设置栈就使用C语言,局部变量就会落空,程序就会死掉,所以在使用C语言前,我... 查看详情

嵌入式开发(s5pv210)——lcd显示器

LCD介绍1.LCD(LiquidCrystalDisplay)俗称液晶,这种材料的一大特点就是在电信号的驱动下液晶分子进行旋转,旋转会影响透光性,不同的透光性会透过不同的颜色的光,于是我们便看到显示屏上五颜六色的画面。2.LCD是... 查看详情

移植tslib和qt5.6到三星s5pv210开发板

tslib1.4移植下载tslib1.4后1.cptslib-1.4.tar.bz2/home/gec2.tarjxvftslib-1.4.tar.bz23.sudo-s4.cdtslib-1.4/5../configure--host=arm-linux--prefix=/usr/local/armac_cv_func_malloc_0_nonnull=yes6.make7.makeinstal 查看详情

s5pv210中断体系结构分析

我们按照Tiny210官方的裸板程序来梳理S5PV210的中断体系。关于S5PV210的中断体系结构S5PV210的中断控制器是由4个向量中断控制器(VIC)、ARMPrimeCellPL192和4个TrustZoneInterruptController(TZIC)共同组成。S5PV210共支持93个中断源(具体见官方手册)... 查看详情

一步步点亮led---gpio概念和相关数据手册查阅

...是所有的引脚都可以用作GPIO。每个GPIO都是功能复用的,一个GPIO可以被配置成不同的功能。   s5pv210中的GPIO是以端口为单位来管理的,每个端口中含有不同数量的GPIO。根据s5pv210芯片的数据手册可以知道,s5pv210中包括了34... 查看详情

s5pv210-kernel-从三星官方的内核开始移植

...ARCH的架构对不对5、在arch/arm/configs这个目录下找到和我们开发板最接近的一个配置,用这个配置文件,我们在kernel根目录下,makex 查看详情

s5pv210-arm裸机-lcd

...被动发光的,自己本身不会发光,我们在液晶面板上给他一个白光,背光。之后在电信号的驱动下,里面的液晶分子就会旋转,会透出不同程度的光。在配合滤光片的滤光,就可以让我们看来有不同颜色的光。因此LCD需要一个背... 查看详情

7.如何使用寄存器点亮一个led灯(代码片段)

如何点亮LED本篇讲解用寄存器在stm32开发板上点亮一个LED灯,原理图如下:相同网络标号表示它们是连接在一起的,因此LED1-LED8发光二极管阴极是连接在STM32的PC0-PC7管脚上。如果要使D1指示灯亮,只需要控制PC0管脚... 查看详情

s5pv210v3s开发板下载裸机程序的两种方式

...#43;dnw工具下载dnw是一个下载软件,可以通过USB线连接开发板和PC,然后将程序从PC烧录到开发板的BL1(除去校验头的部分)中。1.设置开发板为USB启动2.装USB驱动,驱动在“X210光盘资料\\A盘\\tools\\USB驱动”目录... 查看详情