在 S5PV210 的 开发板上 点亮 一个 LED 灯

参考学习教程:周立功嵌入式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 [email protected] -g

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

时间: 2024-12-07 12:00:34

在 S5PV210 的 开发板上 点亮 一个 LED 灯的相关文章

第七章主要讲的是控制发光二极管的驱动程序,用来控制开发板上的4个led灯

首先讲了led驱动的实现原理,linux驱动并不是直接向硬件的内存中写数据,而是与本机的i/o内存进行交互,每一个连接linux的硬件在i/o内存中都会有映射首地址. 编写驱动程序,先创建led驱动的设备文件: 1.使用cdev_init函数初始化cdev 描述设备文件需要一个cdev的结构体,cdev的大多是成员变量并不需要我们去初始化,只要调用cdev_init函数就可以初始化大部分cdev的成员变量 2.指定设备号 Linux 的设备的文件号分为 主设备号和此设备号,设备号有两种指定方法:

驱动控制开发板上的四个LED小灯

在上一章了解了开发linux驱动程序的步骤,在本章会完成一个真正意义上的linux驱动,该驱动用来控制开发板上的四个LED小灯,通过向驱动发送数据可以控制LED小灯的开关. 首先介绍了LED驱动的实现原理,虽然linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.Linux内核的内存管理模块负责同步I/O内存与硬件中的数据.每一个连接linux的硬件在I/O内存中都会有映射首地址. 其次是编写LED驱动.以下创建一个设备文件,第一步:使用

第一个FPGA工程----点亮开发板上的3个LED灯

第一个FPGA工程----点亮开发板上的3个LED灯 1.新建FPGA工程 开启Quartus2的画面 File--New Project Wizard..指定工程的路径与工程名 指定所使用的FPGA设备型号 2.添加设计文件 本设计采用Verilog HDL硬件描述语言建模 3.建模 本设计有三个输出量,没有输入量,这三个输出量对应FPGA芯片的三个管脚,同时被置高电平,用来驱动LED灯. 4.编译工程 Processing--Start compilation 并生成编译报告 5.引脚分配

ESP8266-12F学习之点亮一个LED灯

点亮一个LED灯     上一篇文章,我们介绍了怎么在Windows系统下搭建一个SEP8266的开发环境,那在这一篇文章中我们要开始来编写一个硬件入门经典小程序,如何点亮一个LED小灯,同时在这一章中我们还会介绍怎么样将编译好的程序下载到ESP8266-12f中.  第一步:下载官方demo框架,从http://wiki.ai-thinker.com/esp8266/examples 下载,当然,也可以在文章最后下载我的附件,下载完后,我们将文件添加到SDK中进行编译,步骤如图: 点开C/C+

在 S5PV210 的 开发板上 使用 串口 收发信息

参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准备 一个 Ubuntu  32位 ,装上 交叉编译链.. 使用下面 代码 和 Makefile 文件 进行编译  ,生成的  执行 文件  利用 winscp 软件复制到 Linux开发板上 ,利用 xshell 运行 这个可执行文件. 下面    代码的  功能  是   打开 串口 ,进行 等待

点亮一个LED灯

设计定义: 二选一多路器 两个输入IO,a.b.可以是高电平, 输入按键按下时,LED灯与a端口状态保持一致, 按键释放时,LED灯与b端口状态保持一致 设计输入:创建一个project 编写功能代码 module LED(a,b,key_in,led_out); input a;//输入端口a,b: input b; input key_in;//按键输入,实现输入通道的选择 output led_out;//led控制端口 assign led_out=(key_in==0)?a:b;//当

树莓派点亮一个led灯

1. 访问网站:http://www.airspayce.com/mikem/bcm2835/, 该网站提供了一份针对树莓派的库文件,下载地址为:点击下载 点击下载.按照提示安装即可. 2. 在bcm2835-1.4.2 中的example文件夹中即为历程文件,打开其中的bink文件夹,使用gcc -o blink blink -l bcm2835 即可生成blink执行文件. 3. 在blink.c文件中,提示控制pin17引脚,即图中的绿色GPIO0,连接LED灯的正极:LED灯负极接树莓派

在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用

当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的FreeRTOS实时操作系统,Nabto正在努力建立一个强大的FreeRTOS + Nabto组合的解决方案. 我们最新推出AppMyProduct应用平台可帮助您快速开发远程控制设备的高质量应用程序.本文介绍了在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵

jz2440烧写内核和文件系统,将虚拟机上的文件通过nfs挂载到开发板上。

1.内核和文件系统要匹配好. 2.文件系统的格式,yaffs2,jaffs nand write.yaffs2... ...$(filesize) a.安装nfs 下面介绍具体操作:1.执行命令:sudo apt-get install nfs-kernel-server ;2.执行命令:mkdir /home/share/NFS 建立一个nfs服务的专有的文件夹;3.建立好文件夹后,接着执行命令:sudo vi /etc/exports 配置nfs;4.在文章的最后一行添加:/home/sha