新员工一口气写完了这些C语言例子,领导给他转正了!
持续更新中...
很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子?
一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子,
这些例子在嵌入式开发工作中,或多或少都会用到。
看看你们会做多少?
一、基础C语言
1. 排序算法
给指定数组排序,可以是任意一种排序算法,比如冒泡排序
函数定义如下,
bubble_sort(char dest[],char src[],int len)
2. 将一个unsigned char array[]数组元素实现bit位逆序
比如:array[0] = 0x17(0001 0111),转换后array[0] = 0xe8(1110 1000)
函数定义如下:
int reverse(unsigned char dest[],unsigned char src[],int len)
3. 将一个unsigned int array[]数组元素实现字节序转换
比如array[0] = 0x12345678 ,转换后array[0] = 0x78563412
函数定义如下:
myhtol(int dest[],int src[],int len)
4. 将一个unsigned char array[]数组,每一个字节,转换为二进制,每一个bit占一个字节,将结果存储到新的数组中,同时也可以实现将这新的数组还原
比如array[0] = 0x17 (0001 0111) array[1] = 0x32 (0011 0010)
新的数组dest[0] ~dest15] 为 0 ,0,0,1,0,1,1,1, 0,0,1,1,1,0,0,1,0
函数定义如下:
字节数组转为bit数组
int Hex2bit(unsigned char dest[],unsigned char src[],int len)
返回值为新的bit数组的有效元素个数
bit数组还原为Byte数组
int bit2Hex(unsigned char dest[],unsigned char src[],int len)
返回值为还原后的Byte数组的有效元素个数
5. 帧格式转换
将一个char数组,所有的7e 转成 7d 5e ,7d转成7d 5d,并能还原
二、Linux系统编程
1. 文件I/O(open、read、write、lseek)
1) 打开一个文件,如果不存在则创建
2)复制文件为指定文件名
3)读取指定文件,每隔2个字节,提取2个字节,并将结果存储到指定文件
4)修改某个文件指定行的内容,将当前日期更新到指定位置
#define VERSION "2024-6-21"
2. 串口
1)以制定的配置打开指定串口,从串口读取一定长度的数据,并将该数据直接从串口写回
《【粉丝问答8】用C语言在Linux下实现CC2530上位机-1》
2)从串口数据中解析出有效数据(有点难)
假定需要从串口接收到的数据帧格式如下:
7e xx xx xx xx xx xx xx 7e
7e中间位有效数据区,要求能够从串口数据中提取出有效数据
注意:从串口读取的数据并不是规则的,7e可能在一组数据开头、中间、结尾,并且一对7e可能不在同一次读取到的帧数据中。
3. 进程
1)创建子进程,并分别在创建前后打开同一个文件,分析父子进程同时操作该文件之间的影响。
2)编写一个守护进程
3)通过管道(无名管道和有名管道),实现进程间通信
4. 线程
1) 创建2个线程,一个线程向全局数组写数据(数组尽量大一些),一个线程打印该全局数组,分析结果
2)互斥锁使用
创建2个线程,通过互斥锁实现互斥访问某个指定串口
3) 条件变量
创建2个线程,线程2的执行必须是线程1在完成某个动作之后(比如sleep5秒之后)才可以执行。
5. 信号
给信号SIGINT注册指定回调函数,
三、网络
1. 编写1个C/S架构的udp/tcp并发服务器
服务器收到任意客户端数据,都直接回传给该客户端
2. 基于socket(tcp/udp)实现网络文件传输
3. 基于socket(tcp/udp)实现一个建议信令传输协议
typedef struct _protocol_s{
int cmd;
…………
char data[10];
}PROTOCOL_S;
4. 读取当前系统所有网口的信息(name、ip)
cat /proc/net/dev
5. 修改网卡ip地址
不许用system()
四、驱动
1. 字符设备
编写一个最简单的字符设备驱动和应用程序,包含:read/write/ioctl,
2. 通过等待队列实现读阻塞
3. 编写一个中断处理函数,包含设备树
4. 实现1个中断底半部(workqueue)
5. 基于内核定时器timer_list,实现定时1s执行某个函数
6. 使用内核信号量
五、工具篇
1. 版本管理
git
cmder
2. 安卓设备
adb、scrcpy
《详解如何将 Android 手机投屏在 Ubuntu 上》
3. 文本
source insight、vim、16进制分析工具、beyond compare
4. 画图工具
viso、edraw、
5. 串口工具
xshell、secure CRT、XCOM
6. 网络
- 工具
wireshark,netassit,tcpdump
- 命令
iperf、ping、tftp、ftp、ifcpnfig、ipconfig
7. 文件传输
- 通常开发板和windows传输文件
tftp、adb、rz、sz
- windows之间传输文件
飞秋、ftp、windows文件共享
8. 音频
aplay、arecord、ffplay
camera
v4l2-ctl、media-ctl -p、ffplay
9. i2c
i2cdetect、i2cdump、i2cget、i2cset、i2ctransfer
10. 仪器
逻辑分析仪、示波器、稳压电源、频谱仪、万用表
电烙铁
新员工一口气写完了这些C语言例子,领导给他转正了!的更多相关文章
- 写给新员工的十点SQL开发建议
1.建立自己的知识体系 摘抄一句话你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来: 做笔记: 把笔记放在可以随时被找到的地方.个人的笔记可以放在印象笔记之类工具上,单位上的笔 ...
- C++入职学习篇--新员工入职(持续更新)
C++入职学习篇--新员工入职(持续更新) 本人菜鸟一枚,刚刚结束学业生涯,入职C++软件开发岗位,之前对C++一窍不通,刚刚入职,亚历山大,但为祖国和平发展,本人励志为中华崛起而奋斗,学不好C++誓 ...
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
- 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 怎样写Makefile文件(C语言部分)
本文摘抄自"跟我一起写Makefile ",只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org. ...
- 学写PEP,参与Python语言的设计
如果你为Python写了一篇PEP,这篇PEP成功的被Python指导委员会接受了,那么以后你在吹牛皮的时候你就可以说我主导了Python语言某个特性的设计工作. -- 跬蟒 我就问你主导Python ...
- 02-编写第一个C语言程序
本文目录 1.打开Xcode,新建Xcode项目 2.选择最简单的命令行项目 3.输入项目信息 4.选择一个用来存放C程序代码的文件夹 5.运行项目 说明:这个C语言专题,是学习iOS开发的前奏.也为 ...
- Photoshop/PS中如何写维吾尔语等语言 乱码
在新疆的朋友都了解很多标语上面都会有汉语.维语等两种语言.有很多维吾尔语.哈萨克语.柯尔克孜语等语言 要在PS 里进行设计处理,这时在Photoshop中进行设计时文字粘贴进来后出现不正常是乱码形式. ...
- 自己动手写一个编译器Tiny语言解析器实现
然后,上一篇文章简介Tiny词法分析,实现语言.本文将介绍Tiny的语法分析器的实现. 1 Tiny语言的语法 下图是Tiny在BNF中的文法. 文法的定义能够看出.INNY语言有以下特点: 1 程序 ...
- 分享一个自己写的vue多语言插件smart-vue-i18n
前言 目前有比较成熟的方案(vue-i18n)了解了下,并且实用了一下感觉对于我在使用的项目来说略显臃肿,功能比较多,所以压缩的会比较大,在移动端不太适合所以自己花一天时间撸了一个vue多语言插件,压 ...
随机推荐
- Android程序获取鸿蒙手机设备信息(是否鸿蒙手机、版本号、小版本号等)
1.效果图 鸿蒙手机 --> 关于手机的截图: Android程序获取鸿蒙手机设备信息的截图: 2.实现 本案例DEMO的实现主要借鉴了网上现有的资料: https://blog.csdn.ne ...
- 开发工具-eclipse/idea 在运行前执行一些动作
毫无疑问,我们有的时候想在运行/编译程序前后执行一些动作.eclipse和idea都能支持. 日前正好遇到一个问题:有个依赖于pom的某个jar,内容虽然变了,但是版本不变,所以希望每次执行前先清除特 ...
- Android系统启动:1-综述
Android系统启动:综述 原文:http://gityuan.com/2016/02/01/android-booting/ 基于Android 6.0的源码剖析, Android启动过程概述 概 ...
- OPC 详解 第一篇 基础概念
一 .概述 OPC 的全称是OPC(OLE for Process Control), 用于过程控制的OLE,OLE(Object Linking and Embedding)大家都知道是对象连接与嵌 ...
- MyBatis学习篇
什么是MyBatis (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂 ...
- 全国DNS服务器IP大全
- redis出现错误提示MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for......
某天,redis出现了这样一个错误提示: MISCONF Redis is configured to save RDB snapshots, but is currently not able to ...
- webgl未使用独立显卡报告2
楔子 在上一篇文章 <# [https://juejin.cn/post/7074771064286347301] webgl未使用独立显卡报告> 发表后,有读者在公众号给我发了一段评论, ...
- Day 3 - 单调栈、单调队列、凸包与斜率优化
单调栈 引入 何为单调栈?顾名思义,单调栈即满足单调性的栈结构.与单调队列相比,其只在一端进行进出. 为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例. 过程 插入 将一个元素插入单调栈时 ...
- 第九节 JMeter基础-高级登录【接口关联-鉴权】
声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:电商的功能:登录.加入购物车.提交订单.问题:谁把什么商品加入了购物车?这时需要把上一个接口的响应数据(登录成功后返回 ...