lddongdong 2021-12-01 00:59 采纳率: 100%
浏览 45
已结题

嵌入式代码编译出错,请问如何修改?

问题是:3、LED+图片加载:
初始化设备(4个灯全灭),1s后,进行跑马灯三次,最后加载一张图片(800*480像素,24位bmp格式)。

/*
    3、LED+图片加载:
    初始化设备(4个灯全灭),1s后,进行跑马灯三次,最后加载一张图片(800*480像素,24位bmp格式)。

*/


#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <syslog.h>
#include <errno.h>
#include <linux/input.h>

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <stdbool.h>

#include <linux/fb.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
  
#include <string.h> 

#define TEST_MAGIC 'x'                           
#define TEST_MAX_NR 4                            

#define LED1 _IO(TEST_MAGIC, 0)              
#define LED2 _IO(TEST_MAGIC, 1)
#define LED3 _IO(TEST_MAGIC, 2)
#define LED4 _IO(TEST_MAGIC, 3)
#define LED(i) _IO(TEST_MAGIC, i)//做循环用

//控制灯开关
int openorcloseLed();//控制灯全开或全关 ,正常返回1,错误返回-1 
int openorcloseLed(int arg){
    
    int fd;
    fd = open("/dev/Led",O_RDWR);
    if(fd<0)
    {
        printf("打开驱动文件失败,请检查是否有该驱动或者路径是否正确\n");
        return -1;
    }
    for(int i=0;i<4;i++){
        ioctl(fd, LED(i), arg);
    }
    return 1;
}



int tpdk(){
    int lcd = open("/dev/fb0",O_RDWR);
        int open_bmp = open("./c.bmp",O_RDWR);
        char bmp24_buf[800*480*3]={0};
    char bmp32_buf[800*480*4]={0};

    lseek(open_bmp,54,SEEK_SET);

    int i,j;
    read(open_bmp,bmp24_buf,800*480*3);
    for(i=0,j=0;i<800*480*4;i+=4,j+=3)
    {
            bmp32_buf[i+2] = bmp24_buf[j+2];
            bmp32_buf[i+1] = bmp24_buf[j+1];
            bmp32_buf[i+0] = bmp24_buf[j+0];
    }
    write(lcd,bmp32_buf,800*480*4);
    close(lcd);
    return 1;
}


//---------------------------------------------------------------------------
int main()
{
    /*
    3、LED+图片加载:
    初始化设备(4个灯全灭),1s后,进行跑马灯三次,最后加载一张图片(800*480像素,24位bmp格式)。    

    */    
    
    openorcloseLed(1);//LED全灭
    sleep(1);
    
//--------------------------------------------------------------------
    for(int i=0;i<5;i++){
    ioctl(fd,LED1,0);
    sleep(1);
    ioctl(fd,LED1,1);
    ioctl(fd,LED2,0);
    sleep(1);
    ioctl(fd,LED2,1);
    ioctl(fd,LED3,0);
    sleep(1);
    ioctl(fd,LED3,1);
    ioctl(fd,LED4,0);
    sleep(1);
    ioctl(fd,LED4,1);
    sleep(1);
    }

    tpdk();
    return 0; 
}

编译出现如图所示的错误,请问如何修改代码呢?

img

  • 写回答

2条回答 默认 最新

  • 青湦 2021-12-01 09:49
    关注

    提示很清楚 fd 没有定义啊,把55行 int fd=0;改成全局的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 修改了问题 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档