c语言学习笔记(1) C语言库函数

2023-05-16

1:ASLL可现实字符

2:.c文件



#include "library.h"


//U8 lib_int2string(U32 number, U8 *char_s)
//{
//	U32 i = 0, j;
//	U8 chTemp;
//	
//	while (number != 0)
//	{
//		char_s[i] = '0' + number % 10;
//		i ++;
//		number /= 10;
//	}

//	char_s[i] = '\0';
//	for (j = 0; j < i / 2; j ++)
//	{
//		chTemp = char_s[j];
//		char_s[j] = char_s[i - 1- j];
//		char_s[i - 1- j] = chTemp;
//	}

//	return i;
//}


/**
 * @Description - 初始化内存函数,以字节为单位
 *
 * @param[in]  - pdst : 目标地址.
 * @param[in]  - psrc : 源地址.
 * @param[in]  - psrc : 源地址.
 *
 * @return - none.
 */
void lib_memset(void *pDst, uint8_t value, uint32_t Len)
{
	unsigned char *Dst = (unsigned char *)pDst;
	for (uint32_t i = 0; i < Len; i++)
	{
		*Dst++ = value;
	}	
}


/**
 * @Description - 内存拷贝函数,以字节为单位
 *
 * @param[in]  - pdst : 目标地址.
 * @param[in]  - psrc : 源地址.
 * @param[in]  - psrc : 源地址.
 *
 * @return - none.
 */
void lib_memcpy(void *pDst, void *pSrc, uint32_t Len)
{
	unsigned char *Dst = (unsigned char *)pDst;
	unsigned char *Src = (unsigned char *)pSrc;
	for (uint32_t i = 0; i < Len; i++)
	{
		*Dst++ = *Src++;
	}
}


/**
 * @Description - 数组对比函数,对比两数组是否相等
 *
 * @param[in]  - pdat1 : 比较地址1.
 * @param[in]  - pdat2 : 比较地址2.
 * @param[in]  - len : 字节长度.
 *
 * @return - true-两数组相等  false-两数组不相等.
 */
bool lib_memcmp(void *pdat1,void *pdat2, uint32_t len)
{
	uint8_t *pdat11 = (uint8_t *)pdat1;
	uint8_t *pdat22 = (uint8_t *)pdat2;
	uint32_t i;

	for(i = 0;i < len;i++)
	{
		if(*pdat11++ != *pdat22++)
		{
			return false;
		}
	}
	return true;
}


//添加
bool lib_memadd(void *addr,uint16_t len,uint8_t val)
{
	uint8_t *pdat = (uint8_t *)addr;
	uint16_t i;

	for(i = 0;i < len;i++)
	{
		*pdat++ += val;
	}
	return true;
}


//减去
bool lib_memminus(void *addr,uint16_t len,uint8_t val)
{
	uint8_t *pdat = (uint8_t *)addr;
	uint16_t i;

	for(i = 0;i < len;i++)
	{
		*pdat++ -= val;
	}
	return true;
}


//左移动
bool lib_memmove(void *addr,uint16_t len,uint8_t nums)
{
	uint8_t *pdat = (uint8_t *)addr;
	uint16_t i;

	if (NULL == pdat)
	{
		return false;
	}
	while (nums--)
	{
		for(i = 0;i < len - 1;i++)
		{
			*(pdat+i) = *(pdat+i+1);
		}
	}
	return true;
}


/**
 * @Description - 判断某段内存是否都为指定的值
 *
 * @param[in]  - pdata : 数值指针.
 * @param[in]  - len : 字节长度.
 * @param[in]  - val :
 *
 * @return -比较结果: true-都是指定值  false-有非指定值
 */
bool lib_memcmp_const(uint8_t * addr,uint16_t len,uint8_t val)
{
	uint8_t *pdata = (uint8_t *)addr;

	while (len--)
	{
		if(*pdata++ != val)
		{
			return false;
		}
	}
	return true;
}

bool lib_memchange(void *psrc, uint32_t len)
{
	if (NULL == psrc || 0 == len) 
	{
		return false;
	}
	uint8_t *pdat = (uint8_t *)psrc;
	uint16_t i;
	
	for(i = 0; i < len /2; ++ i)
	{
		uint8_t temp = 0;
		
		temp = *(pdat + i);
		*(pdat + i) = *(pdat+len-1-i);
		*(pdat+len-1-i) = temp;
	}
	
	return true;
}


3 .h文件



#ifndef __LIBRARY_H
#define	__LIBRARY_H

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

//uint8_t   lib_int2string(uint32_t number, uint8_t *char_s);
void lib_memset(void *pDst, uint8_t value, uint32_t Len);
void lib_memcpy(void *pDst, void *pSrc, uint32_t Len);
bool lib_memcmp(void *pdat1,void *pdat2, uint32_t len);
bool lib_memcmp_const(uint8_t * addr,uint16_t len,uint8_t val);
bool lib_memadd(void *addr,uint16_t len,uint8_t val);
bool lib_memminus(void *addr,uint16_t len,uint8_t val);
bool lib_memmove(void *addr,uint16_t len,uint8_t nums);
bool lib_memchange(void *psrc, uint32_t len);

