stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】 关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个int main(){while(1);}BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-
函数指针 fun();int fun(int p);void fun(void);void *fun();void (*fun)();定义一个指针,该指针指向函数的的入口地址(void *)fun();定义一个函数,返回值为指针void (*fun)(void *);定义一个指针,该指针指向函数的入口地址,参数为一个void指针类型(void *)fu
Bootloader设计(YModem协议) 相信很多人都希望,不开盖就可以对固件进行升级吧,就像手机那些。下文中的bootload就来实现这样的功能。 前段时间有项目关于Bootload设计。所以就仔细的去了研究了一翻。以前都是用的stm32官方的,没有去深入了解。这次做完了过后,发现官方的版本存在一些问题。比如说YModem传送过程中,完全没有对数据区进行效验,只是核对了下编号,就进行烧写。整个程序完全为阻塞式,浪
JTAG各类接口针脚定义及含义 JTAG有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下。一、引脚定义Test Clock Input (TCK) -----强制要求1TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。Test
调试中日志打印printf技巧 前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏
const 详解(修饰变量、输入参数、返回值、成员函数) 看到const关键字,程序员首先想到的可能是const 常量。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need”。
stm32 堆和栈(stm32 Heap & Stack) 关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个int main(){while(1);}BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-
程序员如何保持优秀 1. 小范围的选择一些有用技术,透彻的学习它们,拥抱它们。然后不断的扩展这个范围。2. 理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。3. 理解各种算法的优点和缺点。4. 了解你的工作领域。关上电脑,去做你的用户们在做的事。5. 有准备,有愿望,有能力在任何时候投入到多种技术层面中。你必须知道表象下的技术原理。在“各个技术层面的掌握程度”和“编
回调函数的理解 在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内某些代码(我公司软件等)时没用到。于是,我对回调函数产生了很大的好奇。以前,我写VC程序时用到过回调函数,但是没有用C语言来使用。最近,看到国外大量的经典代码中广泛使用了回调函数(LWIP、某两个公司的OPC程序等),都是C语言来实现的,而不是VC windows程序中别人实现自己使用的那种。为了弄明白这种函
PBOC/EMV之TLV编码与解码 原处:http://blog.csdn.net/pony_maggie/article/details/5270548PBOC的IC卡大部分数据都是TLV格式的. EMV的手册简单的编码规则说明. 我下面很详细的分析TLV的编码格式并给出相应的TLV解码的伪代码. TLV是tag, length和value的缩写.一个基本的数据元就包括上面三个域. Tag唯一标
printf使用技巧 巧用可变参数宏、编译器内置宏和printf输出调试信息前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选
很好的debug方式取代printf满天飞 对于喜欢用printf Debug的同行来说,最麻烦的莫过于要重复输入很多printf语句,而且模块调试完成后要手动的把它们拿掉。 现在介绍一个很好的办法:#ifdef DEBUG#define D_STR(_STR_) printf("f:%s(l:%d)%s",__FILE__,__LINE__,_STR_);#define D_LINE
C语言中的内存分配 一、C语言程序所占内存分类(1)栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。(2)堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。(3)全局区(静态区)(static):全局变量和静态变量的存储位置在一起的。初始化的全局变量和静态变量在同一块区域,而未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
【转】使用typedef定义函数指针 (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){return;}void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到
UART 与 USART 的区别 UART:universal asynchronous receiver and transmitter通用异步收发器 [Bus Signal] TX , RX USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器 [Bus Si
新建STM32工程步骤 1. 新建文件夹 DOC文件夹: 可以存放readme.txt等项目文档 Library文件夹: 可以存放ST库源码,直接复制ST库的源代码到Library文件夹,另外startup只需复制和芯片对应的.s文件即可,一般存放在-ST库3.5.0源码STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCM
STM32中如何计算波特率 波特率的计算 STM32下的波特率和串口外设时钟息息相关,USART 1的时钟来源于APB2,USART 2-5的时钟来源于APB1。在STM32中,有个波特率寄存器USART_BRR,如下: STM32串口波特率通过USART_BRR进行设置,STM32的波特率寄存器支持分数设置,以提高精确度。USART_BRR的前4位用于表示小数,后12位用于表示整数。但是它还不
经验分享——EEPROM读写及数据管理 1)有关 芯片内部自带的E2PROM有的资深的工程师可能不是很愿意用MCU自带的E2PROM,大概是这些家伙上过什么当、受过骗还是什么的。简单说一下优缺点吧:(1)片内集成的感觉挺便宜的,和MCU一起卖的,对成本要求严格的,写次数很少的场合一般会考虑,至少能省个2、3毛钱吧;(2)缺点的话,可能擦写次数、稳定性没有外挂的专用芯片厉害;2)
NRF24L01+USART搞定有线和无线通信 前言一般进行远程监控时,2.4G无线通信是充当远程数据传输的一种方法。这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据接收的适配器。这里基于stm32分别设计了现场部分和适配器部分,这里只是基本通信功能实现的讲解,一些复杂的技术比如加密、可靠等要根据具体的应用来设计~总体说明这里采用stm32作为MCU
stm32串口接收、TF卡存储丢数现象解析与总结 stm32串口接收、TF卡存储丢数现象解析与总结问题:待接受的串口数据是9600波特率,一行一行的发送,最长一行不超过1024字节。 在利用stm32的串口进行数据接收,设置两个1024大小的buf,轮流接收,轮流写入TF卡, 为什么中间总会出现完整的一行无发记录下来的问题呢。解析:我确定是中间的数据丢失,我估计很大原因就是接收和写保护偏差问题。 刚才用串口调试攻击分别以1