电子产业一站式赋能平台

PCB联盟网

搜索
查看: 56|回复: 0
收起左侧

新员工一口气写完这些C语言例子,领导直接给他转正了!

[复制链接]

473

主题

473

帖子

5190

积分

四级会员

Rank: 4

积分
5190
发表于 2024-6-28 11:45:00 | 显示全部楼层 |阅读模式
点击左上方蓝色“一口Linux”,选择“设为星标
第一时间看干货文章
?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式知识点-思维导图-免费获取?【就业】一个可以写到简历的基于Linux物联网综合项目?【就业】找工作简历模版

h5azazouzh364025253332.gif

h5azazouzh364025253332.gif

很多想从事嵌入式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
    camerav4l2-ctl、media-ctl -p、ffplay
    9. i2ci2cdetect、i2cdump、i2cget、i2cset、i2ctransfer
    10. 仪器逻辑分析仪、示波器、稳压电源、频谱仪、万用表
    电烙铁
    文章中的例子源码,一口君后续会逐步完善并陆续更新,
    有编写出来的老铁,也可以将答案发给我!
    比一比,谁写的更好,效率更高!

    end

    一口Linux

    关注,回复【1024】海量Linux资料赠送
    精彩文章合集
    文章推荐
    ?【专辑】ARM?【专辑】粉丝问答?【专辑】所有原创?【专辑】linux入门?【专辑】计算机网络?【专辑】Linux驱动?【干货】嵌入式驱动工程师学习路线?【干货】Linux嵌入式所有知识点-思维导图
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表