Linux系统getopt使用示例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdint.h> void usage()
{
fprintf(stderr,
"\nUsage: mcu_dload [OPTIONS] *.bin\n"
" -a Specify device I2C slave address(7Bit), eg: -a 5E, default is 0x58\n"
" -d Download binary code for MCU only\n"
" -h This Page.\n\n"
);
exit();
} uint8_t asc2hex(char asccode)
{
uint8_t ret;
if('' <= asccode && asccode <= '')
ret = asccode - '';
else if('a' <= asccode && asccode <= 'f')
ret = asccode -'a' + ;
else if('A' <= asccode && asccode <= 'F')
ret = asccode - 'A' + ;
else ret = ;
return ret;
} int main(int argc, char **argv)
{
int opt;
uint32_t i = ;
uint8_t i2c_adr = 0x58, i2c_reg;
FILE *fp; // Parse Command Line Options
while((opt = getopt(argc, argv, "a:h?")) != EOF) {
switch(opt) {
case 'a':
i2c_adr = (asc2hex(optarg[]) << ) | asc2hex(optarg[]);
printf("I2C Device Address(7Bit) is 0x%2X.\n", i2c_adr);
break;
case 'h':
case '?':
default:
usage();
break;
}
} // Last One is the input file
if(optind + != argc) {
printf("Input file not found!\n");
usage();
exit();
} // Open *.bin file and download it to MCU
fp = fopen(argv[optind], "r");
if(fp == NULL) {
printf("Input file can not open!\n");
usage();
exit();
} // Get file size
fseek(fp, 0L, SEEK_SET);
fseek(fp, 0L, SEEK_END);
uint32_t binsize = ftell(fp);
printf("Inpuf file size is %d Bytes.\n", binsize); uint8_t *bincode = (uint8_t *)malloc(binsize);
fseek(fp, 0L, SEEK_SET);
fread(bincode, 1L, binsize, fp);
fclose(fp); // Download
printf("Reset MCU ...\n");
printf("Dowloading bin ...\n"); uint32_t dpos = binsize >> ;
for(i = ; i < binsize; ++i) {
if(i % dpos == ) printf("#");
usleep();
//CH341WriteI2C(0, i2c_adr, i2c_reg, bincode[i]);
fflush(stdout);
}
printf("\nFile download succeed, %d Bytes transfered!\n", binsize); free(bincode);
return ;
}
Linux系统getopt使用示例的更多相关文章
- Linux系统常用命令示例
1.在跟下创建一个目录,目录的名字为data # mkdir /data2.在data目录里创建一个文件,文件名为yunjisuan.txt # touch /data/yunjisuan.txt3. ...
- Linux 系统安全相关
本篇关于Linux的一些安全知识,主要就是与账号相关的安全. 账户文件锁定 当服务器中的用户账号已经固定,不在进行更改,可锁定账户文件.锁定后,无法添加.删除账号,也无法更改密码等. 锁定账户文件 c ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
- 探索 Linux 系统的启动过程
引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...
- 如何重置硬盘遭到“损坏”的Linux系统root用户密码
传统印象下Linux是非常坚不可摧的,具有千年不更新,万年不重启的美名.而随着虚拟化的推进,很多跑在虚拟化上的Linux由于先前基础架构的脆弱,变得适应性“越来越不好”,体现在IP存储如果出现节点故障 ...
- Linux系统编程:基本I/O系统调用
文件描述符 进程每打开一个文件的时候,会获得该文件的文件描述符,而后续的读写操作都把文件描述符作为参数.在用户空间或者内核空间,都是通过文件描述符来唯一地索引一个打开的文件.文件描述符使用int类型表 ...
- Linux系统硬链接和软链接介绍
1.链接的概念 在Linux系统中链接分为硬链接和软连接两种,一种为硬链接,另一种为软连接或符号链接(symbolic Link).ln命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建 ...
- Linux 系统中僵尸进程
Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...
- Linux系统1.md
计算机 介绍 电子计算机(英语:computer),亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具. 在现代,机械计算机的应用已经完全被电子计算机所替换,其所相关的技术研究叫计算机 ...
随机推荐
- 在Ubuntu上安装Arena
安装JDK 首先安装JDK对吧,下面以jdk-7u67-linux-i586.tar.gz为例 在官网上下载JDK,具体依照你的机器而定. 解压掉 tar -zxvf jdk-7u67-linux-i ...
- python开发学习-day09(队列、多路IO阻塞、堡垒机模块、mysql操作模块)
s12-20160312-day09 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...
- loadrunner中大小写字符转换函数封装:
//封装ConvertToXXX函数: int ConvertToUpper(char * sInput, char * sNew) { sInput = (char *)strupr(sInput) ...
- bzoj 1864
思路:随便dp一下 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #def ...
- Codeforces Round #361 (Div. 2) D - Friends and Subsequences
题目大意:给你两个长度为n的数组a, b,问你有多少个问你有多少个区间满足 a中最大值等于b中最小值. 思路:我本来的想法是用单调栈求出每个点的管辖区间,然后问题就变成了巨麻烦的线段覆盖问题,就爆炸写 ...
- MPI - 缓冲区和非阻塞通信
转载自: Introduction to MPI - Part II (Youtube) Buffering Suppose we have ) MPI_Send(sendbuf,...,,...) ...
- Jenkins多选项框使用
多选框的使用场景还是挺多的,比如发布多个服务,或者选择哪些服务器 想要使用多选项,则需要安装插件extend choice parameter,然后在项目中配置参数化构建过程 配置完上面,我们就可以在 ...
- Redis学习篇(四)之List类型及其操作
Redis的List是一个双向链表 LPUSH 作用:向列表左端添加元素 语法:LPUSH key value value... 从左到右逐个添加到左端,前面的先添加, 可以一次添加多个元素 RPUS ...
- EventBus机制 handler 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 事件巴士 是 采用 观察者模式 实现 事件订阅总线, 可以用在 应用程序中, 组件之间, ...
- centos 7 修改ssh登录端口
在阿里云上面使用的oneinstack镜像,默认是使用的22端口,每次登录总会发现有人在暴力破解我的服务器,所以想想还是修改一下比较安全. 1.在防火墙打开新的端口 iptables -I INPUT ...