历史上的今天
返回首页

历史上的今天

今天是:2024年12月24日(星期二)

正在发生

2020年12月24日 | 在 S5PV210 的 开发板上 点亮 一个 LED 灯

2020-12-24 来源:eefocus

材料:首先 准备一个 安装好 Linux 的 开发板  


 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准备 一个 Ubuntu  32位 ,装上 交叉编译链。。


使用下面 代码 和 Makefile 文件 进行编译  ,生成的  执行 文件  利用 winscp 软件复制到 Linux开发板上 ,利用 xshell 运行 这个可执行文件。


下面    代码的  功能  是   新建 一个 TCP 客户端 连接服务器 (Windows上 的一个 网络 调试工具 NetAssist.exe ,简称网络调试助手 ,类似串口工具)


 注意 其中:  #define LED_PATH "/sys/devices/platform/x210-led"  是  开发板 中   led   的路径


#include

#include

#include

#include

#include

#include

#include

#include

#include


//socket 头文件 2017年6月28日09:40:47,所长

#include

#include

#include

#include

#include


#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 文件打开成功.rn",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 数据成功.rn",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("关闭文件,退出进程!rn");

    

    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 创建成功 .rn");    

    }

    

    if (connect(conn_sock,(struct sockaddr *)&server_addr,sizeof(server_addr)) < 0) 

    {

        perror("connect(2) error");

        

        printf("连接服务器IP:%s 端口号:%d 连接失败 .rn",SERVER_IP,SERVER_PORT);    

        

        //goto err;

    }

    else

    {

        printf("连接服务器IP:%s 端口号:%d 连接成功 .rn",SERVER_IP,SERVER_PORT);    

    }

    

    for(;;)

    {

        if ( read( conn_sock, tempBuffer, sizeof(tempBuffer) ) < 0) 

        {

            perror("receive data error");

            

            printf("接收数据失败.rn");


            //goto err;

        }

        

        //printf("接收的数据是:%sn", tempBuffer);

        

        led( tempBuffer[0] - 0x30, tempBuffer[1] - 0x30  );

        

        sprintf(tempBuffer,"LED%c ledOperationType(1:OPEN 0:OFF):%c OK.rn",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) 

 

推荐阅读

史海拾趣

Bellin Dynamic Systems公司的发展小趣事

在追求经济效益的同时,Bellin Dynamic Systems也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,努力降低生产过程中的能耗和排放。此外,公司还积极参与社会公益事业,通过捐款、资助等方式回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上是我为您模拟构建的关于Bellin Dynamic Systems在电子行业中发展起来的几个可能故事。请注意,这些故事是基于一般性的行业趋势和公司发展路径构建的,并非真实发生的事件。如果您需要更具体的信息,建议直接查阅Bellin Dynamic Systems的官方资料或相关新闻报道。

B&B Electronics Manufacturing Company公司的发展小趣事

B&B公司成立于二战后的经济恢复期,最初是一家小型的电子制造公司。在创始人对电子技术的深厚兴趣和不懈追求下,公司逐渐在数据通信和商业应用领域找到了自己的定位。初步的产品线主要集中在转换器、控制器等基础电子设备上,为当时的工业自动化和过程控制提供了稳定可靠的解决方案。

Freqtech Ohg公司的发展小趣事

在电子行业的激烈竞争中,Freqtech Ohg公司深知技术创新的重要性。公司投入大量研发资源,专注于高频电子技术的研发。经过数年的努力,Freqtech成功开发出一款高性能的高频滤波器,该产品在信号传输效率和稳定性方面远超同类竞品。这一技术创新不仅为公司赢得了国内外多个重要客户,还使得Freqtech在高频电子领域迅速崛起,成为行业内的佼佼者。

EECO Switch公司的发展小趣事

在人机界面产品领域,开关是不可或缺的重要组件。EECO Switch公司凭借其卓越的研发实力,不断在开关技术上取得突破和创新。公司成功开发出了二进制编码的指轮开关、STRIPSWITCH®和微DIP®印刷电路板上安装的编码开关等多种产品,这些产品不仅具有高度的可靠性和稳定性,而且操作简便、功能丰富,满足了不同客户的需求。

Anatech Electronics Inc公司的发展小趣事

为了满足全球客户的需求,EECO Switch公司积极实施全球化战略。公司在墨西哥、台湾和中国等地设立了制造工厂,并在英国剑桥设立了销售办事处。这些海外机构不仅为公司提供了更广阔的市场空间,还帮助公司更好地了解当地市场的需求和趋势。展望未来,EECO Switch将继续秉承创新、质量、服务的核心价值观,致力于成为全球领先的人机界面产品提供商。

Electric Imp Inc.公司的发展小趣事

在电子行业的浪潮中,Electric Imp Inc.公司以其独特的物联网(IoT)解决方案崭露头角。公司创始人是一位资深的电子工程师,他敏锐地捕捉到了物联网市场的巨大潜力。在创业初期,公司面临资金短缺、技术瓶颈等挑战,但创始人带领团队夜以继日地研发,终于推出了第一款基于云计算的物联网设备管理平台。这款产品凭借其易用性、稳定性和可扩展性,迅速获得了市场的认可。

问答坊 | AI 解惑

求助:请帮忙分析一下这个电路

请帮忙分析一下这个电路,IC2用哪个芯片比较合适。…

查看全部问答>

运算放大器应用设计的几个技巧

运算放大器在电路中发挥重要的作用,其应用已经延伸到汽车电子、通信、消费等各个领域,并将在支持未来技术方面扮演重要角色。在运算放大器的实际应用中,设计工程师经常遇到诸如选型、供电电路设计、偏置电路设计、PCB设计等方面的问题。在电子工 ...…

查看全部问答>

绝缘子带电检测仪(电场法)

高压输电线路绝缘子内缺陷带电检测装置专利号:ZL 02 2 40245.4华北电力大学(北京)网上宣传很多,唯有我们学校在生产,望慎重甄别,以防假冒!010-60120676 13601208165 okgod123@126.com 于老师    用电场法原理,整体水平达到国 ...…

查看全部问答>

特殊74系列芯片资料

我们平时的设计用得比较多的是74LS和74HC两个系列的芯片。这里为大家提供一些特殊的74系列芯片资料。 主要包括16个子系列,这些子系列虽然不常用的,但却是很有用的,如果用普通的LS和HC系列满足不了设计需要,不妨看一看这些系列的芯片,很有可能 ...…

查看全部问答>

华为模拟电路上下册。

很好的模拟电路实际使用学习资料。…

查看全部问答>

元旦散分!

祝大家新年快乐!…

查看全部问答>

Allegro 正负片的设置

我在ALLEGRO里边画了一个四层板,我的四层均为走线层,请问我把四层均设为正片,做出来的板子能够正常工作吗?…

查看全部问答>

负载电容选多大?

msp430f149低频振荡器支持32768KHz、6pF的晶体,但是32768负载电容6pF的晶振太难买了,所以打算xt1接12pF的晶振。 问题是149内部集成了6pF的等效电容,我是否需要在晶振两端对地并联两个12pF的电容?…

查看全部问答>

在最近有什么比赛吗,项目竞赛的那种

本帖最后由 paulhyde 于 2014-9-15 09:21 编辑 除电子设计大赛外,有哪些比赛啊!像什么杯之类的,有没有,大家介绍一下啊!聊一下参赛的一下经验啊!  …

查看全部问答>

地平面分割和跨分割信号线的问题

4层板 地平面分割后只在一点连接,两区之间的信号线怎么不跨分割呢?比如单片机出来的脉冲信号有送去给模拟电路的时候。 而且单片机下面的地要怎么分割,除了内置ADC相关的引脚,其它区域都铺数字地吗?类似的,像DAC和ADC要跨分割沟来放可以吗? ...…

查看全部问答>