【C 语言知识框架】
逐个知识点梳理
吴秀华Cherry
重技术、懂流程、轻管理
展开
-
【PCLint】 Keil环境下使用方式
不说PCLint的安装PCLint的配置Keil环境搭建检查方法不说PCLint的安装网上一大堆,自己找PCLint的配置找到PClint的安装路径,打开“CONFIG.exe”配置软件。 其Welcome界面如下,点击“下一步”: 其PC-lint for C/C++ v9.00界面如下,点击“下一步”: 其PC-lint界面如下,选择配...原创 2017-12-13 22:52:05 · 2778 阅读 · 1 评论 -
《MISRA-C 2004 工业标准的C编程规范》-初始化规则
目录目录初始化规则9.1(强制):所有自动变量在使用前都应被赋值。规则9.2(强制):应该使用大括号以指示和匹配数组和结构的非零初始化构造。规则9.3(强制):在枚举列表中,“=”不能显式用于除首元素之外的元素上,除非所有的元素都是显式初始化的。初始化规则9.1(强制):所有自动变量在使用前都应被赋值。实际中,一些嵌入式环境没有实现这样【ISO C标准:具...原创 2017-09-17 22:29:54 · 662 阅读 · 0 评论 -
《MISRA-C 2004工业标准化的C编程规范》笔记——常量、声明与定义
目录目录常量声明与定义常量规则7.1(强制):不应使用八进制常量(0除外)和八进制escape序列。 任何以0开始的整型常量都被看做是八进制的。 如: 052——八进制,即为十进制的42。声明与定义规则8.1(强制):函数应当具有原型声明,且原型在函数的定义和调用范围内都是可见的。 建议: 在头文件中声明函数(即给出其原型),并在所有需要该函数原...原创 2017-09-12 21:38:28 · 857 阅读 · 0 评论 -
《MISRA-C 2004工业标准化的C编程规范》笔记——背景、范围、简介
目录目录MISRA-C背景MISRA-C范围使用MISRA-C规则简介规则MISRA-C背景【应用领域】 汽车工业领域的实时嵌入式应用。 【安全相关系统中的C使用】 不建议再安全相关系统中使用汇编语言。 【标准化】 MISRA-C-2004使用的标准是有ISO9899:1990定义的C编程语言(即C90)。 【MISRA-C的目标】 为促进钙语言的...原创 2017-09-09 21:32:46 · 3859 阅读 · 0 评论 -
【GO】串口简单通讯
背景最近再学习 go 语言,在某宝用5块钱买了个教学视频 8 日速成,目前看到了第3天的视频,进度龟速。。。。。这周末加油!然后,学习 go 语言的目的是想用 go 做自动测试,我是只学过 C ,感觉 go 语言和 C 比较相近,学起来比较简单、迅速。串口通讯代码golang 串口源码:https://github.com/huin/goserial对于 go 的串口通讯要求如下:D...原创 2018-10-18 22:25:41 · 4757 阅读 · 0 评论 -
【C 语言】数据类型的一致性
背景今天使用Visual Studio 2017 写一个程序时发现的一个问题,做下记录。目标实现定义 char 类型的数组,将部分参数与宏进行比较,输出比较结果。问题描述问题代码 char addbuf[8] = {0x5A, 0xA5, 0x00, 0x01}; printf("-91's HEX: %x\r\n", -91); // 打印 addbuf for (int...原创 2018-09-26 11:09:49 · 918 阅读 · 0 评论 -
【Go 语法】程序结构
背景Go 语言和其他的语言一样,庞大的程序都是由小的基本组件构建而来:变量:存储值表达式:通过 + - 等操作合并成大的基本类型:通过数组和结构体进行聚合表达式:通过 if 和 for 等控制语句来决定执行顺序语句:被组织成函数,用于隔离和复用函数:被组织成源文件和包 名称Go 语言有 25 个关键字,不可用作名称:break、default、case、el...原创 2018-08-15 21:15:26 · 349 阅读 · 0 评论 -
【C 语言】通过指针从 uint8_t 数组获取 uint16_t 数据
背景// gSysConfigReg 为 SysConfigRegBytes 长度的 uint8_t 数组。uint8_t gSysConfigReg[SysConfigRegBytes];方式// 通过指针方式将 gSysConfigReg[i] 地址的数据以 uint16_t 的形式读出,// 赋值给 uint16Data. uint16Data = *((u...原创 2018-07-20 15:45:09 · 10451 阅读 · 2 评论 -
【C】开关量边界条件处理——去抖动
前段时间在做开关量输出的项目。 开关量输出条件是这样的: Value >= Threshold –> Set High; Value < Threshold –> Set Low.这么看,条件是没有问题。 但如果我再加一个条件:Threshold 具有±10的误差,那上面的条件就不可用了, 因为在实际应用中,在Threshold下,因为具有误差,会导致开...原创 2018-03-26 16:11:10 · 1009 阅读 · 0 评论 -
【C】局部变量指针问题
今天同事给了一段代码,说调试有问题,让给看看。功能是把int类型变量转换为16进制字符串打印输出。 问题描述:输出全为乱码。一开始的时候,也没看出是什么问题, 在inttohex函数里面吧buffer打印出来,没有问题。 可是在main中的printf(“%s”, b);倒全是乱码了。后来想了想,发现 buffer是个局部变量,位于堆栈,在每次跳出inttohex函数后,内存会被释放...原创 2018-02-28 18:19:50 · 505 阅读 · 0 评论 -
【C】 堆栈
前几天在项目需求变更的时候,出了个问题,后来发现是由初始化赋值引起的问题。其中涉及了堆栈,特此查了下资料,整理了下。什么时候用栈?栈:由编译器自动分配内存空间。如,函数内定义的变量。 堆:由程序员分配的内存空间,如:malloc,需程序员申请,使用完成后再free。...原创 2017-12-06 22:47:13 · 1319 阅读 · 0 评论 -
【C】结构体初始化 导致 引入未知参数
最近在项目在改程序, 源程序是操作顺序是这样: UART_Init -> Flash参数写入 -> 其他 依据需求内容,操作顺序需要改成: Flash参数写入->UART_Init -> 其他 改写操作顺序后,通过在串口打印DMA1_Channel3->CCR和ISR发现UART_Init中配合参数增加了多个参数和中断开启。造成了串口输出不停的进入中断。 ...原创 2017-12-03 22:42:35 · 354 阅读 · 0 评论 -
【C】 【复习提纲】1.数据类型
一、基本数据类型整型枚举类型浮点PS:单精度和双精度的区别指针字符串常量(string literal)PS: \a二、基本声明初始化数组声明指针声明隐式声明三、typedef四、常量五、作用域代码块文件原型函数六、连接属性七、存储类型八、static一、基本数据类型整型整型包括: 1、cha...原创 2017-10-15 12:39:04 · 1813 阅读 · 0 评论 -
【C】 #ifndef条件编译
#ifndef 解释:if not defined 类型:条件编译(预处理共分:宏定义、文件包含和条件编译3种) 意义:可根据是否已定义一个变量来进行分支选择,一般用于调试。 作用: 1、防止头文件的重复包含和编译 2、便于程序调试 使用方法:#ifndef x /*先测试x是否被宏定义过*/#define x程序段1 /*若x没有被宏定义过,定义x,并编...原创 2017-10-09 22:30:52 · 800 阅读 · 0 评论 -
【C】\r\n 和 \n的区别?
\r : 回车符 \n : 换行符windows环境下的换行符: \r\n linux和html等开源或公开标准中的换行符: \n为什么windows保留\r\n作为换行符的原因: 第一台打印机,每行打印完后,在打印第二行之前,这个喷墨的玩意需要先回到这一行的行首,这叫回车。 然后跳到下一行,这才叫换行。 \r\n就是回车+换行。 保留和延续传统,就一直把换行需要叫做回车换行。...原创 2017-10-08 21:59:15 · 1278 阅读 · 0 评论 -
【Linux C】 动态内存
目录目录内存分配动态/静态内存区别:1.CPU资源2.分配位置3.支持4.分配类型5.控制权内存分配内存分配与释放是配对的。 有分配,必须有释放。 造成问题: 1.内存泄漏; 2.内存耗尽动态/静态内存区别:1.CPU资源静态内存分配 → 编译时完成 → 不占CPU资源; 动态内存分配 → 程序运行时完成 → 占CPU...原创 2017-08-08 10:50:21 · 428 阅读 · 0 评论 -
【C】 微机 word字长是多少?
问题提出原因:昨天在和一个60多岁的老嵌入式工程师沟通程序的时间,按我的思维和了解,字为32位,可是呢,在对接的时候,老工程师说16位为一个字。 这可就尴尬了,人家阅历丰富,不可能错吖,后来再上网度娘了一下,发现,对于不同的微机,字的长度定义是不一样的。先来说下微机的分类微机,微型计算机,即电脑。 其主要部分是中央处理器(CPU),计算机的运算和管理有CPU执行。 CPU功能...原创 2017-08-05 11:08:40 · 1814 阅读 · 0 评论 -
【C】 依据行数循环左移数据
这是今天做AES加密算法,其中一个步骤:行移位(ShiftRows).操作内容:第0行循环左移0位;第1行循环左移1位;第2行循环左移2位;第3行循环左移3位。代码实现:int main(int argc, char* argv[]){ char test[16] = { 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15 }; printf(...原创 2017-07-27 19:52:30 · 810 阅读 · 0 评论 -
【C】行列倒置函数实现
今天在网上看到一段行列倒置的函数,代码如下:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char* argv[]){ char test[...原创 2017-07-26 21:05:15 · 512 阅读 · 0 评论 -
【C 语言初级】数组
目录目录数组一维数组二维数组字符数组指针指针定义指针变量指针与数组通过指针引用数组指针数组和多重指针通过指针引用字符串指针与函数指向函数的指针返回指针值的函数动态内存分配与指针在上个系列【C 语言入门】里面,已经对数组和指针定义和使用做了初步的讲解,因此,在本文章中,将深入探索如何在C语言中:如何使用数组来处理相同类型的批量数...原创 2018-05-03 09:11:21 · 858 阅读 · 0 评论 -
【C 语言入门】数据类型
C 语言的数据类型数据类型,即数据对象的类型,是编程语言的基石。自编程语言发明以来,数据类型就已经存在,其最初的目的就是为了能够让程序更加充分的利用稀缺的内存空间。在硬件行业严格遵守摩尔定律发展了多年后的今天,开发者得以享受充足内存资源,同时,数据类型也被赋予了更深厚的含义:确定数据对象占用的内存空间大小确定数据对象的数值范围规定数据对象所能进行的操作(行为)EXAMPLE...原创 2018-04-07 15:08:21 · 1586 阅读 · 2 评论 -
【 C 语言入门】常量与变量
概述C/C++ 中,数据具有 “常量/变量” 两种表现形式。常量常量:指的是在程序运行过程中其数据值不可更改的量。整型常量(即整型)、浮点常量(即小数)、字符常量(用单引号括起来的一个字符)、字符串常量(用双引号括起来的字符序列)和符号常量(用const或#define定义)统称为常量。 整型常量:即整数十进制整数八进制整数:以 0 开头的,由数字 0~7 组成的数字...原创 2018-04-09 21:54:46 · 1090 阅读 · 0 评论 -
【C 语言入门】运算符
目录目录概述算术运算符关系运算符逻辑运算赋值运算逗号运算符sizeof 运算符概述C 语言运算符分为算术、关系、逻辑、赋值、逗号和 sizeof 5 大类。表达式:在 C/C++ 中,用运算符将操作对象连接起来就构成了表达式。表达式是用于计算的式子,是计算求值的基本单位。操作对象:又称操作数,操作数可以为常量、变量、函数等。运算符:又称操作符...原创 2018-04-15 21:38:05 · 935 阅读 · 0 评论 -
【C 语言入门】控制语句与结构化
目录目录概述结构化程序设计顺序结构选择结构循环结构概述C/C++的语句用来向计算机系统发出操作指令。一个为实现特定目的而编制的程序应该包含若干的语句,每个语句经过编译后会产生若干条机器指令。C/C++中的每条语句都是以分号作为结束符的,分号是语句中不可或缺的一部分。 C/C++语句可以分为以下5类:定义语句//例:int a;const...原创 2018-04-17 22:19:01 · 1413 阅读 · 2 评论 -
【C 语言入门】Demo 例程
【C 语言入门】系列共发布了 5 篇文章,分别为:《【C 语言入门】数据类型》《【C 语言入门】常量与变量》《【C 语言入门】运算符》《【C 语言入门】控制语句与结构化》C 语言入门系列到本文就结束了。下面通过一个小例程总结【C 语言入门】系列的知识点,相信当您掌握了这个小例程后,您已经入门了!C 语言入门总结例程Example:键入5个学生的名称、语文成绩、数学成绩...原创 2018-05-29 22:00:24 · 3946 阅读 · 3 评论