#endif



可以加入QQ群:687360507
与大伙沟通交流,技术在于分享而进步

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言学习笔记(1) C语言库函数 的相关文章

  • 代码解读一 文件名“ANO_Imu.c”

    我把这个文件的所有代码贴上来了 xff0c 供大家参考 xff0c 由于本人水平有限 xff0c 且匿名代码注释比较少 xff0c 所以很多也不是很懂 xff0c 实在是一些莫名的定义太多了 xff0c 什么w x y z h之类的 xff
  • 每周学一点 egret(2): EgretConversion 工具转换ts

    今晚无聊试了一下wing的格式化和这个转换工具 开始的时候我尝试手写翻译 xff0c 发现这一款转换也比较简单 所以尝试做了一下转换 对于如果文件名是中文 要小心一点 总是出现怪怪的 转换后 xff0c 没有直接跳转到对于的目录去 如果加上
  • 代码解读二 文件名“Ano_Math.c”

    这里面都是一些关于数学函数的骚操作 xff0c 既然不使用math h xff0c 那么至少说明这里面的数学函数调用不应比math h里面的函数慢 下面贴出代码 xff0c 简要做了个注释 xff0c 看看就行 至于怎么做的 xff0c 有
  • 关于单级PID及串级PID

    简单记录下我在学习PID过程中遇到的困难及解决方法 xff0c 希望能对大家有所帮助 1 首先 xff0c 关于PID这块理论知识必须非常清楚 xff0c 能够自行推导公式 xff0c 包括位置式PID公式和增量式PID公式 2 实现位置式
  • 代码解读三 文件名“Ano_Pid.c”

    关于PID这部分匿名代码里面有很多 xff0c 此文件是最基础的即单级PID的实现 xff0c 后面的关于速度和角速度环的串级PID及高度和高度速度环的串级PID都是以此为基础的 xff0c 所以此文件内容务必搞懂 C COPYRIGHT
  • 代码解读四 文件名“Ano_AttCtrl.c”

    这部分是关于匿名串级PID的 xff0c 我觉得有需要的同学可以直接移植 xff0c 不需要自己写了 xff0c 确实有点麻烦 xff0c 基本上代码里面都注释的很清楚了 xff0c 且由于本人水平有限 xff0c 所以也不是都很懂 xff
  • 代码解读六 文件名“Ano_AltCtrl.c”

    写了一大堆 xff0c 也不知道对不对 xff0c 贴上来让大家看看 include 34 Ano AltCtrl h 34 高度控制 include 34 Ano Imu h 34 include 34 Drv icm20602 h 34
  • 代码解读五 文件名“Ano_LocCtrl.c”

    关于这个位置速度环我还不是很理解 xff0c 因为单凭这一个文件确实看不出来什么东西 xff0c 这并不像角度环和角速度环一样有丰富的理论支撑 xff0c 至少我现在还没看到 xff0c 可能是我水平不够额 xff0c 但这并不妨碍我们继续
  • 代码解读七 文件名“Ano_MotorCtrl.c

    本文件比较简单 xff0c 代码比较少 xff0c 主要涉及解锁后四个电机依次1 2 3 4转动 xff0c 然后四轴也不会飞 xff0c 只是在原地轻微转动 xff0c 随后需要逐渐加油门至50 到达临界点 xff0c 稍微往上推一点 x

