
C语言
Hello Jason
认真写好每一行代码!
展开
-
vscode自动编码识别
【代码】vscode自动编码识别。原创 2024-01-22 08:43:06 · 719 阅读 · 0 评论 -
异步消息的传递-回调机制
1 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调转载 2020-12-10 16:09:50 · 825 阅读 · 0 评论 -
函数设计之高扇入合理扇出
扇出是指一个函数直接调用(控制)其它函数的数目,而扇入是指有多少上级函数调用它。扇出过大,表明函数过分复杂,需要控制和协调过多的下级函数;而扇出过小,如总是1 ,表明函数的调用层次可能过多, 这样不利程序阅读和函数结构的分析, 并且程序运行时会对系统资源如堆栈空间等造成压力。函数较合理的扇出(调度函数除外)通常是3-5。扇出太大,一般是由于缺乏中间层次,可适当增加中间层次的函数。扇出太小,可把下级函数进一步分解多个函数,或合并到上级函数中。当然分解或合并函数时,不能改变要实现的功能,也不能违背函数间的独立性转载 2020-11-25 10:33:49 · 2383 阅读 · 0 评论 -
我思故我在之编程规范及编程思想篇
一点点记录我对编程的一些思考,不断更新中。。。1、一个好的程序应该是要做到对当前的功能要求按照高内聚,低耦合,模块化进行编程。同时能够对未来可能产生的新功能预留好相应的接口。并且作为嵌入式软件,要为后期的不同平台移植做好分层。2、禁止无效注释,例如:rcvDataFlag = 1;//将rcvDataFlag 值置1.这就是一个无效注释。注释应该体现置1的效果。例如:rcvDataFlag = 1;接收到有效的移动协议数据,需要进一步解析。3、尽量不要一直嵌套,if嵌套5层以上基本上非常不利于代码的阅.原创 2020-11-24 11:21:20 · 235 阅读 · 0 评论 -
if/ else 你真的会吗?
目录为什么我们写的代码都是if-else?代码if-else代码太多有什么缺点?是否有好的方法优化?如何重构?异常逻辑处理型重构方法实例一:异常逻辑处理型重构方法实例二:异常逻辑处理型重构方法实例三:异常逻辑处理型重构方法实例四:状态处理型重构方法实例一状态处理型重构方法实例二总结 尽可能地维持正常流程代码在最外层,保持主干流程是正常核心流程...原创 2020-11-24 11:08:46 · 373 阅读 · 0 评论 -
编程格式注意事项---后期慢慢补充
命名法:一、变量1、局部变量 1)定义循环:i,j,z,x,y; 2)单个词时小写,多个词时,使用小驼峰命令;2、模块变量 1)定义成static,使用匈牙利命名法+大驼峰命名法:s_DataLength;3、全局变量 1)使用匈牙利命名法+大驼峰命名法(帕斯卡命名法):g_DataLength;4、指针变量 1)使用匈牙利命名法+大驼峰命名法:*p_DataLength;二、函数 1)小驼峰命名法:fGetData(void);三、宏定义...原创 2020-11-03 10:07:00 · 241 阅读 · 0 评论 -
最轻量级的C协程库:Protothreads
原文地址:https://www.linuxidc.com/Linux/2012-07/66395p2.htm协程的好处不用再多说,作为与函数调用/返回相对的概念,它使我们思考问题的方式经历一场变革。现在我们关注的是C,由于C本身的特质,将协程引入其中将会是一 个挑战。无数先驱已经为这个目标抛了头颅洒了热血,于是我们有了libtask之类。而这里提到的,是一个堪称最轻量级的协程实现:Protothreads(http://dunkels.com/adam/pt/index.html)。所谓最轻量级,就是原创 2020-10-14 16:53:58 · 1104 阅读 · 0 评论 -
达夫设备(Duff‘s Device)
一、简介看到标题,大家也许知道我们要讲的内容是什么了。但是很多人可能又对这个达夫设备(Duff's Device)感到很陌生,这到底是什么东东啊?所谓的Duff's Device其实只是一种代码的特殊写法,他将switch和do...while结合起来使得算法效率变高,先上代码:void fDuffDevice( int * to, int * from, int count){ int n = (count + 7 ) / 8 ; switch (count % 8 )原创 2020-10-14 13:35:57 · 1244 阅读 · 0 评论 -
STM32F103+UCOS-II 实现临界区不关闭重要中断
使用stm32时,在ucos进入临界区代码时,我们需要关闭掉中断,出临界区后再开启中断。使用如下代码:#define OS_CRITICAL_METHOD 3#if OS_CRITICAL_METHOD == 3#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}#endif那如果我们用到某些中断需要快速原创 2020-09-24 11:39:24 · 885 阅读 · 0 评论 -
C语言之联合体通用变量类型之妙用
当我们用C语言进行编程时,经常遇到需要将不同类型的变量进行类型转换,我们用得比较多的都是用强转方式进行转换。但是如果我们定义了一个结构体,而这个结构体的成员对象有可能是u8、int_8t、u16、int_16t......等等。那这时候该怎么解决这个问题呢?具体如下:// ---parameterSet.htypedef union{ u16 toDataU16; int16_t toDataI16; u8 toDataU8; int8_t原创 2020-09-10 14:17:49 · 693 阅读 · 0 评论 -
C语言 联合体使用技巧之位带操作
1.联合体union当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:1)联合体是一个结构;2)它的所有成员相对于基地址的偏移量都为0;3)此结构空间要大到足够容纳最"宽"的成员;4)其对齐方式要适合其中所有的成员;具体使用方式如下,直接看代码:typedef union SYSTEM_FAULT{ uint16_t all; struct { u原创 2020-08-08 09:39:31 · 3058 阅读 · 0 评论 -
void *变量用法
http://blog.youkuaiyun.com/u012349696/article/details/51296598void含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义: void a; 这行语句编译时会出错...转载 2020-03-25 09:06:41 · 626 阅读 · 0 评论 -
C的面向对象化
1.在面向对象的语言里面,出现了类的概念。类是对特定数据的特定操作的集合体。类包含了两个范畴:数据和操作。而C语言中的struct仅仅是数据的集合,我们可以利用函数指针将struct模拟为一个包含数据和操作的”类”。2.用C程序模拟一个最简单的“类”#define C_Class structC_Class A { C_Class A *A_this; ...转载 2020-02-13 08:37:51 · 252 阅读 · 0 评论 -
C语言全局变量那些事儿
原地址:https://www.cnblogs.com/alantu2018/p/8503447.html作为一名程序员,如果说沉迷一门编程语言算作一种乐趣的话,那么与此同时反过来去黑一门编程语言就是这种乐趣的升华。今天我们就来黑一把C语言,好好展示一下这门经典语言令人抓狂的一面。我们知道,全局变量是C语言语法和语义中一个很重要的知识点,首先它的存在意义需要从三个不同角度去理解:对于...转载 2020-02-12 09:56:45 · 923 阅读 · 0 评论