码迷,mamicode.com
首页 > 系统相关 > 详细

Linux系统getopt使用示例

时间:2017-12-29 23:36:27      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:can   usleep   stdout   col   系统   tin   set   file   linux   

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <stdint.h>
 5 
 6 void usage()
 7 {
 8     fprintf(stderr,
 9             "\nUsage:  mcu_dload [OPTIONS] *.bin\n"
10             "  -a  Specify device I2C slave address(7Bit), eg: -a 5E, default is 0x58\n"
11             "  -d  Download binary code for MCU only\n"
12             "  -h  This Page.\n\n"
13     );
14     exit(0);
15 }
16 
17 uint8_t asc2hex(char asccode)
18 {
19     uint8_t ret;
20     if(0 <= asccode && asccode <= 9)
21         ret = asccode - 0;
22     else if(a <= asccode && asccode <= f)
23         ret = asccode -a + 10;
24     else if(A <= asccode && asccode <= F)
25         ret = asccode - A + 10;
26     else ret = 0;
27     return ret;
28 }
29 
30 int main(int argc, char **argv)
31 {
32     int opt;
33     uint32_t i = 0;
34     uint8_t i2c_adr = 0x58, i2c_reg;
35     FILE *fp;
36     
37     // Parse Command Line Options
38     while((opt = getopt(argc, argv, "a:h?")) != EOF) {
39         switch(opt) {
40             case a:
41                 i2c_adr = (asc2hex(optarg[0]) << 4) | asc2hex(optarg[1]);
42                 printf("I2C Device Address(7Bit) is 0x%2X.\n", i2c_adr);
43                 break;
44             case h:
45             case ?:
46             default:
47                 usage();
48                 break;
49         }
50     }
51 
52     // Last One is the input file
53     if(optind + 1 != argc) {
54         printf("Input file not found!\n");
55         usage();
56         exit(0);
57     }
58 
59     // Open *.bin file and download it to MCU
60     fp = fopen(argv[optind], "r");
61     if(fp == NULL) {
62         printf("Input file can not open!\n");
63         usage();
64         exit(0);
65     }
66     
67     // Get file size
68     fseek(fp, 0L, SEEK_SET);
69     fseek(fp, 0L, SEEK_END);
70     uint32_t binsize = ftell(fp);
71     printf("Inpuf file size is %d Bytes.\n", binsize);
72 
73     uint8_t *bincode = (uint8_t *)malloc(binsize);
74     fseek(fp, 0L, SEEK_SET);
75     fread(bincode, 1L, binsize, fp);
76     fclose(fp);
77     
78     // Download
79     printf("Reset MCU ...\n");
80     printf("Dowloading bin ...\n");
81 
82     uint32_t dpos = binsize >> 6;
83     for(i = 0; i < binsize; ++i) {
84         if(i % dpos == 0) printf("#");
85         usleep(5000);
86         //CH341WriteI2C(0, i2c_adr, i2c_reg, bincode[i]);
87         fflush(stdout);
88     }
89     printf("\nFile download succeed, %d Bytes transfered!\n", binsize);
90 
91     free(bincode);
92     return 0;
93 }

 

Linux系统getopt使用示例

标签:can   usleep   stdout   col   系统   tin   set   file   linux   

原文地址:https://www.cnblogs.com/lyuyangly/p/8146453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!