![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
畏天
心之所向,身之所往
展开
-
C语言以科学计数法的格式打印
前几日工作中有以科学计数法输出的需要,当时不知道库函数就有对应的格式,还自己写了一个,昨日经理说库函数自带,发现库函数的确支持。linux执行man 3 printf,可以在手册中看到如下描述e, EThe double argument is rounded and converted in the style [-]d.ddde±dd where there is one digit before the decimal-point character and the number of dig原创 2022-04-21 15:59:22 · 3256 阅读 · 0 评论 -
为什么一些宏不用{}而用do{}while(0)
自从工作依赖偶尔会在代码里见到一些do{}while(0)形式的宏定义,但是当初并不知道这样做的目的是什么,总觉得单单用一下{}就可以实现相同的功能了。最近在看linux内核源码,里面有一堆do{}while(0)的宏,于是查了一下,发现有的情况只能用do{}while(0)的形式来定义宏,用单纯的{}会导致报错。实验代码如下:#include <stdio.h>#define MACRO_DO_WHILE_ZERO(enable, fmt, args...)do { if (enab原创 2022-03-31 09:12:38 · 452 阅读 · 1 评论 -
3门问题以及N门问题模拟(C语言)
C语言模拟三门问题,付源码及运行结果。原创 2021-12-31 08:27:35 · 1371 阅读 · 0 评论 -
文件截取小工具
最近工作上有从整个flash镜像中截取某一段的需求,在网上找了一圈没找到好用的工具,于是自己写了一个小工具,在linux上编译一下即可使用,源码如下,使用方法见文章末尾。#include <stdio.h>#include <stdlib.h>unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base){ unsigned long result = 0,value; if (*c原创 2021-11-05 15:56:11 · 267 阅读 · 0 评论 -
mt7621芯片更换ram
最近公司设备的内存占用率过高,经常性的导致设备挂掉,于是准备换一个ram。解决方案:在openwrt目录下,进入target/linux/ramips/dts目录,找到设备使用的CPU型号对应的dts文件,然后修改其中内容。将memory的reg的值改成对应的ram大小,然后重新编译即可。...原创 2021-08-20 11:10:51 · 962 阅读 · 6 评论 -
c语言覆盖文件指定内容
偶尔会有覆盖文件的某一部分的需求,用c写了一个小工具,这是工具的功能实现的主要细节。代码功能:将现存的temp.txt文件的0x100到0x200地址全部填充成0xff。#include <stdio.h>int main(int argc, char **argv){ FILE *fp = NULL; int write_size = 0x100; int offset = 0x100; fp = fopen("temp.txt"原创 2021-02-21 14:58:31 · 4876 阅读 · 0 评论 -
linux kernel学习笔记(hrtimer使用示例)
#include <linux/module.h>#include <linux/hrtimer.h>struct hrtimer timer;int called_cnt = 0;static enum hrtimer_restart monitor_handler(struct hrtimer * hrtimer){ printk("timer function called %d times\n", ++called_cnt); hrtimer_forwar原创 2020-12-14 13:41:02 · 392 阅读 · 0 评论 -
linux kernel学习笔记(打印所有进程部分信息)
//task_struct.c#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init_task.h>#include <linux/sched.h>MODULE_LICENSE("GPL");static int __init print_pid(void){ int task_cnt = 0;原创 2020-12-10 15:49:19 · 666 阅读 · 0 评论 -
运算符优先级导致的bug
没记清楚运算符的优先级,第一次写出了这行代码。cpld_led_reg = cpld_led_reg&0x00ff + reg_val<<8;出现了bug,然后改写成cpld_led_reg = (cpld_led_reg&0x00ff) + reg_val<<8;又出现了bug,然后改写成cpld_led_reg = (cpld_led_reg&0x00ff) + (reg_val<<8);解决了。决定了,以后凡是用到了两种以原创 2020-09-15 11:34:41 · 125 阅读 · 0 评论 -
C语言dbm和mW相互转换算法
double dbmToMw( double dbm ){ double mW; mW = dbm/10; mW = pow( 10.0, mW ); return mW;}double mwToDbm( double mW ){ double dbm; dbm = 10*log10(mW); return dbm;}原创 2020-05-13 14:19:20 · 1015 阅读 · 0 评论 -
CRC校验代码简单注解
unsigned short CRC16_CCITT(unsigned char *puchMsg, unsigned int usDataLen){ ;//根据CRC16的标准选择初值CRCIn的值 unsigned short wCRCin = 0x0000 unsigned short wCPoly = 0x1021; unsigned char wChar = 0; whil...原创 2020-03-26 15:33:18 · 496 阅读 · 0 评论 -
Makefile学习笔记(一)
make是如何判定什么时候需要编译什么时候不需要编译的: Makefile的格式如下:targets ... : prerequisites ... command make执行时会比较targets(目标文件)和prerequisites(依赖文件)文件的修改日期,如果prerequisites中有文件的修改日期比targets中文件的日期新,或者target不存在时,make才会...原创 2020-01-14 11:33:46 · 113 阅读 · 0 评论 -
无法向flash中写数据
问题:向flash中写数据的时候发现flash被写了之后,写入的值和预期值不一样,写入的值只会和原来的值相等或者比原来的值小。 原因:flash只写0,不写1,因此需要先对flash进行擦除,擦除会将flash中的内存都变成ff,在这种情况下才能正常写入。 解决方法:先擦除flash要写入内存的部分,而后再开始向flash内存中写数据。...原创 2019-11-21 15:55:20 · 1356 阅读 · 3 评论 -
在分配内存中使用sizeof确定分配空间大小的优点
sizeof是在编译期间计算的,因而不会带来运行时性能上的损失。 sizeof时可移植的,在不同的环境 下重新编译,编译器将自动修改sizeof计算出来的值。 sizeof可以用于计算自定义的结构体的大小。 --- 《code complete》...原创 2019-11-12 11:04:37 · 348 阅读 · 0 评论 -
为何C语言允许初始化列表中出现多余的逗号
出自《C陷阱与缺陷》原创 2019-10-11 16:09:12 · 700 阅读 · 0 评论 -
函数声明和函数原型
在ANSI C中函数原型和函数声明是一样的;但是在K&R C中函数只有声明,并无原型,原型是ANSI C中加入的。 图自《C专家编程》8.4原型之痛原创 2019-09-30 09:19:42 · 416 阅读 · 0 评论 -
C语言的优先级问题
i=1,2;的问题:原创 2019-09-20 11:26:31 · 151 阅读 · 0 评论 -
二进制表示中质数个计算置位(LeetCode刷题 C语言)
题目描述:给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)示例 1:输入: L = 6, R = 10输出: 4解释:6 -> 110 (2 个计算置位,2 是质数)7 -> 111 (3 个计算置位,3 ...原创 2019-09-15 22:18:25 · 372 阅读 · 0 评论 -
位域运算符
如果已经知道某一个值永远不会超出某一个范围时,可以结合位域运算符(Bit Field)更加高效的使用内存。未用位域运算符时:#include <stdio.h> // Space optimized representation of the date struct date { // d has value between 1 and 31, so 5 b...原创 2019-09-03 16:02:37 · 891 阅读 · 0 评论