RT-Thread中的串口DMA分析】的更多相关文章

这里分析一下RT-Thread中串口DMA方式的实现,以供做新处理器串口支持时的参考. 背景 在如今的芯片性能和外设强大功能的情况下,串口不实现DMA/中断方式操作,我认为在实际项目中基本是不可接受的,但遗憾的是,rt-thread现有支持的实现中,基本上没有支持串口的DMA,文档也没有关于串口DMA支持相关的说明,这里以STM32实现为背景,梳理一下串口DMA的实现流程,以供新处理器实现时以作参考. DMA接收准备 启用DMA接收,需要在打开设备的时候做一些处理,入口函数为rt_device_…
1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因此,在运行scons命令生成项目文件之前,修改rtconfig.h,禁用这两项.(下图L65, L70) c)   生成项目文件 运行scons --target=mdk4 –s 打开生成的项目文件,可以看到,文件组finsh已经不再被包含进来了. d)   创建echo.c 新建一个C文件echo…
串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1.   目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输送到串口1. 2.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因此,在运行scons命令生成项目文件之前,修改rtconfig.h,禁用这两项.(下图…
linux串口驱动分析 硬件资源及描写叙述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)port,每一个port都能够在中断模式或 DMA 模式下操作.UART 使用系统时钟能够支持最高 115.2Kbps 的波特率.每一个 UART 通道对于接收器和发送器包含了 2 个 64 位的 FIFO. 寄存器 名称 地址 在linux中的描写叙述 (2410 和 2440 处理器对内存地址映射关系同样) UART 线性控制寄存器(ULCONn) ULC…
1.串口驱动中的数据结构 • UART驱动程序结构:struct uart_driver  驱动 • UART端口结构: struct uart_port  串口 • UART相关操作函数结构: struct uart_ops   串口操作函数集 • UART状态结构: struct uart_state 串口状态 • UART信息结构: struct uart_info  串口信息 2.串口驱动程序-初始化 3.串口驱动分析-打开设备 static int s3c24xx_serial_sta…
继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的代码比较简单,它只有一个main函数,同时,和AppClient一样,它也有一个ClientEndpoint,只是两者的用途不一样. 1.Client Client中唯一的main方法如下: def main(args: Array[String]) { if (!sys.props.contain…
参考资料:1.ST HAL库官网资料 2.https://blog.csdn.net/u014470361/article/details/79206352#comments 一.STM32CubeMX配置外部时钟 注意在进行外部时钟配置时,即“High Speed Clock”和“Low Speed Clock”需配置成“Crytal/Ceramic Resonator(低温/陶瓷谐振器)”不能配置为"BYASS Clock Source(时钟脉冲源)",否则系统起不来. 二.SWD…
转自:http://blog.csdn.net/hanmengaidudu/article/details/11946591 硬件资源及描述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)端口,每个端口都可以在中断模式或 DMA 模式下操作.UART 使用系统时钟可以支持最高 115.2Kbps 的波特率.每个 UART 通道对于接收器和发送器包括了 2 个 64 位的 FIFO. 寄存器 名称 地址 在linux中的描述 (2410 和 2440…
非静态内部类引起内存泄漏的原因 内部类的实现其实是通过编译器的语法糖(Syntactic sugar)实现的,通过生成相应的子类即以OutClassName$InteriorClassName命名的Class文件.并添加构造函数,在构造函数中[传入]外部类,这也是为什么内部类能使用外部类的方法与字段的原因.所以,当外部类与内部类生命周期不一致的时候很有可能发生内存泄漏. Handler引起内存泄漏案例分析 例如,当使用内部类(包括匿名类)来创建Handler的时候,Handler对象会隐式地持有…
在我的<我的Android进阶之旅------>android异步加载图片显示,并且对图片进行缓存实例>文章中,先后使用了Handler和AsyncTask两种方式实现异步任务机制. 下面先来看一段代码,这段代码是用来显示条目时候调用的方法. @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = null; TextView textV…
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢?…
背景:两片STM32通过串口通信,为了减小CPU负担,采用DMA进行通信,发送端为STM32F103C8T6,接收端为STM32F407VET6.在调试的过程中发现,一直出现数据错位的问题,接收端尝试了串口空闲中断和串口DMA传输完成中断,错位问题依旧,其实我之前遇到过这个问题,那次发送端没有使用DMA,而是直接用串口发送,接收端采用DMA接收完成中断,检测到错位后,延时重置DMA,直到DMA接收同步后,不再重置,此后DMA便会保持同步,不会错位.但是这次不知道为什么采用上次的方法没有解决,因此…
背景:匿名上位机功能强大,这里想要采用匿名上位机输出一些调试信息,以波形的形式显示,方便观察和调试. 平台: 硬件:STM32F405RGT6 通信:2.4G zigbee无线串口收发模块 CC2530 软件:匿名上位机V6 数传模块操作简介: 配置 代码:(注意以下代码中不包含中断优先级的配置,个人习惯将所有nvic的配置写在一个单独的函数中) 这里采用UART2 DMA发送的方式 将数据通过数传发送给匿名上位机.采用DMA传输完成中断,可以实现不定长数据的传输. /* usart2 for…
日常开发中的api都在rt包中,具体路径为:/jdk1.8.0_162/jre/lib中,注意是在jre中. 每个包中大致包含以下几个部分: 接口 类 枚举 异常 错误 注解 J2EE开发中常用的包 java包(核心包) java语言本身 java.lang: java.util: 日期.数学计算 java.time java.math java.text io java.io: java.nio: 网络通信 java.rmi: java.net: 安全 java.security: 数据库 j…
前言 直接储存器访问(Direct Memory Access,DMA),允许一些设备独立地访问数据,而不需要经过 CPU 介入处理.因此在访问大量数据时,使用 DMA 可以节约可观的 CPU 处理时间.在 STM32 中一般的 DMA 传输方向:内存->内存.外设->内存.内存->外设.这里的外设可以是 UART.SPI 等数据收发设备. 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),在嵌入式开发中一般称为串口,…
Thread类中的方法调用方式: 学习Thread类中的方法是学习多线程的第一步.在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别: 1.this.XXX() 这种调用方式表示的线程是线程实例本身 2.Thread.currentThread.XXX()或Thread.XXX() 上面两种写法是一样的意思.这种调用方式表示的线程是正在执行Thread.currentThread.XXX()所在代码块的线程 当然,这么说,肯定有人不理…
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 对代码进行性能分析,之前往往是一种独立的Profiling过程,现在在VS 2015中可以结合到调试过程中. Charles Willis和Dan Taylor在MSDN上发表了的一篇文章<Analyze Performance While Debugging in Visual Studio 2015>,给大家介绍了如何在VS 2015中边调试边分析性能的方法(或者说是一个操作指南).…
TDA - Thread Dump Analyzer (Java线程分析工具)http://automationqa.com/forum.php?mod=viewthread&tid=2351&fromuid=2…
u-boot中nandflash初始化流程分析(转) 原文地址http://zhuairlunjj.blog.163.com/blog/static/80050945201092011249136/   下面对nand flash的初始化代码nand_init()进行分析: 1.如果定义(CONFIG_COMMANDS & CFG_CMD_NAND)没定义(CFG_NAND_LEGACY) 则start_armboot()调用driver/nand/nand.c中的nand_init(),否则如…
继续上一篇的内容.上一篇的内容为: Spark中Master源码分析(一) http://www.cnblogs.com/yourarebest/p/5312965.html 4.receive方法,receive方法中消息类型主要分为以下12种情况: (1)重新选择了新Leader,进行数据的恢复 (2)恢复完毕,重新创建Driver,完成资源的重新分配 (3)触发Leadership的选举 (4)Master注册新的Worker (5)Master注册新的App,然后重新分配资源 (6)Ex…
继续前一篇的内容.前一篇内容为: Spark中Worker源码分析(一)http://www.cnblogs.com/yourarebest/p/5300202.html 4.receive方法, receive方法主要分为以下14种情况: (1)worker向master注册成功后,详见代码 (2)worker向master发送心跳消息,如果还没有注册到master上,该消息将被忽略,详见代码 (3)worker的工作空间的清理,详见代码 (4)更换master,详见代码 (5)worker注…
关于 self 和 super 在oc 中 的疑惑 与 分析   面试一定都是很注重 基础的,不管高级还是初级. 虽然基础好跟基础不好都可以写 代码,网上那么多资料.  区分高低也就是研究的深度和广度. 开始我们的问题: @implementation Son : Father - (id)init { self = [super init]; if (self) { } return self; } 这段代码 估计很多人都 写烂了,就算没写烂,xcode 自动生成的 我们也看吐了. 好吧,来说…
转载:http://shmilyaw-hotmail-com.iteye.com/blog/1881302 前言 想讨论这个话题有一段时间了.记得几年前的时候去面试,有人就问过我一个类似的问题.就是java thread中对于异常的处理情况.由于java thread本身牵涉到并发.锁等相关的问题已经够复杂了.再加上异常处理这些东西,使得它更加特殊. 概括起来,不外乎是三个主要的问题.1. 在java启动的线程里可以抛出异常吗? 2. 在启动的线程里可以捕捉异常吗? 3. 如果可以捕捉异常,对于…
测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #define MY_TEMPLATE_H_2016_0123_1226 template<int iArySize> void fnTestDataType() { char szBuf[iArySize] = {'\0'}; unsigned short wTmp = 0; int iTmp = 0;…
(转自:http://www.cnblogs.com/xrq730/p/4851233.html) Thread类中的方法调用方式: 1.this.XXX 这种调用方式表示的线程是:线程实例本身 2.Thread.currentThread.XXX() 或者Thread.XXX() 上面这两种写法一样,表示的线程是正在执行Thread.currentThread.XXX()所在代码块的线程 Thread类中的实例方法 从Thread类中的实例方法和类方法的角度讲解Thread中的方法,这种区分的…
通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册,不在本文讨论范围.可以访问http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=320 ,一个国外网友的写的教程,作者很热心,我曾有发邮件给他,很快就回复了. 第二:微软在.NET新推出了一个串口控件,基于.NET的P/Invoke调用方法实现,详…
概述:这篇文章主体内容来源于网上转载.前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的根文件系统.以下内容全是转载:转自ubuntu/debian initrd 过程 自己最近花时间研究了一下 Linux 的 initial ram disk,然后就写了这篇文章.因为是要 给别人看的,所以写的时候就比较小心,不能放过细节.这样就要搞清楚之前不太在意的一些问题,对自己也是一个提高的过程…
[CTF隐写]png中CRC检验错误的分析 最近接连碰到了3道关于png中CRC检验错误的隐写题,查阅了相关资料后学到了不少姿势,在这里做一个总结 题目来源: bugku-MISC-隐写2 bugku-MISC-再来一道隐写 JarvisOJ-MISC-炫酷的战队logo 基础知识: ​ 先分析png的文件格式,用16进制编辑器010editor打开一张正常的png图片,逐字节分析如下: 前八个字节89 50 4E 47 0D 0A 1A 0A为png的文件头,该段格式是固定的 上图中高亮部分称…
官网地址 LTTng 简介&使用实战 使用LTTng链接内核和用户空间应用程序追踪 简介: LTTng: (Linux Trace Toolkit Next Generation),它是用于跟踪 Linux 内核.应用程序以及库的系统软件包 LTTng 主要由内核模块和动态链接库(用于应用程序和动态链接库的跟踪)组成 由一个会话守护进程控制,该守护进程接受来自命令行接口的命令 babeltrace 项目允许将追踪信息翻译成用户可读的日志,并提供一个读追踪库,即 libbabletrace. LT…
一.Thread类中的静态方法 Thread类中的静态方法是通过Thread.方法名来调用的,那么问题来了,这个Thread指的是哪个Thread,是所在位置对应的那个Thread嘛?通过下面的例子可以知道,Thread类中的静态方法所操作的线程是“正在执行该静态方法的线程”,不一定是其所在位置的线程.为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() /** * Returns a ref…