持续更新中...

很多想从事嵌入式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可能不在同一次读取到的帧数据中。

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,

一文带你掌握Linux字符设备架构

2. 通过等待队列实现读阻塞

手把手教Linux驱动9-等待队列waitq

3. 编写一个中断处理函数,包含设备树

4. 实现1个中断底半部(workqueue)

5. 基于内核定时器timer_list,实现定时1s执行某个函数

【粉丝问答20】内核定时器使用及其他时间操作

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语言例子,领导给他转正了!的更多相关文章

  1. 写给新员工的十点SQL开发建议

    1.建立自己的知识体系 摘抄一句话你所拥有的知识并不取决于你记得多少,而在于它们能否在恰当的时候被回忆起来: 做笔记: 把笔记放在可以随时被找到的地方.个人的笔记可以放在印象笔记之类工具上,单位上的笔 ...

  2. C++入职学习篇--新员工入职(持续更新)

    C++入职学习篇--新员工入职(持续更新) 本人菜鸟一枚,刚刚结束学业生涯,入职C++软件开发岗位,之前对C++一窍不通,刚刚入职,亚历山大,但为祖国和平发展,本人励志为中华崛起而奋斗,学不好C++誓 ...

  3. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  4. 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  5. 怎样写Makefile文件(C语言部分)

    本文摘抄自"跟我一起写Makefile ",只是原文中我自己感觉比较精要的一部分,并且只针对C语言,使用GCC编译器. 原文请看这里:http://wiki.ubuntu.org. ...

  6. 学写PEP,参与Python语言的设计

    如果你为Python写了一篇PEP,这篇PEP成功的被Python指导委员会接受了,那么以后你在吹牛皮的时候你就可以说我主导了Python语言某个特性的设计工作. -- 跬蟒 我就问你主导Python ...

  7. 02-编写第一个C语言程序

    本文目录 1.打开Xcode,新建Xcode项目 2.选择最简单的命令行项目 3.输入项目信息 4.选择一个用来存放C程序代码的文件夹 5.运行项目 说明:这个C语言专题,是学习iOS开发的前奏.也为 ...

  8. Photoshop/PS中如何写维吾尔语等语言 乱码

    在新疆的朋友都了解很多标语上面都会有汉语.维语等两种语言.有很多维吾尔语.哈萨克语.柯尔克孜语等语言 要在PS 里进行设计处理,这时在Photoshop中进行设计时文字粘贴进来后出现不正常是乱码形式. ...

  9. 自己动手写一个编译器Tiny语言解析器实现

    然后,上一篇文章简介Tiny词法分析,实现语言.本文将介绍Tiny的语法分析器的实现. 1 Tiny语言的语法 下图是Tiny在BNF中的文法. 文法的定义能够看出.INNY语言有以下特点: 1 程序 ...

  10. 分享一个自己写的vue多语言插件smart-vue-i18n

    前言 目前有比较成熟的方案(vue-i18n)了解了下,并且实用了一下感觉对于我在使用的项目来说略显臃肿,功能比较多,所以压缩的会比较大,在移动端不太适合所以自己花一天时间撸了一个vue多语言插件,压 ...

随机推荐

  1. Libgdx游戏开发(6)——游戏暂停

    原文: Libgdx游戏开发(6)--游戏暂停-Stars-One的杂货小窝 暂停也是一个游戏的必要功能了,本文研究了Libgdx实现游戏暂停 例子以桌面端游戏实现讲解为主,至于移动端,可能之后会进行 ...

  2. 深度长文解析SpringWebFlux响应式框架15个核心组件源码

    Spring WebFlux 介绍 Spring WebFlux 是 Spring Framework 5.0 版本引入的一个响应式 Web 框架,它与 Spring MVC 并存,提供了一种全新的编 ...

  3. c语言生成随机数

    记录示例,留作自用 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) ...

  4. Mybatis 中 foreach 的四种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  5. WOE编码与IV值

    参考: WOE与IV值浅谈 机器学习-变量筛选之IV值和WOE 0. Introduction WOE (weight of evidence): 证据权重 IV (information value ...

  6. 能说下 vue-router 中常用的 hash 和 history 路由模式实现原理吗?

    这个router有两种模式:hash模式(默认).history模式(需配置mode: 'history') 然后,我们来研究下两者的原理: 我们先来认识下这位朋友#,这个#就是hash符号,中文名哈 ...

  7. RK3588开发笔记(四):基于定制的RK3588一体主板升级镜像

    前言   方案商定制的主板,加入了360°环视算法功能,涉及到了一些库的添加,重新制作了依赖库的镜像,镜像更新的原来的板子上.   定制的板子    升级接口type-c   设计接口是type-c, ...

  8. [oeasy]python0084_扩展BCD_EBCDIC_ibm的发家史

    编码进化 回忆上次内容 上次 回顾了 数字 进入二进制世界的 过程 采用的编码 是 BCD Binary Coded Decimal 也叫8421码 十进制数的 二进制形态 数字的 输出形式 辉光管 ...

  9. 配置Sprig security后Post请求无法使用

    在学习过程中发现在配置完Spring security后,Post请求失效,无法增删改数据,这里可以通过在Spring Security 的Config类中增加 也可以自定义csrf,不过目前还不是很 ...

  10. 如何让SQL Server像MySQL一样拥有慢查询日志(Slow Query Log慢日志)

    如何让SQL Server像MySQL一样拥有慢查询日志(Slow Query Log慢日志) SQL Server一直以来被人诟病的一个问题是缺少了像MySQL的慢日志功能,程序员和运维无法知道数据 ...