NorFlash为什么可以运行程序norflash有的是类似内存那种接口,地址线数据线分开的。有的是spi接口和qspi接口。这些都可以有办法运行程序。拥有内存接口比较好理解,可以直接像内存一样读取指令。那其他接口的呢,比如stm32h7支持qspi的norflash运行程序,是因为这个芯片可以将qspi的访问映射成像内存一样。映射后处理器每要取出一个指令,控制器会启动发送相应的命令读取数据。这样处理器就可以从这里直接取指令。NandFlash为什么不可以运行程序norflash和nandflash的重要区别是norflash可以按字节寻址读取,nandflash最小只能按照页读取。如果某个...
二层交换机两层交换机只能进行同一个网段之间的通信。网段(子网)的计算方式如下:IP地址与子网掩码进行 与 运算。比如IP:192.168.1.1 子网掩码:255.255.255.0 子网是:192.168.1.0。IP:192.168.1.1 子网掩码:255.255.0.0 子网是:192.168.0.0。子网相同可以通过2层交换机通信。2层交换机对数据也不做变化。(三层的mac地址会变化)例如:IP:192.168.0.10(MAC:00.00.00.00.11.10) 发往 IP:192.168.0.11(MAC:00.00.00.00.11.11) 的数据,接收端接收到的源IP和源MAC和发送端地址一样。路由器路由器可以跨网段进行发送,但是会改变mac地址...
有不少的MCU设备的USART的介绍那里写的支持IrDA和LIN的相关功能。那他们是什么关系。IrDAIrDA是国际红外数据协会的英文缩写,IrDA相继制定了很多红外通信协议。IrDA1.0协议基于异步收发器UART,最高通信速率在115.2kbps,简称SIR(Serial Infrared,串行红外协议),采用3/16 ENDEC编/解码机制。 IrDA1.1协议提高通信速率到4Mbps,简称FIR(Fast Infrared,快速红外协议),采用4PPM (Pulse Position Modulation,脉冲相位调制)编译码机制,同时在低速时保留1.0协议规定。之后,IrDA又推出了最高通信速率在16Mbps的协议,简称VFIR(Very Fast Infrared,...
比如点几个灯如果需要单独写一个驱动,没有必要每一个都单独申请一个主设备号。可以申请一个主设备号,使用不同的次设备号进行区分设备。使用方式与单独一个次设备的有几处不同。1 设备初始化时申请多个设备号int test_major = 100;
Linux的启动过程主要分三步,bootloader,kernel,roofts。1 bootloader的文件系统配置和分区bootloader一般使用uboot的比较多,这里以uboot举例。处理器要把uboot加入到内存中运行,这需要用到处理器内置的一部分程序。这个内置程序负责将这段uboot搬运到内存中。1.1 bootloader在SD卡和emmc设备中通过芯片的引脚配置可以决定程序存储在哪里,存储在sd卡和emmc中的时候呢,处理器内置程序一般会根据文件名来查找文件加载,比如BOOT.bin之类的名字,因此这个名字不能更改。文件系统一般使用fat32,因为兼容性比较好,这个也不能改。就是内置程序会读...
1 块设备驱动流程主要步骤这里写下大概步骤//注册块设备register_blkdev()...//分配并初始化请求队列xxx.queue = blk_init_queue(a(xx),xx)...//分配及注册gendisk结构体xxx.gendisk->major = xxx.major; // 主设备号xxx.gendisk->first_minor = 0; // 起始次设备号xxx.gendisk->fops = &xxx; // 操作函数xxx.gendisk->private_data = &ramdisk; // 私有数据xxx.gendisk->queue = xxx.queue; // 请求队列xxx.gendisk->disk_name, test=...; // 名字...add_disk(xxx.gendisk);...
(a2+b2)∗e−i1 通信架构收发整体架构如下所示:上面的是发送,下面的是接收。2 发送单看上面的图不好理解帧的结构。下面的图包括了帧的构成。2.1 信源输入信源输入为设备通过多种接口接收到的数据。2.2 信道编码信道编码为在有效信息的基础上增加一些冗余的信息,用以在数据传输出错的时候判断哪里出错并进行纠正。常见的有卷积码,Turbo码,LDPC码,Polar码等。2.3 交织加扰交织是将数据分散,这样数据出错的时候,对有效数据来说就是将数据集中的数据分散开,方便纠正处理。加扰是让数据的0和1尽量随机化,避免出现不该出现特殊的频谱,方便处理...
线程同步中为了保护数据,使程序可以按照预想的方式运行,往往需要加锁。包括带判断的一读一写也一样线程A:
本文说的启动文件指的是内核启动之后,启动根文件系统系统过程中添加自启动文件。文件启动顺序/etc/inittab > /etc/init.d/rcS 首先根文件系统会启动/etc/inittab,然后会启动 /etc/init.d/rcS这个文件,这个顺序在各个版本中基本都是保持不变的。怎么到这步的先不关心。我们从 /etc/init.d/rcS这个文件开始关注如何添加自己的启动文件。这个rcS文件不同版本写法不一样。以我手上的一个为例看下PATH=/sbin:/bin:/usr/sbin:/usr/bin
RSSI是Received Signal Strength Indication,可以表示接收信号强度(功率)。单位一般是dbmW。AD9361可以测量RSSI。这个的值也是经过芯片内部计算的,所以肯定也跟增益有关。AD9361的增益有两种,AGC和MGC。AGC是增益自动控制,MGC是手动控制。通过AD936X Evaluation 软件配置MGC的界面如下:MGC配置可以通过IO或者SPI写寄存器两种方式设置寄存器值。重点是要使芯片内AD接收到的数据处于量程范围内,可以通过采集到的值进行判断,比如数据量程是12位的(带一个符号位),数值范围是-2048~2047。尽量使接收到的值处于中间最好(±1024)。为什么处于...
linux中多个网卡设备的名称经常是eth0,eth1...这样。在网卡设备不热插拔的情况下,这个名称是不会变的,但是有的时候用着不方便。有没有更改其名称的方法呢。先大概看下这个名称的由来,再看下怎么改。名称的由来首先可定需要一个网络结构体net_device,可以通过alloc_etherdev()这个函数申请得到。在这个函数内部就给这个结构体分配了了一个名字eth%d。后面注册的时候(register_netdev())。识别到了这个名字就自动进行分配。如何改那这个名字改如何改呢,在注册之前先给他一个名字就可以了struct net_device *ndev;
GDB是一个工具,可以像MDK IAR之类的一样一步步的执行程序,查看变量的值,设置断点,查看运行结果。移植嵌入式linux的板子可能资源不够,性能不强,因此在板子上使用gdbserver通过网络与PC通信,在PC中运行gdb。具体步骤如下:获取GDB和gdb server可以官网下载,也可以从虚拟机中已经安装的交叉编译环境中获取电路板和ubuntu通信通过nfs挂载虚拟机下的ubuntuifconfig eth0 192.168.1.20
git仓库是个存放数据的地方,也可以位于局域网内。这样可以满足不联网的电脑在局域网之间进行操作。这些电脑需要满足两个条件:1 所有电脑都已经安装git工具(最好是同一个版本)2 所有电脑可以通过网络进行连接(可以ping通)创建仓库找一个存放文件的位置,最好新建一个文件夹,初始化git仓库:git init
Git在Windows下和Linux下使用差不多,就是初始安装的方式不一样。有关git的操作可以参考以下网站:Git - Reference (git-scm.com)以下简介在本地进行版本管理的方式(本地仓库用于自己程序管理):1 安装Git并查看版本号git -v
面向对象编程是一种思想,并非一定要用哪种语言去实现,c语言也可以实现面向对象编程。通过结构体和指针就可以实现。C语言实现各部分功能面向对象主要的有封装、继承、多态。下面说下如何用C语言实现。封装封装的作用是减少对外的接口typedef struct {
我们交叉编译Linux的时候可能需要添加新的头文件,这个头文件放在哪里。编译应用程序和内核程序不太一样,分别说。编译应用程序编译器需要找到头文件有几种办法编译时-I指定路径搜索 arm-linux-gnueabihf-gcc testtty1.c -o testtty1 -I/linux
目的多个网卡想单独使用的话可以使用不同的IP绑定,但是这样比较麻烦,也可以使用相同的IP,这样一个设备虽然有多个网卡,但只有一个IP,可以将需要的程序socket绑定到固定的网卡。这样虽然是相同的IP,但是可以独立使用了。应用程序int initUdpBroadCastSocket_eth0(void){ struct ifreq opt1; const char *inface = "eth0";//根据自己的情况修改 strncpy(opt1.ifr_name, inface,IFNAMSIZ); const int opt = 1; int nb = 0; struct sockaddr_in myaddr; int sockfd = socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP); if (-1 == sockfd) { ...
适用场景并发与竞争是在多个线程、进程或中断访问共享资源时产生的。这个共享资源看着有点笼统,具体就是全局变量或者数组,经过总线访问的数据都有可能。处理办法处理竞争的方法通常有原子操作、自旋锁、信号量、互斥锁等。原子操作针对的是变量处理,像是全局变量就可以通过原子操作处理;锁中间带进程切换的要用互斥锁,用自旋锁会造成死锁;中断中要用自旋锁,用互斥锁会导致休眠(这个不能用并不是不能做到,而是不应该这样做。导致休眠可能会有产生很多问题,比如调用个阻塞的线程之类的,也可能会产生死锁,也可能产生大量延迟);互斥锁的开...
AD9361提供了一个插件ad9361-filter-wizard,这个是官方提供的可供生成滤波器系数的插件,可以去官网下载。然后再matlab下安装,如下图:点击使用这个插件。将数据改成自定义的时候,将Use Internal FIR这个勾选取消,否则生成的滤波器最大为32阶(也有时候不是,可能取决于软件版本吧),平滑性比较差。Data(数据速率)应与AD9361使用的一样,如下图Apass和Astop的具体作用在图中有显示,个人认为,Apass可以尽量小,可以到0.001dB啥的,Astop倒是没必要太大,80dB足够用了。Fpass和Fstop就是滤波器的频率了,这个根据需要设置就可以,图滤波器插...
LINUX的库提供的波特率是标准波特率,应用时有时会用到非标准的波特率。以下试验使用的xilinx的zynq7020,linux内核是4.14版本。以增加波特率100k为例。看了一些直接在应用端改的一些方法,已经取消了,所以更改了内核第一步,内核需要更改两个地方,一是/drivers/tty/tty_baudrate.c,另一个是/include/uapi/asm-generic/termbits.h先看第二个,这个CBAUD原来是0010017改为0030017,见图1,是用来做掩码计算的。图1这两个是新加的,如图2图2这个头文件一共更改这三个地方。先说为什么增加波特率使用0020001而不在B4000000后面递增使用0010020,这是...
环路滤波器在锁相环等应用中经常应用。大部分书籍中都分析了举例分析了不同的环路滤波器的例子,以下是经典二阶理想环路滤波器: Z(i) = CAL(i) - fout(i); A(i) = A(i-1) + Z(i)*C2; B(i) = C1*Z(i) + A(i); fout(i+1) = B(i) + fout(i); 多个例子分析了以上理想二阶环的幅频特性和相频特性。单看这些感觉难以理解。直观上理解,环路滤波器是求解了一段输入的平均值,然后就可以用这个平均值进行反馈调整所需要的输入了。 上面的式子中第一行就是偏差,CAL是输入,fout就是输出。减号只是一种计算方式,结果输出...
在项目中,经常有可能用到以太网的原始数据,就是链路层输出,不经过TCPIP,UDP这类协议解析的数据。一般称呼这种为RAW数据。主要分两类,一类是在LINUX下如何截取使用数据,一类是在MCU下如何截取使用数据。无论哪一类首先需要使网卡进入混杂模式。在linux下,首先建立一个接收所有数据的socketsocket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));对于多个网卡的需要先绑定网卡memset(&sl_receive, 0x00, sizeof(sl_receive)); memset(&ifr_receive, 0x00, sizeof(ifr_receive)); strncpy(ifr_receive.ifr_name, "eth1", sizeof(ifr_receive.ifr_na...
ADC的地对于ADC的精度至关重要。ADC芯片的地主要分为两种,一种是芯片引脚独立区分模拟地和数字地,一种是不区分模拟地和数字地。区分的就按照各自独立的地进行参考及分割。不区分的就按照模拟地处理。ADC的主要作用是采集模拟数据,输出数字数据给FPGA或ARM或DSP等处理,如下图所示。连接模拟源的数据可以认为是模拟数据,输出的数字数据认为是数字数据,处理器发送的时钟或者ADC反馈的时钟认为是数字数据。模拟地和数字地通过磁珠相连。ADC的地走线可以参考下图方式。ADC的数字数据及时钟参考地为数字地,模拟数据参考地为模拟地。射频信号(模拟...
5. Model Advisor建模规范检查文章目录:5.1 Model Advisor的界面介绍,使用步骤5.2 Model Advisor错误及警告修改5.3 Model Advisor还原点设置5.4 自己配置检查项目方法5.1 Model Advisor的界面介绍,使用步骤 Model Advisor是simulink自带的静态模型检查器,能够根据建模规则,建模规范标准对模型进行检查,并且能够进行部分错误的自动修改,帮助开发人员和团队搭建高质量的模型和使用高度统一的风格1)启动Model Advisor打开Model Advisor前,需要确保当前的目录未写保护,因为会自动生成一个文件存放检查设置及结果信息启动打开方法如下图启动时...
欢迎来到嵌入式软件开发园 本公众号希望建立一个分享软件开发技术的知识园区,将会持续更新干货原创知识内容,欢迎关注 目前已建立如下知识专栏(点击标题可传送)专栏简介:MBD : Model-Based Design,基于模型的设计方法是一种系统开发方法论,即对系统进行建模、分析、验证,然后基于模型自动生成代码、测试用例和文档的设计开发过程 本专栏将会分享如何使用Matlab工具进行MBD项目开发,各工具箱的基础使用方法,包含如下内容Stateflow完整教程Simulink基础模块介绍Simulink模型代码生成方法Simulink模型完整测试方法专栏简介: 在现...
3. 模型的代码优化方法文章目录:3.1 代码优化概述3.2 代码优化度量标准3.3 代码优化方法设置3.3.1 数据初始化3.3.2 终止代码3.3.3 整型数据的溢出回环3.3.4 代数运算异常保护代码3.3.5 无效的模块3.3.6 优化变量的使用形式3.1 代码优化概述 在生成代码时,对模型设置不同的配置选项,会对模型生成的代码产生不同的影响,评价代码优化情况,需要基于以下几个维度思考:调试性(Debugging)可追踪性(Traceability)执行效率(Efficiency)安全预防(Safety precaution)调试性指的是调试模型生成代码的编译过程可追踪性指的是模型和代码之间的映射...
今天,我们正式发布了小米SU7,一共有三款配置,分别是小米SU7 标准版,售价 21.59 万元;小米SU7 Pro 版,售价 24.59 万元;小米SU7 Max 版,售价 29.9 万元。还有专门为朋友们准备的小米SU7 创始版(可选标准版和 Max 版配置)。以上所有版本现已全面开启预定,欢迎大家前往门店预约试驾、也可以在小米汽车 APP 直接订购。小米SU7,是一辆承载所有向往的梦想之车。研发之初,我们就设立了目标:要做 50 万以内最好看、最好开、最智能的轿车,同时,还必须是一台高品质的轿车!内容很多,配置非常强,我们一起回顾一下。01小米SU7人车合一,我心澎...
1. 模型的代码生成方法文章目录:1.1 模型的解算器solver设置1.2 生成的系统目标文件设置1.3 其它生成代码的设置1.3.1 硬件平台设置1.3.2 Optimization页面的设置1.3.3 Report 报告1.3.4 Comments 注释1.3.5 Identifiers 设置1.3.6 Custom Code1.3.7 Code Style1.3.8 Data Type Replacement1.3.8 Templates1.4 模型输入输出信号设置方法1.4.1 变量数据类型设置1.4.2 信号线上设置作用域1.4.3 Base Workspace设置变量属性并绑定信号线1.1 模型的解算器solver设置 当模型建好、仿真调试结束,需要利用Simulink Coder工具将模型转换为C代码,集成到硬件...
Simulink自动保存模型脚本文章目录:自动保存模型脚本脚本使用方法自动保存模型脚本 在使用sumilink建模中,暂无自动保存模型的相关设置,使用中常常会遇到软件卡死奔溃现象当出现如上提示,如果花费了半天建立的模型还没有保存,所作的所用工作付之东流,是不是内心也随之崩溃。。。。。。分享一个自动保存的模型的脚本,脚本源码如下:%% 自动保存当前simulink模型1_脚本程序% 用法: 默认保存时间:120s;% 1.点击"运行",开始执行自动保存slx文件(需要先打开slx文件);% 2.再次点击"运行",停止自动保存slx文件;% UseFuction: % evalin, as...
8.Stateflow-可复用图形结构文章目录8.可复用图形结构8.1 真值表使用方法8.2 状态转移表使用方法8.可复用图形结构 真值表和状态转移表是两种特殊的可复用图形结构,模型库位置如下所示:8.1 真值表使用方法 真值表是在逻辑代数中用于穷举各种逻辑可能的方法。在Stateflow 中使用真值表,简化逻辑系统的设计,特别是简化系统中根据若干条件进行决策判断的分支结构。下例为求 L= A || B && C,真值表由条件表格和动作表格两部分组成条件表格:condition为判断条件,D1~D2列举出对应的组合,对应的actions对应动作表格中的哪种结果动作表格 :列举出每...