专注于嵌入式技术分享!
【C语言】一道简单但易错的C语言面试题 【C语言】一道简单但易错的C语言面试题
题目:分析以下代码,它的运行结果是? #include <stdio.h> int main(void) { int i = -1; if (i = 0) printf("
2019-09-30
【STM32】复用时钟何时开启呢? 【STM32】复用时钟何时开启呢?
STM32的AFIO时钟真的是在开启引脚复用功能的时候开启吗?其实并不是~ 什么是复用?我们知道,STM32有很多外设,这些外设的外部引脚都是与GPIO共用的。我们可以通过软件来配置引脚作为GPIO引脚还是作为外设引脚。当引脚配置为外设引
2019-09-26
【工具】把notepad++配置成一个能编译C代码的记事本 【工具】把notepad++配置成一个能编译C代码的记事本
前言本博客已经不只一次提过MinGW了,往期关于C语言方面的推文中,示例代码都是用Notepad++来编写,然后用MinGW中的gcc工具来编译。MinGW的配置及使用方法:【C语言笔记】使用notepad++、MinGW来开发C程序。M
2019-09-20
【STM32】ISP下载的原理是什么? 【STM32】ISP下载的原理是什么?
上一篇笔记分享了STM32的串口IAP实例:STM32串口IAP分享。其中,下载IAP程序时用ISP的方式进行下载。这里的ISP又是什么呢? ISP方式下载程序原理ISP:In System Programing,在系统中编程 在STM3
2019-09-17
【STM32】串口IAP分享 【STM32】串口IAP分享
什么是IAP?IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新
2019-09-16
【C语言】易错、经典问题:return不可返回指向栈内存的指针 【C语言】易错、经典问题:return不可返回指向栈内存的指针
预备知识:内存的分类C/C++程序占用的内存分为两大类:静态存储区与动态存储区。其示意图如下所示: 数据保存在静态存储区与动态存储区的区别就是:静态存储区在编译-链接阶段已经确定了,程序运行过程中不会变化,只有当程序退出的时候
2019-09-06
【RT-Thread】内核对象模型 【RT-Thread】内核对象模型
RT-Thread中的对象有哪些?RT-Thread包括了很多不同类型的对象,如线程,信号量,互斥量等。在代码中,这些对象被汇总到一个枚举中(在rtdef.h中): enum rt_object_class_type {
2019-09-01
【C语言】代码优化的一些经验及小技巧(四) 【C语言】代码优化的一些经验及小技巧(四)
无限循环优先选用for(;;),而不是while(1)在C语言中,最常用的无限循环语句主要有两种:while(1)和for(;;)。从功能上讲, 这两种语句的效果完全一样。那么,我们究竟该选择哪一种呢? 其实,for(;;)语句运行速度要
2019-08-30
【RT-Thread】内核基础 【RT-Thread】内核基础
最近在工作中有用到多任务系统,趁热进行学习一下。这里我选择国产实时操作系统RT-Thread进行学习,因为现在很火呀。之前已经有简单地过了一遍RT-Thread,奈何学过地知识一旦不用,就会很容易地忘掉,所以应当多做一些学习笔记~ RT-
2019-08-30
【C语言】代码优化的一些经验及小技巧(三) 【C语言】代码优化的一些经验及小技巧(三)
循环展开简单的循环可以展开以获取更好的性能,但需要付出代码体积增加的代价。循环展开后,循环计数应该越来越小从而执行更少的代码分支。如果循环迭代次数只有几次,那么可以完全展开循环,以便消除循坏带来的负担。例如: for(i=0;
2019-08-29
【C语言】代码优化的一些经验及小技巧(二) 【C语言】代码优化的一些经验及小技巧(二)
函数相关1、参数的书写要完整参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充。例如: voidSetValue(intwidth,intheight); // 良好的风格
2019-08-28
程序的组成、存储与运行 程序的组成、存储与运行
一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM, RAM 相当于内存, Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。 一、编译过程之前分享过C程序的编译过程的笔记:C程序
2019-08-28
【C语言】代码优化的一些经验及小技巧(一) 【C语言】代码优化的一些经验及小技巧(一)
一、变量与值得比较1、布尔变量与零值的比较不可将布尔变量直接与 TRUE、 FALSE或者 1、 0进行比较 。据布尔类型的语义,零值为“ 假”(记为 FALSE),任何非零值都是“ 真”(记为TRUE)。 TRUE的值究竟是什么并没有统
2019-08-27
【STM32】什么是通讯? 【STM32】什么是通讯?
一、什么是串行通讯与并行通讯?按数据传送的方式,通讯可分为串行通讯与并行通讯,串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。 而并行通讯一般是指使用 8、 16
2019-08-23
【C语言笔记】goto语句 【C语言笔记】goto语句
关于C语言的goto语句存在很多争议,很多书籍都建议“谨慎使用,或者根本不用”。这里先不做过多的讨论,存在即合理,既然是C语言中的一个知识点,我们还是有必要学会使用。先看一些goto如何用: 一、goto的基本语法goto语句有两部分:g
2019-08-22
【STM32】串口空闲中断接收不定长数据(DMA方式) 【STM32】串口空闲中断接收不定长数据(DMA方式)
在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。 一、IDLE中断什么时候发生?IDLE就
2019-08-18
【工具】嵌入式中另一种打印调试的方法 【工具】嵌入式中另一种打印调试的方法
一、前言在我们的嵌入式开发中,常常把printf重定向到MCU的串口外设,再配合上位机界面软件,通过打印调试信息的方式来调试我们的嵌入式软件。 此处,我们介绍另一种打印调试的方法——SEGGER 的RTT 。RTT全称是Real Time
2019-08-16
【工具】提取代码中的关键信息生成技术文档 【工具】提取代码中的关键信息生成技术文档
一、前言以前,我们学C语言的时候,多多少少都查过一些标准库函数吧。这里介绍查找C语言的标准库函数的两种方法:一种方法是直接到http://www.cplusplus.com这个网站上去查看: 这里覆盖了C语言标准库中的所有函数,给出了每
2019-08-13
10 / 15