- 博客(54)
- 收藏
- 关注
转载 ucosii 系统栈,任务栈
1.之前一直不了解堆栈向下生长、向上生长究竟表示什么意思。最近仔细学习了下,简而言之,向下生长是指数据从高地址向低地址增长;向上生长就是数据从低地址向高地址增长。堆栈增长演示: 上图显示了堆栈 向上增长和向下增长的区别。如果堆栈是向下增长,也就是从高地址向低地址增长,那么在任务刚开始创建后,堆栈是空的。如图中例子,栈顶在为TaskStk[0][511],栈底为在T...
2019-04-03 15:37:20 1371
原创 TM4C123GH6PZ程序仿真时进入FaultISR的一个原因
背景知识:TM4C123GH6PZ该款MCU支持FPU单元。在我一直ucos时,发现程序仿真时总会进入FaultISR,经过查找确认,原因如下。 在某些函数使用了float的变量,而且在keil软件设置中选择了使用FPU,见图1,而程序当中任务跳转时没有按照对应FPU设置堆栈操作,从而导致了进入FaultISR。 ...
2019-04-01 10:14:16 1238 1
原创 函数指针形参
一、在介绍指针形参之前,先简要说明下两个运算符 & 和 *。1、取址运算符 & 用来取得其操作数的地址。取址运算符的操作数必须是在内存中可寻址到。换句话说,该运算符只能用作函数或对象(例如左值),而不可以用于位字段,以及那些未被存储类型修饰符register声明的内容。float x, *ptr;ptr = &x; // 合法:使得指针p...
2019-03-22 15:16:04 5080
原创 keil仿真调试时查看数组全部内容的方法
在keil进行仿真调试时,经常需要查看变量的运行数据。例如有时需要查看数组的全部内容。接下来介绍如何查看数组的全部内容。 点击View--Watch Windows--Watch 1(Watch 2),即可弹出查看窗口。在其中输入某数组名,即可查看该数组的所有内容。...
2019-03-22 10:43:18 11807
转载 C语言_数组名、数组地址
1.开篇很多博客和贴吧都有讨论这个话题,各有自己的表述方式,今天在他们的基础上我将继续试着以我自己理解的方式总结一下,欢迎大家的审阅和指评。2.论数组名array、&array的区别——省政府和市政府的区别例如:int array[4] = {0};总所周知,其中的&array是整个数组array的首地址,array是数组首元素的首地址(和&array[0...
2019-03-22 10:34:47 730
转载 数据存储_内存对齐和结构补齐
首先我们先看看下面的C语言的结构体:typedefstructMemAlign{ inta; charb[3]; intc; }MemAlign;以上这个结构体占用内存多少空间呢?也许你会说,这个简单,计算每个类型的大小,将它们相加就行了,以32为平台为例,int类型占4字节,char占用1字节,所以:4 + 3 ...
2019-03-22 10:15:40 563
转载 数据在堆栈中存储方式
一、一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) :一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注malloc,calloc,new申请的内存均位于此区。3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块...
2019-03-22 10:13:29 8113
原创 Steve Jobs by Walter Isaacson 读后感
最近读了史蒂夫.乔布斯传。读这本书的目的其实是对现实自己的状况有些疑惑,想通过读这本书看看前人在类似境遇时候是怎么做的。读本书之前脑中有萦绕着几个问题。例如:1、乔布斯是怎样的人,之前有听说别人说过乔布斯傲慢自大、自私等等,想通过本书了解下。2、乔布斯在面对公司较多的产品线时是怎样做得。3、iphone是怎样的契机才被打造出来的等等。 首先回答第一个问题,乔布斯是怎样的人? 当我合...
2018-08-29 16:35:51 809
转载 锂离子电池--存放
锂电池在使用与搁置过程中,电池不断形成/消耗SEI膜,会产生助负极成膜类气体,会出现胀气(鼓包)现象。另外,长期满电存放时,锂电池内部晶体过于活跃也可能导致电池胀气。 锂电池不管使用与否,随时间推移,容量都将不可避免的会有损失(不可恢复性的损失)。当电池电压比较高时,这种反应就越快,所以锂电池长期不用的话,不能满电存放。 锂电池长期满电存放弊端:1.增加安全隐患。2.加速电池老...
2018-03-08 18:07:02 1248
转载 锂离子电池--SEI膜
锂离子电池在电池首次从放电过程中,电极材料与电解液在固液相界面上发生反应,形成一层覆盖于电极材料表面的钝化层。这种钝化层是一种界面层,具有固体电解质的特征,是电子绝缘体却是锂离子的优良导体,锂离子可以经过该钝化层自由地嵌入和脱出,因此这层钝化膜被称为“固体电解质界面膜”(solid electrolyte interface),简称SEI膜。SEI膜的性能影响 1. SEI膜的形成消...
2018-03-08 17:19:12 5057
转载 锂离子电池正负极
锂离子电池一般而言分为主要四大部分是正极材料、负极材料、隔离膜和电解液。但是,除了主要的四大部分外,用来存放正、负极材料的集流体也是锂电池的重要组成部分。集流体基本信息 对于锂离子电池来说,通常使用的正极集流体是铝箔,负极集流体是铜箔,为了保证集流体在电池内部稳定性,二者纯度都要求在98%以上。随着锂电技术的不断发展,无论是用于数码产品的锂电池还是电动汽车的电池,我们都希望电池的能量...
2018-03-07 11:45:44 4862
转载 串口、UART、RS232、RS485
一、串口即串行接口,指数据一位一位地顺序传送。二、通讯问题和交通类似,串口通信可以用公交类比。 公交运行可以简单分成两个部分:1、车站 2、公路。其中车站决定了车上装什么(人),怎么发送(班次)等。当汽车跑在路上,就要遵守公路交通规则,过桥有过桥的规则,高速有高速的规则,和车站没有关系了。 回到串口通讯,其实,UART就相当于车站,而RS232/RS485对应于公路规则。
2018-01-21 20:51:50 395
原创 霍尔电流传感器
一、霍尔效应霍尔传感器是根据霍尔效应制作的一种磁场传感器,霍尔效应是磁电效应的一种。霍尔效应从本质上讲是运动的带电粒子在磁场中受洛仑兹力作用引起的偏转。当带电粒子(电子或空穴)被约束在固体材料中,这种偏转就导致在垂直电流和磁场的方向上产生正负电荷的聚积,从而形成附加的横向电场。对于图一所示的半导体试样,若在X方向通以电流Is,在Z方向加磁场B,则在Y方向即试样A,A′电极两侧就开始聚积异号电荷
2017-12-07 17:18:48 11363 2
转载 上下拉电阻-RS485(三)
一、为什么需要加上下拉电阻?根据RS-485标准,当485总线差分电压大于+200mV时,485收发器输出高电平;当485总线差分电压小于-200mV时,485收发器输出低电平;当485总线上的电压在-200mV~+200mV时,485收发器可能输出高电平也可能输出低电平,但一般总处于一种电平状态,若485收发器的输出低电平,这对于UART通信来说是一个起始位,此时通信会不正常。当48
2017-09-01 17:52:57 3834
转载 通信总线-RS485(二)
RS485通信总线究竟使用几根线?这个问题之前没有深究过。趁着使用MODBUS通信的机会仔细研究了下。通信时使用隔离电源已没有疑问(如有疑问,可参考我 RS485(一) 文章中所述原因)。现在有个新的问题,使用隔离电源后,是否要将节点的隔离电源地连接在一起。RS485两边的GND肯定不连接,如果是那样还叫差分吗?RS485就想成一个差分输入的运放,解决长线通讯时的共模干扰,RS485的电压
2017-09-01 15:41:58 2463
原创 隔离通信-RS485(一)
最近在使用MODBUS通信,了解到MODBUS比较多是基于RS485的物理层。之前也有使用过RS485,不过都是使用前人成熟的方案,个人没有仔细研究推敲。趁这次使用MODBUS好好学习了下,以保证后续通信设计的可靠。一、RS485特点1.电气特性:采用差分信号负逻辑。逻辑“1”以两线间压差-2V~-6V表示,逻辑“0”以两线间压差+2V~+6V表示。2.RS485采用平衡驱动器和差分接
2017-09-01 11:51:35 9026
原创 MOS管大电流问题
最近在做一款产品,因为充放电电流达到100A,电流比我之前做的产品都大,所以在考虑到底是选用MOS还是继电器。自己一直有个疑问,因为看的几款MOS规格书中ID都达到了100A,但是和供应商沟通都说工作时要用8~10并联使用。如下图:规格书中标的ID已经足够大。图一 后来查阅资料才明白这个ID 虽然是 Continuous Drain Current 但是指的是长期脉冲电流。
2017-07-04 09:52:54 10903 1
转载 Project rule not found--C++ Builder上位机
最近在进行测试上位机的编写,因为是在之前上位机基础上面进行修改,有个.lib文件已经找不到了,所以编译时总会提示错误。根据提示是一个GIFIMAGE.LIB,我的上位机最终不需要这个库,所以也不打算安装。这时就有问题了,怎么才能不安装库的情况下仍然能使用之前的上位机进行修改编译呢?在网上搜索发现用另外的文件打开.bpr工程文件,然后将文件中含有报故障的.lib库删掉即可,于是我使用记事本打开.bp
2017-06-06 17:45:53 1050
转载 stm8s使用总结--no default placement for segment .
打开 project->settings->linker->category->Input,然后Code,constants那一区域添加.(编译器提示的缺少的字段),应该就可以解决了。
2017-06-01 14:10:33 2257
转载 stm8使用总结--segment .ubsct size overflow
导致COSMIC报告segment .ubsct overflow错误的根本原因是内存溢出, 相关原因分析如下: 例如,如果使用的是STM8S105系列MCU,MCU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 。在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct
2017-06-01 14:07:02 6155
原创 SPI和IIC通信区别
一、IIC IIC 是多主设备的总线,IIC没有物理的芯片选择信号线,没有仲裁逻辑电路,只使用两条信号线—— ‘serial data’ (SDA) 和 ‘serial clock’ (SCL)。 IIC协议规定: 第一,每一支IIC设备都有一个唯一的七位设备地址; 第二,数据帧大小为8位的字节; 第三,数据(帧)中的某些数据位用于控制通信的开始、
2017-05-05 17:25:11 7554 1
转载 串口--异步通信和同步通信深入理解
在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。而按照串行数据的时钟控制方式,串行通信又可分为同步通信和异步通信两种方式。同步和异步大家从名称上就大概知道区别在哪里,简单的说就是主机在相互通信时发送数据的频率是否一样。异步通信就是发送方在任意时刻都可以发送数据,前提是接收端已经做好了接受数据的准备(如果没有做好接受准备,数据肯定发送失败),也正是因为发送方的不确定性,所以接
2017-05-05 17:14:28 15260
原创 stm32f103-I2C学习
这两天在学习stm32f103的I2C总线,查看之前关于I2C总线代码,发现代码中未开启I2C的外设时钟,但是实际的电路中有使用到I2C总线器件,这让我很疑惑。自己查看了程序代码发现代码并未使用stm32的硬件I2C模块,而是使用了GPIO模拟了I2C接口使用。于是我在网上搜索了关于stm32的I2C使用才发现stm32f101x和stm32f103x系列的I2C的确使用中有BUG,而且ST官方也
2017-04-25 14:27:24 2736
转载 void及void指针理解使用
最近在学习RTOS系统,在代码中使用了很多的void 及void *,之前对此一直懵懵懂懂,所以专门抽出时间学习了void及void * 的含义及使用。一、void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。二、void真正发挥的作用在于: (1)对函数返回的限定; (2)对函数参数的限定三、void的使用规则:
2017-04-24 13:11:40 747
原创 宏定义(#define)和常量(const)的区别
之前一直没有仔细研究过 #define 和 const 的区别,最近由于种种原因被问及此点,完全一头雾水,于是便搜集相关资料做了如下的总结。#define和const区别1.类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查其中,边际效应是指如下错误
2017-04-18 17:27:23 1817
原创 静态功耗具体指什么
之前我的理解一直为静态功耗等同于关机功耗,今天专门搜索了解了下。百度百科给出的定义是指漏电流功耗,是电路状态稳定时的功耗,其数量级很小。其实这个定义很模糊,怎样的状态是电路稳定状态。我自己的理解是静态功耗为两种:一、等同于关机功耗,即器件全部关闭时漏电流功耗。二、等同于待机功耗,即系统无负载时待机状态下功耗,如开关电源无负载时的功耗。综上,以后说何种功耗时最好还是分别说待机功耗、关机后功耗。
2017-03-06 11:27:17 13526
原创 PCBA中电芯采样电路处使用0.1uf电容,AD采集电压不稳
一、新制作的PCBA烧录程序后,进行校准时发现第一节电压总是在跳动,变化范围也比较大3V~4V。如下是电路图电路电芯电压采集的原理是利用两个MX4617模拟多路开关,两个模拟开关分别导通一个如:B1(cell1)、B0(cell0)两个再做减法,即可得到第一节电芯电压。控制两路开关的是单片机。二、在C16为0.1uf时,上位机采集到的第一节电压一直在变动,后来将C16更换为1nf后
2017-02-22 17:28:17 5267
原创 stm8s003使用心得_时钟(CLK)
本文介绍stm8s003MCU的时钟(CLK)。前几天直接使用官方的库开发的程序,直接利用了库函数进行的时钟及TIMER的配置,其中有一些不太明白的地方,今天又仔细看了datasheet,有了更多的了解。 由于产品要控制成本,我选择使用的是MCU的内部时钟HSI 16MHz RC。通过下图1,可以更直观的了解MCU的整个时钟情况。
2017-01-12 11:19:36 10002
转载 如何使用STVP烧录程序
使用STVP烧录可以运行独立的烧录软件ST Visual Programmer (STVP)进行STM8芯片烧录。运行“开始”->ST Toolset->Development Tools -> ST Visual Programmer,运行界面如图1所示。使用STVP烧录" title="2.4.2 使用STVP烧录" style="margin:0px; padding:0px
2017-01-11 17:37:29 17753
原创 stm8s003MCU_PWM_引脚功能配置
最近在使用stm8s003MCU进行一款LED灯产品的开发。我使用的是TIM2的PWM输出功能,使用TIM2_CHANNEL3,PA3引脚复用为TIM2_CH3。一、如何复用PA3引脚为TIM2_CH3 stm8MCU的引脚复用功能并不像我之前使用过的NXP的MCU或者51MCU。之前使用的NXP MCU引脚有专用的引脚功能配置寄存器,可以通过配置寄存器将引脚配置为不同功能。s
2017-01-11 17:11:21 12071
原创 stm8s_STVD生成interrupt_vector.c问题
在使用STVD软件开发stm8sMCU时,打开STVD软件,系统自动生成中断向量文件vector.c。其中可以看到如下的代码 参考stm8s mcu的官方文档PM0044 program manual,可以了解到mcu有32个4字节的中断向量入口,其中操作码为0x82,紧跟的是24位的地址。而上图中代码就是中断向量的入口地址并且NonHandledInterrupt刚好时@
2016-12-30 16:27:10 3568
原创 AD使用总结4——PCB天线知识
这几天在做一个灯的产品,原理图画好后外发厂家画PCB并生产。后来厂家发送过来的PCB文件中发现有几个弧形接近环形的走线,第一感觉是没见过这种总弧线的,另外由于弧线很大,怀疑会引进干扰或形成天线。自己不是很懂PCB走线及天线,只是怀疑会形成天线,所以就查阅了好多资料,大概搞懂了些。 首先,我的担心是会形成天线,对其他线路造成干扰或者容易被其他干扰。那就首先看下关于天线的资料。一、
2016-12-29 16:30:55 38081
原创 stm8s使用问题总结2——AD转换
最近在进行stm8s003MCU的嵌入式开发,因为其中要进行电压采集,所以学习了下该MCU的ADC模块。之前自己也开发过NXP的MCU,但是之前主要是在前人的基础上进行的开发,所以对ADC其实没有很深刻的认识。
2016-12-28 15:34:58 8564
原创 stm8s使用问题总结1——segment .text size overflow
这几天在使用stm8s003MCU进行嵌入式开发,之前没用过stm8系列的MCU,在使用过程中不免遇到很多问题,本文讲述的即是开发过程中一个问题。在使用stm8s003编程过程中,使用了官方的库文件,在进行build时候,报了一个error:segment .text size overflow。经过查阅资料才发现之所以出现本错误是因为代码长度超过了MCU的flash。因为stm8s003的fla
2016-12-27 17:06:47 8544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人