运行成功的读写MTD的测试程序

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <linux/compiler.h>
#include <mtd/mtd-user.h>

struct BSL
{
 char  booslink[10];  //a fixed string idefined as booslink
 //char  serialNumber[24];
//++++add a Serial Number
 //char  PCBA_serialNumber[24];
 //char  reserved_0[24];
};

int non_region_erase(int Fd, int start, int count, int unlock)
{
    mtd_info_t meminfo;

    if (ioctl(Fd,MEMGETINFO,&meminfo) == 0)
    {
        erase_info_t erase;

        erase.start = start;

        erase.length = meminfo.erasesize;

        for (; count > 0; count--) {
            printf("\rPerforming Flash Erase of length %u at offset 0x%x",
                    erase.length, erase.start);
            fflush(stdout);

            if(unlock != 0)
            {
                //Unlock the sector first.
                printf("\rPerforming Flash unlock at offset 0x%x",erase.start);
                if(ioctl(Fd, MEMUNLOCK, &erase) != 0)
                {
                    perror("\nMTD Unlock failure");
                    close(Fd);
                    return 8;
                }
            }

            if (ioctl(Fd,MEMERASE,&erase) != 0)
            {
                perror("\nMTD Erase failure");
                close(Fd);
                return 8;
            }
            erase.start += meminfo.erasesize;
        }
        printf(" done\n");
    }
    return 0;
}

int main(int argc, char *argv[])
{
    int fd;
 
    char *cmd;
    struct mtd_info_user info;   
    int regcount;
    int ret;
    int res;

    if(3>argc)
    {
        printf("You must specify a device!\n");
        return 16;
    }
    cmd=argv[1];

    // Open the device
    if ((fd = open(argv[2],O_RDWR)) < 0)
    {
        fprintf(stderr,"File open error\n");
        return 8;
    }
    else
    {
        ioctl(fd,MEMGETINFO,&info);
        //printf("info.size=%d\n info.erasesize=%d\n info.writesize=%d\n info.oobsize=%d\n",info.size,info.erasesize,info.writesize,info.oobsize);
    }
   
    if (ioctl(fd,MEMGETREGIONCOUNT,&regcount) == 0)
    {
        //printf("regcount=%d\n",regcount);
    }


    /*erase the device*/
    if (strcmp(cmd, "erase") == 0)
    {
        if(regcount == 0)
        {    
            res = non_region_erase(fd,0,(info.size/info.erasesize),0);    
        }       
        printf("erase!\n");
    }

    /*write file to this device*/
    struct BSL *bsl_write =(struct BSL*)malloc(sizeof(struct BSL));
    if (strcmp(cmd, "write") == 0)
    {
        printf("write ok!\n");
        strcpy(bsl_write->booslink,argv[3]);
        ret = write(fd, bsl_write, sizeof(struct BSL) );

        return 0;
    }

    /*read file from this device*/
    struct BSL *bsl_read =(struct BSL*)malloc(sizeof(struct BSL));
    if (strcmp(cmd, "read") == 0)
    {
      read(fd, bsl_read, sizeof(struct BSL));
      printf("%s\n", bsl_read);
        printf("read ok!\n");
    }
   
    return 1;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MTI (Moving Target Indicator) 是一种用于检测和跟踪运动目标的雷达信号处理技术。MTI MTD (Moving Target Detection)仿真程序是一种用于模拟MTI MTD技术的程序。 MTI MTD仿真程序通过模拟雷达系统的发射和接收过程,以及对接收到的信号进行信号处理和目标跟踪,来模拟MTI MTD技术的运作。 在MTI MTD仿真程序中,首先需要建立一个合适的雷达场景,包括各种静止和移动目标的位置、速度、方向等信息。然后,通过模拟雷达发射信号和目标的相互作用,生成接收到的雷达信号。 接下来,仿真程序会进行信号处理,首先进行杂波消除,通过滤波和抑制非运动目标的方法,去除背景杂波。然后,利用MTI MTD算法进行目标检测和跟踪。MTI MTD算法主要通过比较连续两个时刻的雷达回波信号,来确定目标是否在移动。 最后,在仿真程序中可以展示目标的跟踪结果,包括目标的位置、速度、轨迹等信息。通过观察仿真结果,可以评估MTI MTD技术的探测能力和跟踪精度。 MTI MTD仿真程序可以用于研究和优化雷达系统的MTI MTD功能,帮助工程师更好地理解和改进该技术。此外,仿真程序也可以用于培训和教育目的,帮助学习者更好地理解MTI MTD技术的原理和应用。 总之,MTI MTD仿真程序是一种用于模拟MTI MTD技术的程序,通过模拟雷达信号处理和目标跟踪过程,来评估和改进该技术的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值