12 2019 档案

摘要:功能码4的功能是读输入寄存器,下面是modbus poll的communication中截取的一段发送、响应的数据,Tx:020-01 04 00 00 00 01 31 CA Rx:021-01 04 02 00 02 38 F1 分析如下:poll端:connection选项就不细讲了,rtu模 阅读全文
posted @ 2019-12-31 22:26 wdliming 阅读(2622) 评论(0) 推荐(0) 编辑
摘要:最后一点的代码,其实在工程项目中经常遇到,有的代码,就会被优化掉,没有被执行,所以,基本上我都是将优化等级设置为最低。这样既可以调试,也避免被编译器优化。 阅读全文
posted @ 2019-12-31 21:16 wdliming 阅读(799) 评论(0) 推荐(0) 编辑
摘要:通常,我们一般使用flash来保存一些上次保存的数据,这样下次开机后读取改flash处的变量即可读回上次配置或上次最后的数据值,但是keil其实有另外的方式来保存数据,且看下文分解。 一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位 阅读全文
posted @ 2019-12-30 17:17 wdliming 阅读(1264) 评论(0) 推荐(0) 编辑
摘要:思路: 常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启 阅读全文
posted @ 2019-12-30 17:08 wdliming 阅读(1655) 评论(0) 推荐(0) 编辑
摘要:使用mdk编程,假如有一个有用的函数你定义了但是没有显式的调用,mdk在默认方式下,将会把这个函数从整个程序总删除掉,以节省ROM. 比如,你在ROM的0x00002000处定位了一个函数,假设为void test(void),然后使用函数指针来调用它: void (*UserProgram)(); 阅读全文
posted @ 2019-12-30 17:01 wdliming 阅读(1497) 评论(0) 推荐(0) 编辑
摘要:目前keil mdk已经更新到5.29,很多新的功能,可以尝试,体验。公司项目可以使用老的编译器,自己玩玩可以谭毅新的版本的keil。 我做嵌入式行业,编程也多和硬件打交道,好多人说编译器只是工具,重要的在于算法和思想。这话说的本来没错,但要有一个条件在先:那就是你真正掌握了你所用的编译器。但就我来 阅读全文
posted @ 2019-12-30 16:37 wdliming 阅读(1133) 评论(0) 推荐(0) 编辑
摘要:1、默认情况下,keil和iar都是认为char是unsigned char,可以通过设置去更改的。 2、赋初值的全局变量和静态变量,对于在程序中赋初值的全局变量和静态变量,程序编译后,MDK将这些初值放到Flash中,紧靠在可执行代码的后面。在程序进入main函数前,会运行一段库代码,将这部分数据 阅读全文
posted @ 2019-12-30 13:37 wdliming 阅读(530) 评论(0) 推荐(0) 编辑
摘要:今天想尝试在win7的32位系统上的vscode上面安装tcc compiler,但是实际证明,这个插件不支持32为系统,64位系统下,这个插件可以使用f10快捷键来快速运行c程序,而不用编译,类似于解释器,很是方便。 tcc编译器由法国大神开发的,好像已经不更新的,国内网站很难登录。但是可以下载, 阅读全文
posted @ 2019-12-29 22:33 wdliming 阅读(504) 评论(0) 推荐(0) 编辑
摘要:在armbbs的论坛中,看到了很多新的知识点和嵌入式调试方面的工具,这个在有些时间是可以加速查找bug的工具,因此掌握一两个工具很有必要的。 1、uC/Probe,我曾经在年初的时候用过,教育版和专业版是有区别的,查看变量的时候,可以用到,同事查看任务的堆栈大小等,适合于观察变量值的变化,比如pid 阅读全文
posted @ 2019-12-28 20:44 wdliming 阅读(1711) 评论(0) 推荐(0) 编辑
摘要:这两天,学习了keil-mdk编译器的特性,这基本上独立于c语言语法,平时基本上都在强调c语言的学习,但是编译器的学习我们也要注重,类似于gcc一样,不也有很多网上的资料,讲述gcc的特性和用法吗。作为嵌入式开发,keil-mdk的特性也是要了解到,另外,iar编译器也是有其特有的编程技巧的,因此都 阅读全文
posted @ 2019-12-22 20:19 wdliming 阅读(647) 评论(0) 推荐(0) 编辑
摘要:在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级02就出现异常,调试中看了很多博客总结一下。 一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰。告诉编译器这个变量是可能随时发生变化的,使得编译器编译程序的时候,每次都从RAM里面读取数据,而不 阅读全文
posted @ 2019-12-22 15:39 wdliming 阅读(444) 评论(0) 推荐(0) 编辑
摘要:安装号以后,设置快捷键如下: 同时需要根据自己的需要的修改json文件 阅读全文
posted @ 2019-12-21 15:17 wdliming 阅读(1049) 评论(0) 推荐(0) 编辑
摘要:最近在使用ac6.9的编译器,编译速度是真的很快,使用stm32的hal库编译速度也比ac5的编译器快很多。本文试验stm32中字节对齐的代码测试,主要是结构体,因为结构体中实际项目中用到最多,同时在仿真环境中打印出来。 ac5的测试结果: 测试结果如下: ac6的测试结果: 阅读全文
posted @ 2019-12-21 13:39 wdliming 阅读(4223) 评论(0) 推荐(0) 编辑
摘要:来自armbbs 阅读全文
posted @ 2019-12-20 15:20 wdliming 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-12-20 15:12 wdliming 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-12-20 10:00 wdliming 阅读(215) 评论(0) 推荐(0) 编辑
摘要:参考:http://armbbs.cn/forum.php?mod=viewthread&tid=95190&extra=page%3D1 对于内联函数,不能像普通函数那样,直接在.h文件里面声明下,源文件里面定义下,然后其他C文件就可以调用。而加上static的前缀后,就解决了这个问题。以CMSI 阅读全文
posted @ 2019-12-19 20:06 wdliming 阅读(3688) 评论(1) 推荐(0) 编辑
摘要:github链接及教程: https://github.com/OBKoro1/koro1FileHeader 使用方法: 1.安装插件koroFileHeader 2.文件->首选项->设置->搜索fileheader->settings.json编辑 3.按照上述github教程中添加 4.保存 阅读全文
posted @ 2019-12-18 20:32 wdliming 阅读(1101) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-12-18 17:03 wdliming 阅读(2125) 评论(0) 推荐(0) 编辑
摘要:上面的两幅图是stm32系列的,但是基本原理可以通用的。 阅读全文
posted @ 2019-12-18 10:08 wdliming 阅读(278) 评论(0) 推荐(0) 编辑
摘要:#include <float.h>#include <limits.h>int n1 = INT_MIN;int n2 = INT_MAX;float f1 = FLT_MIN;float f2 = FLT_MAX;double d1 = DBL_MIN;double d2 = DBL_MAX;l 阅读全文
posted @ 2019-12-17 21:29 wdliming 阅读(609) 评论(0) 推荐(0) 编辑
摘要:int a[5] = {0,1,2,3,4};这种用法还是比较常见的。 int *ptr = (int*)(&a+1);,这种代码,目前来讲我是用的比较少,其实就是将a数组后面的一个地址赋值给了指针ptr,指针ptr还是指向int类型的。即a[4]后面的这一个内存。 阅读全文
posted @ 2019-12-17 21:18 wdliming 阅读(352) 评论(0) 推荐(0) 编辑
摘要:转载自:https://www.jianshu.com/p/3aa5997fe794 1 异常类型 Cortex-M3内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(exception)和中断(interrupt),并把它们用一个表管理起来,编号为0~15的称为内核异常,而1 阅读全文
posted @ 2019-12-17 17:16 wdliming 阅读(430) 评论(0) 推荐(0) 编辑
摘要:为何会出现大小端之分:这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于 阅读全文
posted @ 2019-12-17 15:36 wdliming 阅读(283) 评论(0) 推荐(0) 编辑
摘要:用到hex文件查看,老版本的notepad++是可以安装的,新版本的是安装不了,这个差评啊, 但是网上有方法:https://github.com/chcg/NPP_HexEdit/releases下载相应位数的的插件,x64、x86都有 进入notepad++的plugin文件夹: 注意要新建He 阅读全文
posted @ 2019-12-17 14:37 wdliming 阅读(1484) 评论(0) 推荐(0) 编辑
摘要:频率采样方法通常采样定时器的计数方法,在stm32中,输入捕捉模式,PWM输入模式,都是可以测试外部信号频率采样的。1、输入捕捉模式需要频繁的进中断,这个方式不太好的。如果一定要用,那么就软件上处理一下,定期采集,而不是一直采集2、另一种是使用dma的方式。这个可以100ms打开一次dma,读取一次 阅读全文
posted @ 2019-12-16 16:55 wdliming 阅读(1651) 评论(0) 推荐(0) 编辑
摘要:从STM32编程手册中,可以知道:在进行写或擦除操作时,不能进行代码或数据的读取操作。 比如:你在写Flash期间有接收串口数据,很有可能会丢串口数据。 因为比较耗时,所以,在写数据时,CPU不会执行其他操作。 简单说:在写Flash时,CPU 不能取指令,导致中断得不到及时响应,从而发生接收到的数 阅读全文
posted @ 2019-12-16 15:47 wdliming 阅读(1262) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2019-12-16 15:32 wdliming 阅读(935) 评论(0) 推荐(0) 编辑
摘要:本文说的__VA_ARGS__,就是一个可变参数宏,与printf中可变参数的宏定义一个道理,是新C99规范中增加的。 __VA_ARGS__详情内容 1.关于__VA_ARGS__ __VA_ARGS__它是一个可变参数的宏,就是将左边宏中“...” 的内容原样抄写在右边 __VA_ARGS__ 阅读全文
posted @ 2019-12-16 13:35 wdliming 阅读(2221) 评论(0) 推荐(0) 编辑
摘要:我现在要不要学习RTOS? 学习RTOS有什么好处? 我的项目要不要跑RTOS?······等等一些关于RTOS的问题,其实归根结底还是你对RTOS了解的不够,项目开发的经验还不足等。针对这部分朋友,今天分享几点相关内容:嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现系统 阅读全文
posted @ 2019-12-16 12:40 wdliming 阅读(4191) 评论(0) 推荐(0) 编辑
摘要:在使用联合的使用,我们通常用来判断大小端,但是其实不仅仅有这个用处。 我在网上看到还有其他的用途: 1、分离高低字节 这个需要结合cpu大小端来判断,原文如下: 这样的操作,而一个除法消耗四个机器周期,取余也需要进行一系列复杂的运算,如果在短时间内需要进行很多次这样的运算无疑会给程序带来巨大的负担。 阅读全文
posted @ 2019-12-15 17:26 wdliming 阅读(926) 评论(0) 推荐(0) 编辑
摘要:再次学习一下后两个还定义的小技巧,在vscode中可以把鼠标放到代码中,可以看到宏定义展开的最终结果。这个编辑器,值得推荐,我主打用他来写代码的。 1、如果A是一个宏形参,那么#A就是转换为字符串"A"的形参名。这个过程称为字符串化(stringizing) 2、与#运算符类似,##运算符可用于类函 阅读全文
posted @ 2019-12-15 16:43 wdliming 阅读(4206) 评论(0) 推荐(0) 编辑
摘要:c语言可以使用位域来节省变量的空间,例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。位域的取值范围非常有限,数据稍微大些就会发生溢出,这个字使用keil的使用,keil提示,溢出的警告, 因此不能忽视keil的任何警告,否则数据溢出了,你代码的功能是完不成的。 stru 阅读全文
posted @ 2019-12-15 15:44 wdliming 阅读(680) 评论(0) 推荐(0) 编辑
摘要:后文rtt代表RT-Thread 在官网公众号中,看到rtt发布了rtt nano,这个就很轻量级的rtos内核,把多余的驱动都裁剪了,因此移植工作量小,可以哪来学习一番,体验rtt之美 rtt现在也集成到cubemx5.0以上的平台,类似于freertos中间件,这个做法,倒是有点类似于大厂的风格 阅读全文
posted @ 2019-12-15 10:30 wdliming 阅读(3728) 评论(0) 推荐(0) 编辑
摘要:最近换用了vscode代码编辑器,在查看c源码的时候想折叠所有区域的代码,不知道快捷键是哪一个?查看了使用说明,快捷键如下: 1. 折叠所有区域代码的快捷: ctrl + k ctrl + 0 ; 先按下 ctrl 和 K,再按下 ctrl 和 0 ; ( 注意这个是零,不是欧 ) 2. 展开所有折 阅读全文
posted @ 2019-12-14 11:34 wdliming 阅读(5010) 评论(0) 推荐(0) 编辑
摘要:1、w5500有两种方式可以运行的,server端一般用中断的方式,效率比较高,client使用查询的模式,本身自带2k的发送缓存和2k的接收缓存。2、查询模式:有数据的时候,查询模式可以每隔一段时间去查询,有数据是读出,没有数据的继续查询,挺方便的。这个代码我参考的野火的驱动。3、中断模式:当服务 阅读全文
posted @ 2019-12-14 11:32 wdliming 阅读(2661) 评论(0) 推荐(1) 编辑
摘要:win10系统就是不太好用,很多功能我们硬件跟不上,会拖累系统运行速度,之前将win10优化了一部点,但是有些地方反而降低运行速度,因此需要关闭:1、磁盘的优化,这个说实话,可以自己来优化,没必要时刻优化的。 2、存储感知,这个关闭后,需要的时候,自己来清理工具即可 阅读全文
posted @ 2019-12-14 11:09 wdliming 阅读(407) 评论(0) 推荐(0) 编辑
摘要:今天在安富莱的论坛上ac6的使用方法,所以,就小试牛刀玩了玩,终于ok了。使用keil5.25+stm32+hal库,5.23开始才支持ac6,因此keil版本不能太低。 可以参考:https://blog.csdn.net/ybhuangfugui/article/details/99826708 阅读全文
posted @ 2019-12-13 12:35 wdliming 阅读(8013) 评论(1) 推荐(1) 编辑
摘要:今天网上看到keil中如果快速定位hardfault的方法 http://www.armbbs.cn/forum.php?mod=viewthread&tid=91746&fromuid=58 http://www.armbbs.cn/forum.php?mod=viewthread&tid=863 阅读全文
posted @ 2019-12-12 16:17 wdliming 阅读(2198) 评论(0) 推荐(0) 编辑
摘要:在硬汉平台看到一个比较好的帖子,关于如何定位HardFault_Handler,这里要记录下网址。 http://www.armbbs.cn/forum.php?mod=viewthread&tid=21940(KEIL和SEGGER都升级了Cortex-M系列内核出现硬件异常时原因分析笔记,支持G 阅读全文
posted @ 2019-12-12 13:21 wdliming 阅读(1347) 评论(0) 推荐(0) 编辑
摘要:公众号上看到一个比较好的一个github项目:https://github.com/0x1abin/MultiTimer 今天看了看,简单的,就移植了~ 且看文档的说明, 分享一个简单易用的软件定时器模块——MultiTimer。源码地址: 简介 MultiTimer 是一个软件定时器扩展模块,可无 阅读全文
posted @ 2019-12-11 10:49 wdliming 阅读(1702) 评论(0) 推荐(1) 编辑
摘要:《电子开发学习》的公众号有三篇文章讲述去耦电容的知识,讲的是电源的输入端到输出端之间,添加一个去耦电容,用于将电源的高频信号滤去掉,给DC 电源尽可能光滑的信号,理想很值的信号,是不太可能的,够用就行。 下面摘取部分内容: 本质上我们设计的所有电路可以像下图一样抽象一下: 板子上有n个不同的负载(比 阅读全文
posted @ 2019-12-10 18:15 wdliming 阅读(329) 评论(0) 推荐(0) 编辑
摘要:p是控制现在,i是纠正曾经,d是管控未来! pid的公式: 其中Kp为比例带,TI为积分时间,TD为微分时间。PID控制的基本原理就是如此。 pid的原理和代码,在木南创智的博客园中有很好的教程:https://www.cnblogs.com/foxclever/ 阅读全文
posted @ 2019-12-10 16:16 wdliming 阅读(3822) 评论(0) 推荐(0) 编辑
摘要:网上看到了j-scope的用法,可以把单片机的数据显示成波形,这个和我使用的STMStudio有点类似,但是有区别: 1、STMStudio这个需要stlink结合swo的输出口,j-scope不需要swo口,当然,也只能是jlink才能用。 2、jlink有hss模式,rtt模式,前者不需要任何i 阅读全文
posted @ 2019-12-10 15:24 wdliming 阅读(1679) 评论(0) 推荐(0) 编辑
摘要:Keil RTX是为ARM和Cortex-M设备设计的免版税,确定性的实时操作系统。它允许您创建同时执行多个功能的程序,并帮助创建更好的结构和更容易维护的应用程序。 特征 具有源代码的免版权,确定性RTOS 灵活的调度:循环,抢占和协作 具有低中断延迟的高速实时操作 为资源有限的系统提供小封装 无限 阅读全文
posted @ 2019-12-10 13:46 wdliming 阅读(959) 评论(0) 推荐(0) 编辑
摘要:转载自:https://blog.csdn.net/u011976086/article/details/54342447#commentBox 之前使用过ucos,freertos,但是这个keil自带的RTX倒是没有在项目中使用过,只有在安福莱的论坛中,头比较丰富的教程,网上正好看到了这篇文章, 阅读全文
posted @ 2019-12-10 13:27 wdliming 阅读(4860) 评论(0) 推荐(1) 编辑
摘要:CMSIS-RTOS API是基于Arm®Cortex®-M处理器的设备的通用RTOS接口。CMSIS-RTOS为需要RTOS功能的软件组件提供标准化API,从而为用户和软件行业带来了巨大的好处。 CMSIS-RTOS提供许多应用程序或技术(如UML或Java(JVM))所需的基本功能。 CMSIS 阅读全文
posted @ 2019-12-10 12:43 wdliming 阅读(822) 评论(0) 推荐(0) 编辑
摘要:起因:发布自己翻译用的CMSIS_RTOS_Tutorial后,陆续收到网友关于“CMSIS-RTOS是干么的?”之类的问题,再次统一回复。 众所周知,实时操作系统是嵌入式领域的基石。而可选的嵌入式操作系统有很多,如FREE-RTOS、RTX、uc-os、vcWork、uLinux等。 CMSIS- 阅读全文
posted @ 2019-12-10 12:34 wdliming 阅读(6256) 评论(0) 推荐(1) 编辑
摘要:好久没学习C#了,上次已经学习到了接口这块,感觉有点不太好理解,因此重新学习,在vs上面运行了,本来不想写博客的,但是正好看到网上有人说,写博客可以加深印象,因此,写吧。 下面是菜鸟教程的实例 运行后如下: 我的名字是James1,我的工作是设计 我的名字是James2,我的工作是编程 请按任意键继 阅读全文
posted @ 2019-12-08 21:13 wdliming 阅读(221) 评论(0) 推荐(0) 编辑
摘要:没有内置小鹤双拼的rime输入法就是差劲,还特立独行,搞什么繁体~ 没有内置小鹤双拼的rime输入法就是差劲,还特立独行,搞什么繁体~ 没有内置小鹤双拼的rime输入法就是差劲,还特立独行,搞什么繁体~ 没有内置小鹤双拼的rime输入法就是差劲,还特立独行,搞什么繁体~ 没有内置小鹤双拼的rime输 阅读全文
posted @ 2019-12-08 17:30 wdliming 阅读(589) 评论(0) 推荐(0) 编辑
摘要:源自网络 我觉得有三点: 1. F2属于加强版的F1,内核还是cortex M3,只是主频提高到了120MHz(F1是72MHz),但是这点提升没有实质性意义,性能比不上 2. F3是F4的削弱版,一般用在传感器领域,因为这个系列的片子外设很多 3. F2和F3的出现时间都比F4晚,所以大家普遍先入 阅读全文
posted @ 2019-12-08 17:27 wdliming 阅读(3513) 评论(0) 推荐(0) 编辑
摘要:0、通常,嵌入式软件(这里指单片机系统)的框架千变万化,有带rtos的,也有裸机的。 0.1、写过带系统的,也写过裸机的,这里总结一下两个类型的框架,记录下自己的心得,主要是文字描述,框架图可以后期添加。 1、freertos框架1.1、使用标准库,网上有很多一直教程,也有现成移植好的,如果自己使用 阅读全文
posted @ 2019-12-08 17:24 wdliming 阅读(4146) 评论(0) 推荐(1) 编辑
摘要:最近的项目中使用到了欧姆龙的温控器,里面有很多的通信方式,我们使用的常见的modbus——RTU方式,其他方式我们不使用,其中通信手册上面有很多通信的实例,欧姆龙modbus还区分4字节模式和2字节模式,我们选择2字节,加快通信效率,而且2字节和4字节的模式的地址还不一样,但是实现的功能是一样的,比 阅读全文
posted @ 2019-12-07 19:24 wdliming 阅读(2148) 评论(0) 推荐(0) 编辑
摘要:今天在写程序的时候,想使用sizeof求数组的大小,数组中其他c文件定义,在头文件使用extern uint8_t buff_value[]; 声明 但是keil编译报错,网上查了,发现,需要写成extern uint8_t buff_value[30];把数组的大小固定了,才能编译通过。 阅读全文
posted @ 2019-12-07 17:37 wdliming 阅读(3413) 评论(0) 推荐(0) 编辑