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

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

问题是: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条回答 默认 最新

  • fuill 2021-12-01 02:49
    关注

    那个指针有问题,main里没用到这些指针啊,去掉试试,main括号里什么都不填

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题
  • ¥15 腾讯IOA系统怎么在文件夹里修改办公网络的连接
  • ¥15 filenotfounderror:文件是存在的,权限也给了,但还一直报错
  • ¥15 MATLAB和mosek的求解问题
  • ¥20 修改中兴光猫sn的时候提示失败
  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据
  • ¥15 为什么openeluer里面按不了python3呢?