![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式系统软件开发
文章平均质量分 66
子朔不言
物联网,智能设备,智能识别,下一波产业浪潮。深圳市新龙微科技有限责任公司,致力于物联网,智能家居,智慧中控,智能制造,智能控制等设备软硬件研发,提供全方位技术和产品服务.某宝收店铺新龙微有相关产品展示
展开
-
指针详解系列4-指针与数组
数组名实际上就是第一个元素的地址,一维数组名的值是一个指针常量。如果数组a是一个一维数组,那么第一个元素的地址就有两种表示方法:a或者&a[0].第二个元素也有两种表示方法:(a+1)或者&a[1],所以数组元素a[i]的地址既可以表示为&a[i]又可以表示为(a+i)(回顾一下指针的运算)。a[i]和*(a+i)都可以访问数组元素。如果定义了一个指针ptr,并让它指...原创 2020-04-19 22:15:55 · 465 阅读 · 0 评论 -
指针详解系列3-指针运算
指针的运算可能是属于难点之一。指针属于整数类型,但是并不是所有属于整数类型的运算都适用于指针类型,反之亦然。比如,对指针就不能进行乘除法运算,两个指针对象值也不能相加。指针运算后的整数类型长度,取决于当前系统指针实现的长度,可以是32bit,也可以64bit等等。可以被支持的运算符包括:&,*,+,-,++,–,>,<,>=,<=,==,->&...原创 2020-04-19 22:13:37 · 630 阅读 · 0 评论 -
华芯微特SWM34-使用定时器捕获快速解码EV1527编码
在无线应用领域,很多433Mhz和315Mhz的遥控器,红外探测器,门磁报警器,无线门铃等都使用EV1527编码格式来发射数据。发射和接收均有对应的RF芯片完成,而且成本极低(目前市场价3毛钱不到)。原创 2024-06-24 22:44:39 · 781 阅读 · 0 评论 -
[ARM-2D 专题]3. ##运算符
##运算符,也叫连接运算符(也称胶水运算符),预处理程序把出现在##两侧的参数合并成一个符号,通常用于宏参数的连接。原创 2024-06-17 22:22:49 · 426 阅读 · 0 评论 -
[ARM-2D 专题] 2. 逗号表达式
逗号表达式,是c语言中的逗号运算符,优先级别最低,它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。要注意逗号运算符和函数参数分隔符(也是一个逗号)的区别。(表达式1,表达式2,表达式3,…(3) 逗号运算符的优先级别在所有运算符中最低。(1) 逗号表达式的运算过程为:从左往右。万丈高楼平地起,基础非常重要。原创 2024-06-17 21:04:08 · 208 阅读 · 0 评论 -
[ARM-2D 专题] 1.开始:基本工程搭建,编译和开发环境配置问题解决
要开始使用ARM-2D,前期两个准备工作需要完成: 1. 一块mcu内核为cortex-M的板子,带显示屏(彩色TFT屏,分辨率建议320x240或以上,带TP更佳)。 2. 基于这个板子可以正常运行的keil MDK的工程。原创 2024-05-29 11:04:18 · 337 阅读 · 0 评论 -
[ARM-2D 专题] arm-2d项目简介
2023年2月发布第一个正式版V1.1.1,近一年来快速迭代和功能增强,成为Cortex-M系列的一个重要软件组成部分,其参考和实用价值的意义及其重大。初始目标:物联网终端设备、白色家电、手持设备和可穿戴设备,尤其是资源受限且功耗要求低的设备。Arm-2D 是一个用于 Cortex-M 处理器上的 2.5D 图像处理的开源项目。由ARM公司开发和维护,属于官方性质的项目,目前最新版本为V1.1.6.2022年7月发布1.0的预览版,原创 2024-05-29 10:14:57 · 291 阅读 · 0 评论 -
[ARM-2D 专题] arm-2d配套开发工具准备
arm-2d 提供了配套的图片转换工具img2c.py和字体转换工具ttf2c.py,工具用python语言编写,所以需要先安装python及其相关的支持包。没有特别要求的,安装软件选择所有用户可以使用。勾选上面所有的项目,特别是PIP是必须的,后面其他软件安装需要他。如上图选择管理员身份安装,并且将路径增加到环境变量,以便在任意地方执行python的命令。从python网站可以下载到最新的安装版本,根据你自己的电脑配置选择。好了,一路next,正常安装完成。原创 2024-05-29 10:38:19 · 177 阅读 · 0 评论 -
BMP图像格式
BMP位图采用小端模式存储数据, 一个典型的24位bmp文件的头信息原创 2023-10-19 09:25:20 · 220 阅读 · 0 评论 -
STOpenIO子系统(一)-IO的时钟配置及使能
两个基本概念:I/O: input/output 输入输出GPIO:General-purpose input/output 通用输入输出在MCU中,I/O是和外界进行数据交互的唯一途径,其作用至关重要。I/O的输出驱动和输入采样都是在时钟驱动下完成的,所以要使用I/O系统,首先要正确的配置时钟系统,给对应的模块提供适合的驱动时钟信号。为了降低系统功耗,STM32F103系列的每一个模块的...原创 2020-03-23 22:58:54 · 1479 阅读 · 1 评论 -
STOpen IO子系统(二)-IO的模式设置和数据输入输出路径详细剖析
在上一章,我们把IO系统的时钟源进行了一个梳理和详细分析,在正确的配置了相关的系统时钟源和IO模块的时钟源后,接下来还要做一件重要的事情,就是配置IO的输出模式。既然是IO,就有输出也有输入,所以需要配置来选择正确的方向。上图是STM32F103的IO基本结构图。我们把这张图分两部分来解读:第一部分: 输入input,如图中红色部分所示。第一条路径是模拟信号输入路径,它是直达系统的模拟...原创 2020-03-24 23:08:19 · 656 阅读 · 1 评论 -
STOpenIO子系统(三)-IO的电气特性
在前两章我们正确的配置了IO的时钟源,并且打开了相关的使能选项,也配置好了输入和输出路径,接下来就是我们IO操作的最后一步,读取输入数据或者输出数据。理论上你读取IO端口不是1就是0,你输出数据不是1也就是0.但是实际情形往往和你想的大相径庭,读不到正确的数据,输出不了想要的高低电平,这是为什么呢?就是因为你没有正确配置输入输出的上下拉电阻,没有搞明白作为输入端口的输入阻抗和作为输出端口的输出阻...原创 2020-03-28 23:32:39 · 1113 阅读 · 1 评论 -
C语言的使用技巧--在IO操作中的移位和快速配置
他们的定义bit位置是经过精心的安排和计算的(比如不同的功能定义占用的bit位置不重叠,方便进行移位运算,和对应的寄存器的操作有一一的对应关系),以便于后续代码设计和简化代码的操作。通过前面这一条代码的操作,屏蔽了不需要操作的gpio配置位(也就是说关闭了对无关gpio的bit写的作用),比如你本次只是操作gpio0,这条代码就会把对gpio1-15的操作屏蔽,以后写其他配置寄存器(比如前面的MODER寄存器),就只有gpio0对应的bit起作用,其他bit不会影响原来的值。原创 2023-08-16 10:43:27 · 366 阅读 · 1 评论 -
华芯微特SWM34-IO速度优化之模拟SPI写速度提速
由于编译器的优化(而且一定要开优化(O1以上),速度才会快,开与不开大约相差3倍),从低电平到高电平之间的时间似乎并没有完全和代码一致,但是宽度已经变成14ns了,已经能基本满足我们的需求了。,请记住我们用的是32bit mcu,代码中的i,spidat两个变量是采用8bit定义的,习惯了单片机的内存紧张,尽量用最小单位来定义了。这个优化我们很容易忽略,因为spi传输8bit数据的时候,我们是msb在前,要先判断最高位,惯性的就用了8bit来表示数据,,在代码中,用32bit也是一样的效果。原创 2023-06-30 17:33:23 · 621 阅读 · 0 评论 -
LVGL- 颜色转换系统和相关宏的使用技巧
因为lvgl是一个通用的可以适配不同颜色深度像素的gui系统,要做到最大化,最简单的兼容这些系统,让用户无感,对应用代码不产生影响,具有最大的移植性,这是非常必要的。系统编译的时候就可以自动根据配置信息来选择合适的目标颜色系统,完成对应的操作。看完这一系列“眼花缭乱”的转换,替换后,你也许在嘀咕,简单的赋值不是更好吗,搞得这么“花里胡哨”的,有必要吗?其中有一个很关键的函数,转换r,g,b显示像素到对应的目标显示器的格式,使用这个函数来适配不同的目标设备。我可以很负责人的告诉你,很有必要。原创 2023-05-19 13:59:59 · 2378 阅读 · 3 评论 -
华芯微特开发环境搭建-SWM34SVET6为例
SWM34S系列是cortex-M33,内核是arm-v8指令集,和其他cortex系列有差异,要新的工具版本支持(jlink要升级到V9以上,keil要升级到5.32以上)。然后选择flash download,选择add添加flash算法,注意要修改RAM的size为0x4000,否则算法文件放不下,还是会下载不了。打开包安装器,选择File->import,选择包Synwit.SWM32_DFP.2.0.4.pack,安装完成,关闭包安装器。恭喜恭喜,到这一步,你应该可以正常下载代码,进行调试了。原创 2023-02-14 10:48:06 · 3495 阅读 · 1 评论 -
C语言编程标准头文件格式推荐及其含义解释(#ifndef,#define,extern “C“,#endif)
而C语言没有类似的重载机制,一般是利用函数名来指明编译后的函数名的,对应上面的函数可能会是_foo这样的名字.所以如果你在c语言文件中调用一个c++文件中申明的foo函数,就会找不到这个符号。一个头文件可能会被多个其他头文件包含或者源文件包含进行应用,c语言的引用(include “xx.h”)在编译的时候是以复制方式进行展开,也就是说如果你在a文件包含了b,c文件(无论是源文件还是头文件),那么编译a文件的时候,它会先把b.c文件的内容放到a文件一起展开形成一个文件,然后再进行编译。原创 2023-02-01 18:00:17 · 3113 阅读 · 0 评论 -
三角函数sin cos tan和弧度,度等定义及其相关
三角函数,正弦,余弦,正切,弧度和度的定义及换算原创 2022-12-20 09:38:56 · 41305 阅读 · 0 评论 -
windows COM端口被占用(在使用中)解决办法
由于经常使用各种虚拟串口设备,导致新插入的设备分配的com口越来越靠后,一些软件无法使用。情况如下图所示,一些原来使用过的com端口即使设备没有插入系统,也会显示该端口被占用了。删除ComDB后重新尝试,(注:这样会重建所有COM口)。如果还不行,重启电脑即可。即使你通过com的高级属性将端口修改回前面去,也不能使用。在运行窗口(ALT+R),输入regedit,打开注册表。原创 2022-10-24 13:53:07 · 10024 阅读 · 0 评论 -
C语言规范标准-C99(中文版) 完整版正式发布
但是作为使用C语言进行开发的程序员来说,毋容置疑的是这个标准文档的重要性是非常的高,如果能用母语去进行初次阅读,我相信就没有那么容易放弃了,这也是我的一个最初的初衷。文档翻译可能不一定完全准确,但是基本上没有大的错误,能够作为入门级的参考,如需进一步学习,可以参考英文原版。如果你在阅读过程中,发现有翻译错误和需要完善的地方,也希望你能反馈信息给我,我们进行修正和改进。原创 2022-09-06 15:04:03 · 5203 阅读 · 5 评论 -
指针详解系列2-常量指针与指针常量
这一章我们详解一下指针的一个修饰符—const。Const修饰符的不同位置,表示的不同的作用,定义如下:char * const Ptr_ConstChar = “a”; const char * pConstChar_Ptr; const char * const pConstChar_ConstPtr = “ab”; 如何识别和记住这些差异,关键点就看const的位置,记住一点,......原创 2020-04-18 00:25:12 · 174 阅读 · 0 评论 -
指针详解系列1-指针的定义
指针的描述(以下的所有地方都基于C89标准):指针与数组,结构,联合等一样也是一种数据对象,其值是另外一个对象的地址(这是重点,指针变量里面保存的内容是另外一个对象的地址)。“指针”得名于这样的事实:其内容“指向”另外一个对象。指针可以指向任何类型(完整类型的或者不完整类型)的对象。一个指针还可以指向其他指针(也就是指向指针的指针),可以实现“多重间接寻址”。更为重要的是指针还可以指向一个函数......原创 2020-04-18 00:18:18 · 948 阅读 · 0 评论 -
终于有人把RISC-V讲明白了
0 RISC-V和其他开放架构有何不同如果仅从“免费”或“开放”这两点来评判,RISC-V架构并不是第一个做到免费或开放的处理器架构。在开始之前,我们先通过论述几个具有代表性的开放架构,来分析RISC-V架构的不同之处以及为什么其他开放架构没能取得足够的成功。0.1 平民英雄——OpenRISCOpenRISC是OpenCores组织提供的基于GPL协议的开放源代码RISC处理器。OpenRISC具有以下特点:采用免费开放的32/64位 RISC架构。用Verilog HDL(硬件描述转载 2022-05-27 09:29:07 · 6869 阅读 · 0 评论 -
杰理-AC632x开发之PWM篇
杰理的该系列PWM的使用相对比较简单,有完整的封装接口,有相关例程,容易使用,开发过程中有几个小地方需要特别注意。pwm初始化://define pwm op: 0-100#define PWM_RATIO(x) (x*100)static void PwmMotorInit(void){ struct pwm_platform_data pwm_p_data; pwm_p_data.pwm_aligned_mode = pwm_edge_aligned;原创 2022-05-19 16:16:49 · 1450 阅读 · 0 评论 -
littevGL windows仿真开发环境快速搭建
littevGL是一个完全开源的现代GUI系统,占用资源可大可小,既可以用到低分辨率的屏上,也可以用到高分辨率的大屏上,可以自由裁剪,非常值得推荐。这个GUI系统的每一行代码都是真正的开源,不像某些GUI系统那样,遮遮掩掩,羞羞答答的一边宣扬开源,一边把部分核心代码闭源,是学习GUI的良好参考对象。当然,由于其功能强大,控件众多,代码量大,要学习也不是一件容易的事情,还好的是,littevGL提供了一个可以在windows运行的仿真环境,这是一大福音啊,完全不用拥有任何硬件,你就可以自由学习GUI开发的原创 2022-05-19 14:42:19 · 468 阅读 · 0 评论 -
数据颠倒的C语言实现
一些地方常用到要颠倒数据的情况,下面分别正对8,16,32的数据进行处理。//把字节颠倒过来,如0x32变成0x4C// 0x32: 0011 0010// 0x4C: 0100 1100uint8_t InvertUint8(uint8_t in){ uint32_t i; uint8_t tmp = 0; for(i=0; i< 8; i++) { if(in & (1 << i)) tmp |= 1 << (7 - i);原创 2022-04-05 16:49:20 · 2027 阅读 · 0 评论 -
正交编码 正交编码器 增量式编码器
编码器,旋转编码器,正交编码器,abz原创 2022-04-04 23:04:00 · 8574 阅读 · 0 评论 -
2021年1月 编程语言排行榜
C语言依然是王者!编程语言排行榜 TOP 20 榜单:21-50 编程语言排名:原创 2021-05-24 09:15:05 · 211 阅读 · 0 评论 -
Keil MDK下载程序不自动运行的问题解决方法
我们在新建一个工程的时候,有时候往往会忘记一些细节的设置(因为你并不常用啊,属于一次性消费,啊啊),导致一些莫名其妙的似曾相识的问题出现。今天就遇到一个问题,建立了一个工程,下载下去,程序无法运行,立即单步调试跟踪,可以正常运行。再下载,还是无法运行,短路一下复位引脚,就可以运行。仔细一想,嗯,这个问题以往好像也遇到过喔。容朕想一想先。。。。。。哦,对了,下载有一些选项应该没有设置,哈哈。。。打开下载调试选项,果不其然,立即操作,设置如下两个地方,再下载,程序嗖嗖的运行起来了。问题并不复杂,但是原创 2020-05-13 19:04:39 · 7464 阅读 · 3 评论 -
STOpen之RTC-片内RTC的可靠初始化及时间转换算法
本章我们将从硬件和软件,应用几个方面来详细的讲解ST32F103的RTC实时时钟的配置方法,编程方法,以及设计注意事项。首先我们看看RTC的框图如下,它除了RTC实时时钟以外,还具有报警功能,报警功能的主要作用就是用来把系统从深度睡眠状态唤醒,从而可以以极低功耗的模式运行系统功能,其唤醒作用和通过外部引脚WKUP唤醒一样。本章我们主要讲解RTC的使用,报警功能另外章节再详细剖析。要使RTC能按照我们预期的方式正常运行,我们先看看其硬件组成:电源RTC部分的电源在系统VDD供电的时候,通过原创 2020-05-10 20:52:36 · 2576 阅读 · 0 评论 -
你读懂了环形队列吗?如何去更好的实现环形队列?
偶尔在网络看到有人推荐了一个开源的环形队列的代码,总体思路没有问题,但是仔细读了一下,发现考虑得不是很严谨,有不少的bug,大家有兴趣都可以分析分析,对于学习很有帮助。下面的文件代码中有详细中文注释,可以参考。另外,推荐一个我实现的简单但是完整的环形队列实现的消息系统,更加实用和简单。《一个用于嵌入式开发的简单可靠的消息系统-STOpen消息系统》源代码和注释如下://*********...原创 2020-03-26 22:08:06 · 316 阅读 · 0 评论 -
星星点灯(三)-LED点灯高阶
前面两篇《星星点灯(一)-LED点灯初阶.docx》,《星星点灯(二)-LED点灯中阶.docx》我们把基本教学的LED点灯程序简单的讲解了一遍,并且对其利弊进行了分析。通过这两篇文章我们学会了几个技能:如何把一个开发系统系统跑起来。如果初始化I/O,如何去驱动一颗LED。用软件的方式进行延时控制LED闪烁。现在,请你基本上忘记前面的方法(出来LED初始化和驱动输出相关的可以继续使用),...原创 2020-03-19 22:55:59 · 381 阅读 · 0 评论 -
文本文件编码与格式转换
不知道大家注意过没有,我们在软件开发过程中经常会发生如下情况:用keil打开一个文件,显示乱码。Keil IDE编辑器编写的文件,在其他软件打开乱码为什么会发生这样子的情况呢?根本原因是你使用的编写文件的工具使用的编码规则和另外一个打开该文件的工具的编码规则不一样,打个比喻,就像搞地下活动的时候,加密和解密用的密码本不一样,自然解密出来的意思就不一样了。我们简单的普及一下文字的编码...原创 2020-03-13 21:04:33 · 2100 阅读 · 2 评论 -
推荐三本此生必读的C语言经典
“ 原创文章,欢迎分享,转载请注明来源,并给出原始链接,未经书面允许,请勿用于商业用途。”推荐三本必读的C语言经典著作。没有读过和深入理解这几本书的精髓,你千万不要说精通C语言,否则会脸红的。第一本:《C和指针》第一眼是不是以为这是讲解指针的书?不要这么认为,这本书对C语言进行了全方位的讲解,其深度和细度远非那些21天学会C编程之类的骗子书可比的。有了这本书,你可以扔掉它们了。第二本:《...原创 2020-03-12 10:37:16 · 818 阅读 · 0 评论 -
Cortex M在keil中的数据端结构及其应用
关于CPU的端结构的文章并不少见,我主要讲一讲在实际产品中的应用及其注意事项。下面的所以代码和实例基于Keil MDK5.26演示,CPU为STM32F103VCT6.一. 定义Little-Endian:小端就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Big-Endian:大端就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。比如一个 int类型的...原创 2020-03-08 16:42:03 · 465 阅读 · 0 评论 -
C语言代码优化示例(二)
一. 起源在整理系统平台的代码时候,看到了一些原来同事编写的代码,有感于这些代码的编写方法和效率问题,挑出一段有代表意义的代码和大家分享如何改进代码的编码效率和提高代码的执行速率,同时降低代码对内存的消耗.二. 原始代码(下面简称代码A)void InintExchangeRateSet(void){double ExchangeRateTab[] = {...原创 2020-03-07 16:40:22 · 328 阅读 · 0 评论 -
PADS版本历史
从加载文件的速度,生成的文件大小,画图的速度,渲染的速度等多方面来说,个人认为PDAS算是非常不错的一款软件,值得学习和使用。大概把其光辉历史罗列一下,作为一个回忆。1986年:PADSPCB,DOS操作系统1989年:PADSLogic,DOS操作系统1990年:PADS 2000,DOS操作系统1993年:PADS Perform,DOS和Windows操作系统1995...原创 2020-03-07 16:23:06 · 9520 阅读 · 0 评论 -
C,C++语言的基础技巧收集
把看到的,听到的先记录在这里1. 整形定义的时候使用L,小写的l容易和1混淆。无符号的要加UL。 注释:对于一些应用比较重要,如定义下面一个宏,如果不加UL,就有可能发生溢出 #define SECOND_OF_YEAR (365*24*60*60)UL2. 关于int和long型长度的定义: C语言标准规定,int长度不小于16bit,long型不小于32位,具体的实现取决于编译器的实现和具体硬件的实现。 注释:在嵌入式应用开发中,这个问题是一个陷阱,某些16位机就会将in原创 2010-08-06 18:03:00 · 296 阅读 · 0 评论 -
Cortex Mx在keil编译器中的端结构
ARM Cortex Mx系列的端结构是小端结构,如下图所示原创 2022-01-21 14:45:07 · 395 阅读 · 0 评论 -
char定义解释
ANSI C 提供了3种字符类型,分别是char、signed char、unsigned charchar相当于signed char或者unsigned char,但是这取决于编译器!这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。signed char取值范围是 -128 到 127unsigned char 取值范围是 0 到 255但是char究竟相当原创 2015-06-18 09:58:25 · 2093 阅读 · 0 评论