随机推荐

  • 代码解读八 文件名“Ano_FlightCtrl.c”

    这个文件代码有点乱啊 xff0c 反正没怎么看懂 xff0c 涉及到一键起飞和降落 xff0c 以及关于不同任务对应不同的灯光的切换 而且注释也还可以 xff0c 凑活着看下呗 xff0c 其实这个并不是什么关键文件 xff0c 看不懂就算
  • 代码解读九 文件名“Ano_MagProcess.c”

    本部分主要是关于磁力计进行校准操作的 xff0c 用户手册上有详细步骤 xff0c 有需要可以看看 include 34 Ano MagProcess h 34 include 34 Drv LED h 34 本文件是关于磁力计校准及相关处
  • 代码解读十 文件名“Ano_FlightDataCal.c”

    本部分主要是对IMU测量模块测量的值进行后续处理 xff0c 同时在飞行过程中不断对数据进行更新 xff0c 然后进行姿态解算 xff0c 便于后续丢进PID中进行进一步处理 根据所处位置及函数调用情况不难发现此部分算是对底层的进一步封装
  • 【阅读笔记】联邦学习实战——联邦学习攻防实战

    联邦学习实战 联邦学习攻防实战 前言1 后门攻击1 1 问题定义1 2 后门攻击策略1 3 详细实现 2 差分隐私2 1 集中式差分隐私2 2 联邦差分隐私2 3 详细实现 3 模型压缩3 1 参数稀疏化3 1 1 详细实现3 1 2 实验
  • 关于后续部分

    关于算法这块基本上算是读完了 xff0c 只能从大致上理解下了 xff0c 毕竟代码不是自己写的没有最直接的感受 xff0c 那么我们来回顾下 xff0c 试着从整体上来理解下匿名代码除了最上层之外的部分 最上层也就是包含main c在内的
  • cmake:设置编译选项

    此文为 xff1a 轻松入门cmake系列教程 常用 1 cmake debug和release设置 span class token macro property span class token directive hash span
  • cmake:pkg_check_modules

    此文为 xff1a 轻松入门cmake系列教程 理论 是什么 xff1f pkg check modules是 CMake 自己的 pkg config 模块的一个用来简化的封装 xff1a 你不用再检查 CMake 的版本 xff0c 加
  • Unix/Linux编程:针对目录文件描述符的相关操作

    始于版本2 6 16 xff0c Linux内核提供了一系列新的系统调用 xff0c 在执行与传统系统调用相似任务的同时 xff0c 还提供了一些附加功能 xff0c 对某些应用程序非常有用 新 接 口类似的传统接口备 注faccessat
  • ROS:参数服务器通信

    为什么需要 在机器人开发中 xff0c 会有很多参数和设置可以后期需要调整的 xff0c 如果都放到源码里很难实现动态修改和管理 xff0c ROS2为了解决这一问题 xff0c 提出了参数这一通信机制 是什么 如何理解 参数 xff1f
  • MySQL面试:查询性能的优化方法

    实践中如何优化MySQL 四条从效果上第一条影响最大 xff0c 后面越来越小 SQL语句以及索引的优化数据库表结构的优化系统配置的优化硬件优化 查询性能的优化方法 减少请求的数据量 只返回必要的列 xff1a 最好不要使用 SELECT
  • 基础:怎样理解Linux软中断

    软中断 softirq CPU使用率升高也是最常见的一种性能问题 从 取外卖 看中断 中断是系统用来响应硬件设备请求的一种机制 它会打断进程的正常调度和执行 xff0c 然后调用内核中的中断处理程序来响应设备的请求 为什么要有中断呢 xff
  • HTTP:HTTP报文是什么样子的

    引言 如果说HTTP是因特网的信使 xff0c 那么HTTP报文就是它用来搬东西的包裹了HTTP报文是在HTTP应用程序之间发送的数据块 这些数据块以一些文本形式的元信息 meta information 开头 xff0c 这些信息模式了报
  • ROS:服务通信

    话题通信的数据传输是单向的 xff0c 订阅端被动接收发布端的数据 这时候有人就问了 xff0c 如果发布端想主动接收数据怎么办 ROS中提供了另一种通信方式 xff1a 服务通信 ROS xff1a 通信模型 Service通信是双向的
  • linux操作系统:线程,令复杂的项目并行执行

    为什么要有线程 其实 xff0c 对于任何一个进程来讲 xff0c 即使我们没有主动去创建线程 xff0c 进程也是默认会有一个主线程的 线程是负责执行二进制指令的 xff0c 它会根据项目执行计划书 xff08 二进制文件 xff09 一
  • 存储创建及openstack对接——LVM

    说明 本方案是在每一个计算节点 上安装cinder volumes组件来完成对本地存储的管理 若无特殊说明 xff0c 以下步骤仅在计算节点执行 1 前期准备 检查计算节点是否安装 lvm xff0c iscsi 磁盘分区和格式化 裸盘不能
  • clion:输出中文乱码终极解决方案

    临时解决方案 如果在windows时发现clion乱码 xff0c 可以在cmakelist txt中 xff1a c 43 43 在cmakelist txt添加set CMAKE CXX FLAGS 34 CMAKE CXX FLAGS
  • ROS:节点

    节点 ROS xff1a 节点是什么 机器人是各种功能的综合体 xff0c 每一项功能就像机器人的一个工作细胞 xff0c 众多细胞通过一些机制连接到一起 xff0c 成为了一个机器人整体 在ROS中 xff0c 我们给这些 细胞 取了一个
  • VSCode:配置C/C++开发环境

    准备 区分编辑器 编译器 IDE xff1a 作者 xff1a C语言教学 编辑器就是处理文本 xff08 源码 xff09 的程序 xff0c 写代码写的就是文本 xff0c 编辑器可能提供智能提示 代码高亮等辅助功能 xff0c 但不负
  • NXP MIMXRT1052CVL5B + 正点原子 + MCUXpresso IDE 开发环境搭建

    NXP MIMXRT1052CVL5B 43 正点原子 43 MCUXpresso IDE 开发环境搭建 说明资料准备一切就绪 xff0c 搞他安装 IDE 及生成基本工程安装 J Link 及配置开始调试下载点击 运行 按钮 xff0c
  • c语言学习笔记(1) C语言库函数

    1 xff1a ASLL可现实字符 2 xff1a c文件 span class token macro property span class token directive hash span span class token dire