cortex-M3
郭忠伟-写录
总结|记录.
电力行业,扎根,参与开发:融合终端|能源控制器|集中器|采集器|拓扑识别设备.
涉及协议:mqtt,698,10x,3761,13762,645等.
联系方式:
邮箱:guozhongwl@163.com
微信:ai-3456------596---
展开
-
内存管理:分页,分段,段页结合
内存管理:分页,分段,段页结合转载 2021-05-30 10:18:55 · 360 阅读 · 0 评论 -
字节对齐算法
算法实现:#define MEM_ALIGNMENT 4 //使用4字节对齐模式#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))/** Calculate memory size for an aligned buffer - returns the next highest *...原创 2015-12-30 17:01:48 · 903 阅读 · 0 评论 -
ping lwip网络协议栈 分析(三)
为何不同路径/地区的用户在ping同一域名(ip地址可能不通)时,路径MTU值不同?路径MTU:在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的传输单元的最大值。为什么以太网无法接收大于1500(大约、)字节的数据包?关于lwip最大接收/发送 数据字节数的设置..原创 2015-12-30 12:00:53 · 2161 阅读 · 0 评论 -
IAR cortex-M3 +ucos-III问题集
IAR设置的下载链接方式 与 板子的实际环境不统一,同样报错:"Failed to get CPU status after 4 retries retry?"新建的IAR工程,莫名进入App_Fault_ISR异常处理程序:移植的ucos-III,带着ST的V3.5库,稍微动一些代码,就会进入App_Fault_ISR,然那些代码与内存数据结构并无关系Attach to program:Verify download:Suppress download:Use flash loader(s)原创 2015-12-15 15:45:45 · 3100 阅读 · 0 评论 -
uCOS任务堆栈的深入分析
堆栈作用的就是用来保存局部变量,从本质上讲也就是将CPU寄存器的值保存到RAM中。在uCOS中,每一个任务都有一个独立的任务堆栈。为了深入理解任务堆栈的作用,不妨分析任务从“出生”到“消亡”的整个过程,具体就是分析任务的建立,运行,挂起几种状态中任务堆栈的变化情况。现在假设系统运行着一个由用户创建的用以完成打印工作的任务TPrint。TPrint最初通过OSTaskCreate()函数创建转载 2015-11-19 17:29:38 · 651 阅读 · 0 评论 -
stm32系列的32位处理器,32代表了什么--待续
stm32系列的32位处理器,32代表了什么原创 2015-11-25 17:03:28 · 3566 阅读 · 0 评论 -
IAR6.3 中对 CMSIS 的处置
进来一直在弄ucos这种RTOS的实现机制,顺便将ucosIII弄过来。。。 看着MDK环境下的教程,往IAR环境上弄,真心有所不同。 显然,对IAR编译器,不是很了解,这块有一篇文章,论编译器对开发人的重要性。 嵌入式领域,你要了解你的编译器 关于CMSIS的定义,见 CMSIS 到底是什么?IAR环境下,新建工程。报错:extern uint32_t __get_PSP(void); 已原创 2015-11-02 20:00:26 · 4298 阅读 · 0 评论 -
转----编写优质嵌入式C程序
编写优质嵌入式C程序转载 2015-11-25 14:40:17 · 621 阅读 · 0 评论 -
cortex-M3粗略延时 计算
最近调试磁铁驱动程序时,遇到一个奇怪的情况:(问题描述在下边这个帖子中)OSTimeDly在ucos最高优先级任务中,多次使用,有什么说法?只是知道问题大概出现在哪块,没找到出现这种状况的理由。顺带着理清楚一些基本的常识性的东西。如下:AHB:Advanced High performance Bus,先进的高性能总线,这是一种“系统总线”。AHB 是在地址/控制阶段和数据阶段之间具有原创 2015-11-17 19:57:07 · 2166 阅读 · 0 评论 -
IAR uCOS .icf栈、堆区大小设置规则
这里说说 堆、栈的大小设置: 堆区+栈区+其他=20K 其他:静态区+文字常量区等,要看划分种类 所以,堆区+栈区<20K, 类似molloc函数会在堆上非配内存,按应用场景划分大小,如不过分使用堆,给他小些,栈区大写,毕竟ucos用户任务+2个系统任务的任务栈也在这块呢。 另,IAR编译器 需要提前对 栈、堆进行划分。原创 2015-11-23 20:41:35 · 3634 阅读 · 0 评论 -
浅析ucos_II设备驱动的设计与实现
使用ucos实时操作系统 进行开发,不可避免的会考虑驱动程序结构的安排---相对ucos系统代码。看到几个好的文章,存放于此。ucos软件结构浅析ucos_II设备驱动的设计与实现μCOS-II下通用驱动框架的设计与实现转载 2015-11-18 15:28:44 · 2213 阅读 · 0 评论 -
cortex-M3 异常和中断
问题:1、如何开启、关闭中断2、如何开启、关闭异常3、程序只跳转一次时,把跳转需要返回地址直接存储在寄存器LR中。多次跳转呢?基础概述:操作模式:Cortex‐M3 支持 2 个模式和两个特权等级。handler模式和线程模式; 特权级和用户级。cortex-M3 寄存器组:Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能...原创 2015-11-01 13:36:57 · 4950 阅读 · 0 评论 -
cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)
SVC异常是? PendSV异常是? ucos 任务切换时机? ucos 如何满足实时性(实现)? ucos中,systick的优先级?SVC和PendSVSVC(系统服务调用,亦简称系统调用)和PendSV(可悬起系统调用),它们多用于在操作系统之上的软件开发中。SVC:SVC 用于产生系统函数的调用请求。 例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系...原创 2015-11-01 02:00:54 · 31994 阅读 · 14 评论 -
OS_CPU_A.ASM cortex-M3 解析
琢磨ucos内核进行中++>>>>>>>先上cortex-M3 与本部分相关的汇编指令相关的汇编指令至于相关伪指令,参见:-----ARM汇编伪指令----NVIC---Nested Vectored Interrupt controller--嵌套向量中断控制器这里给出NVIC寄存器映射:NVIC 空间还用来实现系统控制寄存器。NVIC 空间分成以下部分:原创 2015-11-02 14:13:44 · 4370 阅读 · 0 评论 -
ping lwip网络协议栈 分析(二)
网卡ENC28J60自动填充短针至60字节:enc28j60WriteOp(ENC28J60_WRITE_BUF_MEM, 0, 0x00);将包控制字节的bit 0位==设置为0(低),于是决定了:MACON3中的值用于确定数据包发送的方式。enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN|MACON3_FULDPX);“用 0填充所有短帧至 60字节长,并追加一原创 2015-12-25 21:15:07 · 777 阅读 · 0 评论 -
fatfs应用笔记
参考资料FatFs模块功能配置选项SD卡与fatfs文件系统(5)-在fatfs中使用多个SD卡分区原创 2019-07-25 10:06:28 · 371 阅读 · 0 评论 -
HardFault_Handler异常排查处理方案
原理:cortex-M3内核,异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈是MSP还是PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)HardFault...原创 2019-03-12 13:13:45 · 2551 阅读 · 1 评论 -
代码版本维护工具git应用笔记-持续更新
工具:工具:git命令行与TortoiseGit 图形界面交互 这里主要使用TortoiseGit工具.概念:工作区和暂存区, 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 Git的版本库里存了很多东西,,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD...原创 2018-07-27 01:58:59 · 826 阅读 · 0 评论 -
关于以太网(Ethernet II)这个网络的个人理解以及应用(1)
这些年,关于‘网络通信’的特性描述,听过最多的拟合场景就是:一个人在讲话,哪些人(们)可以听得到?最近有机会进一步的琢磨这些事,这里做个总结。单播、多播、广播:在tcpi/ip四层模型中, 网络层(ip层)的节点通信方式可以分为:单播、多播、广播三类; 网络接口层的节点通信方式只能够划分为:单播、广播 两类;(个人理解) 先大概说下因特网中节点通信方式:单播、多播、广播:让在场的特定某一个人原创 2016-09-25 17:18:30 · 9447 阅读 · 0 评论 -
关于以太网(Ethernet II)这个网络的个人理解以及应用(2)
在stm32f107环境下实现如下功能: - 以太网接口用作串口使用(区别于C/S模型); - 以太网接口接收全部的网内数据; - 对网内数据包过滤,仅接收本机相关数据包及广播包; 工具:anysend.exe:Anysend是基于Winpcap驱动开发的,实现以太网接口发送任意自组数据包的工具,各位请自行查找下载; wireshark.exe:网络抓包工具 如果你是一个嵌入式开发人员,原创 2016-09-26 00:17:08 · 18502 阅读 · 0 评论 -
STM32中GPIO的8种工作模式
STM32中GPIO的8种工作模式;开漏的应用场景:利用外部电路的驱动能力,减少IC内部的驱动。当IC内部MOSFET导通时,驱动电流是从外部的VCC流经R pull-up ,MOSFET到GND。IC内部仅需很小的栅极驱动电流。 一般来说,开漏是用来连接不同电平的器件,匹配电平用的,因为开漏引脚不连接外部的上拉电阻时,只能输出低电平,如果需要同时具备输出高电平的功能,则需要接上拉电阻,很好的一个优点是通过改变上拉电源的电压,便可以改变传输电平。比如加上上拉电阻就可以提供TTL/CMOS电平输出(V原创 2016-09-11 18:13:06 · 21719 阅读 · 1 评论 -
关于调试/仿真器的JTAG和SWD的使用==总结
嵌入式行业,涉及到系统设计,难免要考虑这些接口的设计,当前手上的一个项目,为了减小体积、节省资源,使用了stm32 swd接口,下面及此简要说明下常用的一些调试接口,,,常用调试器包括UNLINK、JLINK等,这两款支持 JTAG、SWD两种调试接口,JTAG是一种国际标准测试协议,主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA、arm、PowerPC原创 2016-09-10 13:01:14 · 12718 阅读 · 1 评论 -
IAR版本不兼容导致无法正常打开工程文件--解决方法
这里描述IAR环境下,如何解决版本兼容问题。IAR版本引起的提示消息:broken options: unknown tool: 打开工程后的一堆messages: IAR工程文件描述文件解析:查看IAR版本:使IAR版本兼容的解决方案:core_m3.c相关的原创 2016-08-27 16:45:46 · 33175 阅读 · 2 评论 -
ucosIII OS_TYPE.H /OS_CFG_APP.H 解释
ucosIII User's Manual.pdf 文档,μC/OS-III Configuration Manual章节B-2 B-3 翻译,以进一步了解ucosIII 的移植及裁剪。OS_CFG_INT_Q_SIZEOS_CFG_INT_Q_TASK_STK_SIZEOS_CFG_TASK_STK_LIMIT_PCT_EMPTYOS_CFG_MSG_POOL_SIZE翻译 2016-07-06 18:10:33 · 2708 阅读 · 0 评论 -
IAR 编译器相关知识学习==扩展关键字
IAR 编译器相关知识学习==扩展关键字供一种查找学习IAR相关知识的方法:1.扩展关键字:用于控制数据和指针__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放__tinyflash, __flash, __farflash, __hugeflash 用于flash 存储空间, 控制数据存放,控制指针类型和存放__ext_io, __io 用于I/O存储空间, 控制数据存放,控制指针类型和存放__regvar 放置一个2.函数扩展关键字:3.其它特别的关键字:转载 2015-12-15 15:48:53 · 928 阅读 · 0 评论 -
STM32+IAP方案 实现网络升级应用固件
IAR环境下STM32+IAP方案的实现 STM32浅谈之IAP.pdf 基于IAP和Keil MDK的远程升级设计 keil MDK中如何生成*.bin格式的文件概况:什么是IAP,为什么要IAP可实现的原理实现过程细节及实现 向量表偏移后的程序是否能够正常运行?.hex转.bin原创 2015-12-09 10:33:31 · 28599 阅读 · 7 评论 -
不同编译器 关于程序占用系统ROM、RAM情况的查看方法
不同编译器 关于程序占用系统ROM、RAM情况的查看方法:Code是代码占用的空间;RO-data是 Read Only 只读常量的大小,如const型;RW-data是(Read Write) 初始化了的可读写变量的大小;ZI-data是(Zero Initialize) 没有初始化的可读写变量的大小。ZI-data不会被算做代码里因为不会被初始化;简单的说就是在烧写的时候是FLASH中的被占用的空间为:Code + RO Data + RW Data程序运行的时候,芯片内部RAM使用的空间原创 2016-05-31 11:13:53 · 5379 阅读 · 0 评论 -
ping lwip网络协议栈 分析(一)
ping lwip网络协议栈 分析(一)dos---ping指令--Wireshark抓包-简单分析ICMP报文wireShark界面结构:最上面为数据包列表,用来显示截获的每个数据包的总结性信息;中间为协议树,用来显示选定的数据包所属的协议信息;最下边是以十六进制形式表示的数据包内容,用来显示数据包在物理层上传输时的最终形式。看到协议树的结构层次:frameethipicmp问:ping指令发送800字节,为何抓取到842字节呢?多出的42字节是???原创 2015-12-25 19:55:56 · 2658 阅读 · 0 评论 -
IAR + STM32固件库 启动文件startup_stm32f10x_hd.s功用及注释
startup_stm32f10x_hd.s文件模块功能:设置初始堆栈指针;用ISR异常处理程序地址来设置向量表条目;配置系统时钟,配置安装在STM3210E-EVAL板子上被用作数据内存外部sram;设置初始PC程序计数器 指向__iar_program_start代码段地址。在这个文件中的模块被包含在libs库中,可能被替换通过任何用户定义的模块--被PUBLIC定义的_program_start或者用户定义的一个开始标识;为了覆盖在库中定义的cstartup,只需添加被修改版本到 工作台项原创 2015-12-08 21:51:41 · 12031 阅读 · 1 评论 -
stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析
新建 IAR环境 STM32工程 ,报错:Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x9ca8 bytes in (total uncommitted space 0x5000)STM32存储器结构:IAR中使用.icf文件 划分存储资源:.map 目标文件实际的内存分配:原创 2015-10-28 00:11:47 · 11228 阅读 · 3 评论 -
典型通信概念整理... 待续
通讯传输的方式:单工:数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。全双工:指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。半双工:数据可以在两个方向上传送,但通信双方不能同时收发数据,这样的传送方式就是半双工制。注:2线制的485通信,属于异步串行,半双工,采用差分信号负逻辑原创 2015-10-30 15:04:23 · 631 阅读 · 0 评论 -
步进电机驱动 参数 --准备
1、步进电机旋转一周需要多少个脉冲是如何计算的?? 如细分/微步 等等有何关系??多少个脉冲一周不是计算出来的,电机做好就定死了,没法改的,目前市面上步进电机转一周最少的是整步200个脉冲,最多听说有3600的,我也是听说。2相步进电机如果走整步不细分,200个脉冲一周。细分/微步有2、4、8、16、32、64、128等,此时每周对应的脉冲数为:2×200、4×200、8×200、16×200原创 2015-03-05 16:46:16 · 3151 阅读 · 0 评论 -
STM32(Cortex-M3)中的优先级理解
详情 见 《Cortex-M3权威指南》出处:STM32(Cortex-M3)中的优先级理解--------------------------------------------------------------------------------------------很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——转载 2015-05-11 19:58:44 · 805 阅读 · 0 评论 -
stm32 堆和栈(stm32 Heap & Stack)
关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘:刚接手STM32时,你只编写一个int main(){ while(1);}BUILD框给出:...................Program Size: Code=340 RO-data=252 RW-data=0 ZI-da转载 2015-04-30 15:03:01 · 1930 阅读 · 0 评论 -
深入剖析之通过IAR MAP文件查看目标文件内存分配
深入剖析之通过IAR MAP文件查看目标文件内存分配----原文地址 详见原文。补充:Cortex-M3 存储器映射: Cortex-M3支持4GB的存储空间,如下图对照 《Cortex-M3 权威指南》中的此图,查看 ***.map文件,很多东西可以一目了然.......转载 2015-04-27 13:37:46 · 2217 阅读 · 0 评论 -
步进电机加减速控制算法 简介及资料参考
一、加减速控制曲线直线(梯形)加减速曲线--图略指数型加减速曲线 --图略S型加减速曲线 --图略二、参考资料《几种步进电机加减速方法的对比研究及其应用》-------算法原理《基于STM32的步进电机S形加减速控制曲线的快速实现方法》 -- 很实用,,,其他 --- 找度娘去.....原创 2015-04-28 20:54:16 · 10029 阅读 · 2 评论 -
STM32 + AMIS-30542 + 2相步进电机(一)
项目需要,使用的这款步进电机驱动,整理如下:斩波器(英语:Chopper),又称斩波电路,是一种转换电能的电力电子电路,根据电能的形式可分为直流斩波器和交流斩波器,其中直流斩波器是最常见的类型。直流斩波器是一种直流对直流的转换器(DC/DC converter),能够将电压值固定的直流电,转换为电压值可变的直流电源。直流斩波器通常连接在恒定直流电源和负载电路之间,通过周期性地快速开通、关断,把原创 2015-03-06 14:28:07 · 3910 阅读 · 0 评论 -
STM32 + AMIS-30542 + 2相步进电机(二)
STM32 + AMIS-30542 + 2相步进电机(二)本文主要粘贴些 使用STM32 控制AMIS-30542 来驱动2相步进电机 的关键程序段。。。原创 2015-03-10 09:27:06 · 2478 阅读 · 0 评论 -
IAR--ARM常用快捷键及调试技巧
IAR ARM 使用:常用快捷键、快捷键设置、查看、IAR debug,查看局部变量值。原创 2015-01-05 14:26:23 · 5050 阅读 · 0 评论 -
STM32F10XXXX---SysTick滴答定时器
STM32F10XXXX---SysTick滴答定时器---基本应用及中断使用.....固件库版本:V3.5SysTick 详细的说明见:《STM32F10xxx Cortex-M3编程手册》 ....有四个寄存器:CTRL,RELOAD,VAL,CALIB......基本应用实例如下:........中断实例:.......如何设置它的优先级?.....systick的中断服务函数里,是否需要清除中断标志位?.....主要有四个寄存器:CTRL,RELOAD,VAL原创 2015-02-03 16:40:10 · 1551 阅读 · 0 评论