
c语言
傻子与白痴
路漫漫其修远兮吾将上下而求索
展开
-
C语言函数重入
C语言函数重入可重入函数:可以被中断的函数,即这个函数执行时,可以中断其执行,可以由一个或多个任务并发使用,而不比担心数据错误。 不可重入函数(不安全函数)不能运行在多任务环境下,除非能保证互斥(使用信号量/代码的关键部分禁用中断) 是由于使用了未受保护的系统资源,如全局变量区,中断向量表等。可重入函数:没有静态数据结构 不返回指向静态数据的指针 所有函数数据由函数的调用...转载 2020-01-17 15:57:36 · 1571 阅读 · 0 评论 -
中断服务函数
中断问题也是面试嵌入式岗位时,面试官比较喜欢拷问的问题之一,作为一个嵌入式开发人员,自然少不了与中断打交道,裸机程序中作为前台服务程序,发挥着重要的作用。中断服务函数应该注意的四大点:1.中断服务函数不能传入参数;2.中断服务函数不能有返回值;3.中断服务函数应做到短小精悍;4.不要在中断函数中使用printf函数,会带来重入和性能问题中断并不是程序一开始...转载 2020-01-17 14:44:45 · 9054 阅读 · 1 评论 -
volatile为什么要修饰中断里的变量
共有四种情况:就下面这三种情况,还有利用for循环去延时的程序防止被优化(编译器认为for循环没用而优化掉),没有其它了,如果是这几种,那就干脆直接用volatile修饰:一个是防止变量在其它地方被改变,而cash里没有改变,所以要求每次都要读取内存。一个是防止编译器优化,编译器感觉你这个变量不会有变化,但是实际在其它线程或硬件会改变它,所以要每次从内存读,你编译器就不要优化。所以...转载 2020-01-17 13:45:59 · 2075 阅读 · 0 评论 -
C语言运算中的数据类型自动转换原则
1、隐式转换C在以下四种情况下会进行隐式转换: 1、算术运算式中,低类型能够转换为高类型。2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。2、算数运...转载 2020-01-17 11:07:04 · 3268 阅读 · 0 评论 -
关于堆栈的讲解(我见过的最经典的)
这是一篇转发的文章,我对他进行了格式化而已,原文出处不详。一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分...转载 2019-12-18 14:25:23 · 922 阅读 · 0 评论 -
内联函数
内联函数的作用作用:不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,适用于功能简单,规模较小又使用频繁的函数。递归函数无法内联处理,内联函数不能有循环体,switch语句,不能进行异常接口声明。主要体现在于inline关键字内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的...转载 2019-12-18 11:06:05 · 1394 阅读 · 0 评论 -
STM32如何查看Flash和RAM使用空间以及如何压缩RAM的使用空间
KEIL编译完成后,在Build Output窗口会出现一下信息:Code是代码占用的空间;RO-data是 Read Only 只读常量的大小,如const型;RW-data是(Read Write) 初始化了的可读写变量的大小;ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化;简单的说就是在烧写...翻译 2019-11-29 16:11:01 · 1600 阅读 · 0 评论 -
sprintf相关源代码实现
//#include "stdafx.h"#define INCLUDE_STRING#ifdef INCLUDE_STRING #include "string.h"#endif#ifdef KERNEL #define NOFLOAT#endif#define sprintf my_sprintf#define vsprintf my_vsprintf...转载 2019-10-15 15:20:34 · 5947 阅读 · 1 评论 -
C语言~宏操作大全(宏定义、内置宏、__FILE__、__LINE__、##用法)
当然宏定义非常重要的,它可以帮助我们防止出错,提高代码的可移植性和可读性等。下面列举一些成熟软件中常用得宏定义1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容 …#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned long int ...转载 2019-10-15 14:01:48 · 2228 阅读 · 0 评论 -
字符串
int main(){ char str[50]; int n=0; memcpy(str,"this is a test.",strlen("this is a test.")+1); printf("str:%s,len:%d\n",str,strlen("this is a test.")+1); while(str[n]!='\...原创 2019-10-09 11:03:52 · 795 阅读 · 0 评论 -
C语言#pragma使用方法
转载 2019-09-26 10:21:38 · 1413 阅读 · 0 评论 -
setlocale函数
函数原型:char* setlocale (int category, const char* locale);setlocale位于头文件,setlocale() 函数既可以用来对当前程序进行地域设置(本地设置、区域设置),也可以用来获取当前程序的地域设置信息,使用setlocale需要两个参数第一个参数category:用来设置地域设置的影响范围。地域设置包含日期格式、数字格...转载 2019-09-09 10:31:27 · 949 阅读 · 0 评论 -
VC中对文件的读写
注意:1、由于C是缓冲写 所以要在关闭或刷新后才能看到文件内容2、电脑处理文本型和二进制型的不同 (因为电脑只认识二进制格式)方法一 :用C++的方法// 写文件ofstream ofs("4.txt"); // 如果我们要用这个类 我们就需要先#include <fstream.h> ofs.write("hello",strlen("hel...转载 2019-09-04 10:51:39 · 3150 阅读 · 0 评论 -
栈--表达式求值
#为表达式开始和结束的标志。原创 2019-08-21 09:23:27 · 104 阅读 · 0 评论 -
线性表--链表
1.插入2.删除时间复杂度为O(n)插入和删除都是找到i-1个结点,但是插入无需p->next是否为NULL,删除的p->next不可以是NULL。3.逆向新建4.合并...原创 2019-08-14 13:42:36 · 87 阅读 · 0 评论 -
C语言中判断ASCII码对应的十六进制数值
CPU_INT08U RxFrameData[SCI_CFG_BUF_SIZE];RxFrameData[]中保存的是十六进制数0006300C000186D8的ASCII码,想要判断RxFrameData[]的前四位十六进制数值是否为0x0006,可以直接用此判断。if((pch->RxFrameData[0]==0x00)&&(pch->RxFr...原创 2018-11-19 16:19:01 · 3358 阅读 · 0 评论 -
C语言十六进制字符串转十六进制数值
void StrToDec(CPU_INT08U *GPRSAddr, CPU_INT16U *GPRSAddrDec, CPU_INT08U nLen){ CPU_INT08U i; for(i=0;i<nLen;i++) { if((*(GPRSAddr+i)>='0')&&(*(GPRSAddr+i)<=...原创 2018-11-19 16:48:09 · 5442 阅读 · 1 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的...转载 2018-12-27 09:21:22 · 108 阅读 · 0 评论 -
c语言中volatile的用法
.volatile的本质:1> 编译器的优化在本次线程内, 当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值;当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致。当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。当该寄存器在...转载 2019-01-29 13:24:55 · 981 阅读 · 0 评论 -
Avoiding Buffer Overruns
https://docs.microsoft.com/zh-cn/windows/desktop/SecBP/avoiding-buffer-overruns缓冲区溢出:检查输入Have you used strncpy in your program? If you have then you have to remember that it doesn't add the null c...转载 2019-06-17 09:53:11 · 168 阅读 · 0 评论 -
main函数的参数
int main(int argc,char *argv[])main()函数有两个参数,argc为整型,表示命令行中字符串的个数;argv[]为指向字符型的指针数组,表示命令行中的字符串。结果...原创 2019-07-03 15:27:09 · 81 阅读 · 0 评论 -
strtok_r函数---字符串分割函数
函数原型: char *strtok_r(char *str, const char *delim, char **saveptr);参数:str:被分割的字符串,若str为NULL,则被分割的字符串为*saveptrdelim:依据此字符串分割strsaveptr:分割后剩余部分的字符串返回值:遇到第一个delim时,分割出的字符串,若没有遇到deli...原创 2019-07-03 17:32:17 · 1794 阅读 · 0 评论 -
feof()原理和用法
https://blog.youkuaiyun.com/konghouy/article/details/80530937一、feof()是什么? feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0一般在文件操作,中经常使用feof()判断文件是否结束。二、feof()的经典错误根据这个函数的定义,一般大家都是这样使用的,但是这样使用,文件中...转载 2019-07-05 11:18:50 · 11190 阅读 · 5 评论 -
C语言检查ip是否合法
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <stdbool.h>bool isVaildIp(const char *ip){ int dots = 0; /*字符.的个数*/ int setions = 0; /*ip每一部分总和(0...转载 2019-08-01 09:20:34 · 1095 阅读 · 0 评论 -
char *a 与char a[] 的区别和char** argv与char *argv[]区别
char *a 与char a[] 的区别char *a = "hello" 中的a是指向第一个字符‘a'的一个指针char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针但二者并不相同:看实例:把两个字符串相加:结果:hello0123456789对比:对比:Segmentation fault把字符串加到指针所...转载 2019-08-05 09:00:35 · 185 阅读 · 0 评论 -
int 长度
int类型的长度取决于计算机字长,32位系统,计算机字长为32位,int类型也为32位;16位系统,计算机字长和int类型均为16位。地址的长度也取决于计算机字长。...原创 2019-08-05 09:08:56 · 7496 阅读 · 1 评论 -
冒泡排序法
升序思路:相邻的数据两两比较,将最大的数值放在最后,先排好最后一个。i 为动态最后一个的序号。j 为从第一个开始直到最后一个,相邻数据比较时用。change为false,说明序列已经为升序排列,无需再排序。...原创 2019-08-14 09:00:00 · 190 阅读 · 0 评论 -
自增++ 自减--
fun(++n);先将n自增,然后传递给函数funfun(n++);先将n传递给函数fun,然后自增原创 2019-08-14 09:35:17 · 360 阅读 · 0 评论 -
数组/顺序表 插入 删除 合并
1.插入2.删除3.合并原创 2019-08-14 10:42:29 · 292 阅读 · 0 评论 -
c语言中16进制转换为十进制
方法1:使用进制转换转载:https://zhidao.baidu.com/question/51006929.html #include <stdio.h>#include <string.h>/* 十六进制数转换为十进制数 */long hexToDec(char *source); /* 返回ch字符在sign数组中的序号 */int getIn...转载 2018-10-30 15:23:30 · 22064 阅读 · 3 评论