持续更新中...

很多想从事嵌入式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. 解决 Xshell 无法使用 zsh 的 prompt style

    为了更好的阅读体验,请点击这里 先学习一下 zsh 的配置吧~ 参考资料 从 0 开始:教你如何配置 zsh powerlevel10k 如何给 Xshell 配置呢 当我安装完 oh-my-zsh. ...

  2. MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解

    MoneyPrinterPlus可以使用大模型自动生成短视频,其中的语音合成和语音识别部分需要借助于一些第三发云厂商的语音服务. 很多小伙伴可能不知道应该如何配置,这里给大家提供一个详细的腾讯云语音服 ...

  3. Mysql 聚合函数嵌套使用

    Mysql 聚合函数嵌套使用 目的:Mysql 聚合函数嵌套使用 聚合函数不可以直接嵌套使用,比如: max(count(*)) 思路:但是可以嵌套子查询使用(先分组取出count值, 再将count ...

  4. C#去除时间格式化之后中间的T字母

    需求是这样的, 前后端传参,然后后端序列化把字符串存在数据库. 然后发现时间类型的字段,序列化之后 ,有个字母T, DateTime dt = DateTime.Parse("2024-05 ...

  5. nginx 如何利用gzip压缩配置来优化网站访问速度

    前言: 最近公司设计的网站前端是基于nuxt架构的,部署到nginx上后,首页的访问以及二级页面的访问极慢,f12观察后发现主要是一些js页面加载极慢拉低了网站的访问速度,于是便想到利用nginx里的 ...

  6. ABP框架开发实例教程-生成框架代码

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称.ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB ...

  7. win10 VMware 关闭虚拟机失败导致再打开时显示连接不上虚拟机的一种解决方法

    VMware关闭虚拟机失败,强行关闭后,再次打开VMware,打开虚拟机时提示连接不上虚拟机,没有访问权限. 先试了退出后,用管理员权限打开,无果. 然后从网上查资料,cmd->services ...

  8. 使用post请求登陆

    1.使用post请求登陆 import requests import matplotlib.pyplot as plt url = 'https://www.ptpress.com.cn/login ...

  9. Service Mesh Summit 回顾 | 轻舟服务网格的无侵入增强 Istio 经验

    在云原生社区近日主办的 Service Mesh Summit 2022 服务网格峰会上,网易数帆云原生技术专家方志恒分享了轻舟服务网格无侵入增强 Istio 的经验,本文据此次分享整理,介绍了对无侵 ...

  10. [oeasy]python0068_ 字体样式_正常_加亮_变暗_控制序列

    字体样式 回忆上次内容 上次了解了一个新的转义模式 \33 逃逸控制字符 esc esc 让输出 退出标准输出流 进行控制信息的设置 可以清屏 也可以设置光标输出的位置 还能做什么呢? 可以设置字符的 ...