自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 从零开始制作OV7670摄像头巡线小车

从零开始制作OV7670摄像头巡线小车

2022-06-12 13:12:28 1094 1

原创 PyQt5常用ExternalTools设置

如下是PyQt5在PyCharm中的一些常用ExternalTools的设置:1、pyqt5designer,用于打开Designer2、pyuic5,用于将Designer生成的界面.ui转换成.py3、pyrcc5,用于将资源文件打包成python模块代码...

2020-01-04 14:11:57 1085 2

原创 pyopengl 安装与测试

笔者通过PyCharm安装pyopengl,然后运行测试程序会出现错误 :OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before callinghttps://stackoverflow.com/questions/267007...

2019-12-28 15:12:33 1291 1

原创 python crc计算

CRC常用于通信中的数据校验,比如以太网、USB、CAN,本文使用crcmod模块来计算CRC值。一、首先要先安装crcmod模块。二、然后调用crcmod 来初始化自己的CRC算法,主要是CRC多项式、开始计算时的初始值、计算结果后的xor。本文使用的Python版本为3.7,如下是测试代码:import crcmodstr1 = '123456789'crc32_func = crc...

2019-11-24 22:40:12 7432

原创 Python 字符串与数值比较

在文本数据解析中,我们常读取文档中的字符串,然后进行数值化处理。如果我们直接读取字符串信息,然后用 i 去索引该字符的值,然后进行数值运算,发现Python 字符的值与整形的数值不能进行比较,代码入戏所示:str1 = '0123456789'str2 = str1.encode('utf-8')if str1[0] == 0x30: print('str1 get 0 asc...

2019-11-24 15:45:42 5353

原创 MPC5746C双核启动配置分析

MPC5746C内部集成了一个BAF(Boot Assist Flash)小工具(代码)(这个有点像Bootloader),BAF主要用于管理多核CPU的启动,其原理是寻找特定地址的启动头,查看并根据启动头的配置信息来启动CPU内核。启动头的地址如下所示:启动头的配置结构如下所示:启动头配置字节如下所示:CPU编号与MPC5746C内核的对...

2019-08-06 17:01:00 3773 19

原创 printf重定向、仿printf函数、调试宏

1、printf函数重定向 在用电脑学习C语言时,我们经常使用printf函数来打印调试信息,比如某个变量的值,屏幕将显示该变量的值。在学习微处理器编程时,我们是否也能使用printf函数来打印调试信息呢?那当然是可以的。我们可以重定向printf函数,使其调试信息输出到串口上,然后通过串口调试助手来观察调试信息。printf函数底层调用fputc来输出调试信息,因此我们可以...

2019-07-22 22:10:13 799

原创 wav音频文件格式

在做音频信号采集或音频信号分析时会经常遇到wav格式的文件,本章将介绍wav文件的格式。wav是基于资源交换文件格式(RIFF(Resource Interchange File Format))的应用之一。RIFF是一种带标签的文件结构,其可以定义许多文件格式,比如wav音频文件格式。RIFF文件由块结构组成,块结构由3个部分组成,分别为块ID、块大小、块数据,其中块ID由4字节组成,用于...

2019-07-14 20:14:49 4631

原创 CAN 报文字节排列顺序(Intel、Motorola_LSB、Motorola_MSB)

在定义CAN通信矩阵或制作dbc时,我们需要知道报文的字节排列顺序。字节的排列顺序有2种,一种是Intel的排列顺序,另一种是Motorola的排列顺序,就跟大小端字节排序是一样的。下面笔者将简单介绍这2种字节排序的区别。Intel格式: Intel格式跟小端格式一样,低地址代表低字节,高地址代表高字节。比如一个信号Intel,它的起始位为3,长度为10,在...

2019-07-11 14:42:10 47961 13

原创 CAN 与 CANFD数据报文格式解读

ISO 11898-1:2015 协议详细定义了CAN网络报文的格式,包含了传统CAN与CANFD帧格式。CAN网络的帧类型共有4种,分别为数据帧、远程帧、错误帧、过载帧。本章将主要介绍CAN网络数据帧报文的格式,CAN网络中数据帧报文共有4种类型,分别为传统标准帧、传统扩展帧、CANFD标准帧、CANFD扩展帧,其数据帧报文的格式由如下字段域组成:SOF:为帧的开头,该字段由一个显...

2019-07-08 18:05:22 35603 3

原创 Windows安装 TensorFlow说明

TensorFlow是Google旗下开源的机器学习库,我们可以利用TensorFlow来开发和训练机器学习模型,下面笔者将介绍TensorFlow的安装流程:1、安装python软件读者可以自行前往python官网下载python软件,笔者安装的python名称为python-3.7.3-amd64,在安装时一定要勾选上 将python命令路径添加到PATH环境变量中,否则在window...

2019-07-07 19:52:51 128

原创 armasm 命令选项 --cpreproc 及 --cpreproc_opts说明

笔者在keil上移植CMSIS DSP函数库时,会出现如下报错信息:打开arm_bitreversal2.S 发现该代码的开头是一些C语言中常见的条件编译和宏定义,如下所示:#if defined ( __CC_ARM ) /* Keil */ #define CODESECT AREA ||.text||, CODE, READONLY, ALIGN=2...

2019-07-07 19:09:20 2874

原创 makefile文件编写

makefile文件用于管理和组织代码工程的编译和链接,其不是可执行文件,其被make工具解析并完成相关动作,下面笔者将介绍makefile中常用的一些语法说明:1、文件包含:语法:include 文件名作用:将其它makefile文件包含进来,组成一个更大的makefile文件,这样有利于makefile模块化编程。通常我们将一些配置选项分开成一个独立的makefile文件,这...

2019-07-02 17:06:43 67058

原创 Windows系统下代码编译系统搭建

在编译单片机代码时,我们经常使用IDE来管理代码,包括编译和链接生成应用程序,但有时候我们只有编译器并没有IDE,需要我们自己来搭建单片机的编译环境,即自己搭建makefile文件管理系统,其实IDE也是通过makefile来管理代码的编译的,只是它隐藏了makefile的功能。在Windows系统下搭建自己的单片机的编译环境,其步骤一般如下所示:安装Windows版...

2019-07-01 14:07:14 796

原创 STM32程序跳转设置和编程

本章主要介绍STM32程序跳转的设置和编程,分两部分,一是Bootloader程序的设置,二是应用程序的设置,下面将分别介绍其设置。一、Bootloader程序设置 在Bootloader中,当把应用程序都下载到Flash内存中后,Bootloader需要跳转到应用程序中去。如下是经测试过的代码:#define APP_FLASH_ADDRESS (0x8006000)ty...

2019-05-07 14:43:10 5253

原创 Vector XL设备驱动库使用事例

本章将介绍Vector XL设备驱动库DLL的使用,XL设备驱动库可以驱动Vector旗下的任何一种CAN设备,我们可以利用该设备驱动实现CAN总线上报文的收发,其官方驱动库的下载地址如下所示:https://www.vector.com/int/en/products/products-a-z/libraries-drivers/xl-driver-library/#c7549...

2019-03-01 14:46:46 6902 5

转载 keil 将函数与数据放在固定地址的方法

本章内容截取于keil帮助文档,希望对你有帮助Methods of placing functions and data at specific addressesNon-Confidential  PDF version ARM 100070_0607_00_en ARM® Compiler armlink User Guide Version 6.7...

2019-02-26 14:19:17 7493 2

原创 一种简单FIFO队列实现方式及事例

在写程序中,经常会遇到缓存队列问题,需将数据缓存到队列中,且队列中的数据不能被覆盖,然后另一个任务会从队列中依次读出所有数据(按照先进先出的原则FIFO)并进行处理。本章将实现一种数据大小固定的FIFO数据缓存队列,其本质思想是用2个空指针管理队列头和队列尾,还有一个队列计数用于统计队列数目。其程序代码如下所示:头文件为 simpleQueue.h,其内容如下所示:#ifndef __SI...

2019-02-22 14:31:05 2484

原创 LabwindowsCVI 波形显示介绍及事例

       波形相对于数值而言,其更能直观描述数值的大小及变化趋势,有利于工程师排查问题,标定最优参数。本章将介绍LabwindowsCVI对波形控件的支持。LabwindowsCVI共支持3种Graph控件,分别为Graph、Strip Chart、Digital Graph控件。Graph控件:       Graph控件比较适合于一次画许多数据的曲线,不是很适合连续往曲线上继续添加...

2019-02-15 16:46:13 7456 5

原创 LabwindowsCVI 串口编程及事例

       串口是一种常见的通信总线技术,其支持全双工模式,且只支持一对一的访问模式,大部分设备都支持串口通讯,可通过串口控制设备或采集数据。下面将介绍LabwindowsCVI对串口的支持。 OpenComConfig:       OpenComConfig用于打开并配置Com设备,其函数原型如下所示:int OpenComConfig (int portNumber, ch...

2019-02-14 11:26:00 15761 2

原创 LabwindowsCVI 实现高精度Timer

       在写程序中,会经常遇到与时间有关系的代码,比如延迟、周期性调用某函数、获取系统时间等等,如果时间定的不准确,可以想象该系统的不可靠性。在LabwindowsCVI中,有一种简单的定时器实现方式,可直接添加Timer定时器控件,然后设置Timer的调度周期和回调函数,这样主线程就会在周期内调用Timer的回调函数了,但这种方式的实现精度并不高,很容易受其它应用程序及主线程其它应用代码的...

2019-02-12 14:53:48 5817

原创 LabwindowsCVI ini操作说明及事例

       ini文件是initialization file的缩写,其用于保存参数设置。一般我们会将UI配置的界面参数保存在ini文件中,在程序下次启动时,读取ini文件配置信息,这样就不用重复配置程序参数。下面将介绍ini文件格式及LabwindowsCVI对ini文件的支持:ini文件格式:       ini文件由键和节组成,如下所示:键(keys):       键是i...

2019-02-11 16:18:18 3422

原创 LabwindowsCVI Excel操作说明及事例

       在工控测试领域,经常需要操作excel,用于保存测试的数据及测试结果。本章将介绍LabwindowsCVI对Excel操作的支持。LabwindowsCVI 对excel的支持是基于 windows的excel库,简单点说就是对windows的excel库进行了一层封装,这样我们就能更好的操作excel了。下面将介绍操作Excel的常用API:ExcelRpt_Applicati...

2019-02-02 15:46:36 9826 3

原创 LabwindowsCVI DLL工程的创建及使用

DLL简介:DLL是动态链接库(Dynamic Link Library)的缩写,通过名称来看它是一个库文件。库文件有静态库文件和动态库文件之分,静态库文件需要包含到项目工程中,然后通过编译链接完成的库文件提供功能的调用;动态库文件就不需要静态库文件这些操作,但在调用动态库文件提供的功能时,需要应用程序将该库文件加载到内存中,然后调用该库文件提供的功能。从这你有没有看出DLL的作用,通常我们将...

2019-02-01 18:22:03 5002 1

原创 ISO15765-2 CAN 网络层协议介绍

ISO15765是基于CAN网络的诊断协议,其中ISO15765-2描述的是网络层协议。什么是网络层协议?其实简单来说就是提供数据传输的方法。网络层一般提供2种数据传输方法,1是单包数据传输,2是多包数据传输。网络层选择传输的方法取决于底层一次可传输的最大数据包大小。ISO 15765-2采用4种数据帧,分别是单帧(SF)、首帧(FF)、序列帧(CF)、流控帧(FC),其数据结构如下图所示:...

2019-01-31 14:57:03 15862 3

原创 ECU Bootloader程序设计

简介:Bootloader是独立于应用程序的一个项目工程,其提供应用程序离线升级的功能,如果没有Bootloader就不能进行程序升级,如果应用软件有缺陷只能拆盖通过仿真器进行烧写(更有严重者甚至需要把硬件看门狗电阻去掉),所以Bootloader使软件更加易于维护。 设计Bootloader程序时,一般需要考虑如下3个要点:设计Bootloader与升级上位机间的数据交互协议 ...

2019-01-31 09:56:09 5630

原创 微处理器程序调度设计

 什么样是好的系统呢?笔者认为有2点,1是让微处理器在单位时间内处理更多的任务,2是程序易于维护。 在早期的程序设计中,就是一个简单的while(1),然后一直执行应用代码,这就是裸机系统。后来由于裸机系统的功能越来越复杂,代码的可维护性变得越来越差,任务的调度也变得不理想,于是人们就发明了操作系统。基于操作系统的程序设计相对比较简单,但其资源开销较大,CPU利用率较低。下面将分别介绍裸机系统...

2019-01-30 17:19:31 278

原创 创建LabwindowsCVI工程

前话:以前上大学时,一直在寻找一种简单的IDE,拥有如下特点:1、集成丰富的控件(可以显示波形);2、编程语言简单(最好是C语言);3、拥有丰富的库(比如RS-232库、TCP/IP库、USB库等)。笔者曾经学过1、Visual C++开发,但发现其编程有点麻烦,还有就是控件有点简单,没有显示波形的控件(笔者当时对可以实时显示波形的工具一直比较着迷);2、LabVIEW开发,当时笔者觉得画图的...

2019-01-28 10:16:33 12112 2

原创 烧录文件bin、Motorola、hex格式介绍及解析

微处理器一般又称单片机,其可以根据人们编写的代码执行相关的逻辑操作。程序员将产品的逻辑操作抽象为C代码,然后通过编译器的编译和链接,生成微处理器可执行的机器码。通常编译器封装的不带调试信息的机器码有3种格式,分别为bin、motorola、hex,下面将分别介绍其特点:1、Bin格式: Bin文件是二进制文件,是编译器生成的机器码文件,烧录工具可以直接读取该文件的内容而不用解析...

2019-01-23 14:34:11 9965 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除