lddongdong
2021-12-01 00:51
采纳率: 100%
浏览 52

请问这段嵌入式代码如何修改呢?

问题是:LED+LCD:
初始化设备(4个灯全灭),屏幕刷绿色,然后四个灯全部亮起闪烁三次,结束后屏幕刷成红色。

/*初始化设备(4个灯全灭),屏幕刷绿色,然后四个灯全部亮起闪烁三次,结束后屏幕刷成红色。
*/

#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 pmsx(long a)
{
    int fd=open("/dev/fb0",O_RDWR);
    unsigned char *FB=mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
    //blue point
    long red =a;
    int i,j;
    for(j=0;j<480;j++)
    {
        for(i=0;i<800;i++)
        {
            memcpy(FB+4*i+800*4*j,&red,4);
        }  
    }
        munmap(FB,800*480*4);
        close(fd);
    return 0;
}

//---------------------------------------------------------------------------
int main(int argc, char **argv[])
{
    /*    LED+LCD:
        初始化设备(4个灯全灭),屏幕刷绿色,然后四个灯全部亮起闪烁三次,结束后屏幕刷成红色。
    */    
    
    openorcloseLed(1);//LED全灭
    
//--------------------------------------------------------------------
    
    pmsx(0x0000FF00);      //屏幕刷成绿色

    openorcloseLed(0);
    sleep(1);
    openorcloseLed(1);
    sleep(1);
    openorcloseLed(0);
    sleep(1);
    openorcloseLed(1);
    sleep(1);
    openorcloseLed(0);
    sleep(1);
    openorcloseLed(1);
    sleep(1);
    
    pmsx(0x00FF0000);      //屏幕刷成红色
    return 0; 
}


img


出现这个错误,应该如何修改代码呢?

2条回答 默认 最新

相关推荐 更多相似问题