S3C2440—6.串口的printf实现】的更多相关文章

文章目录 一.框架 二.printf函数原理 2.1 printf的声明 2.2 参数解读 2.3 如何得到可变参数的值 2.4 解决变参的宏定义 2.5 完成printf函数的封装 三.结合UART实现 一.框架 在之前STM32的学习中,我在串口输出调试信息的时候,经常采用printf()函数作为串口输出函数,这样不仅方便调试而且代码易读. 在S3C2440的学习中,对于UART同样需要对串口输出信息进行调试,那么在这里可不可以使用printf函数呢? 当然是可以的,不过相比于STM32中简…
一.printf函数格式 printf函数具有强大的输出功能 %表示格式化字符串输出 目前printf支持以下格式的输出,例如: printf("%c",a);输出单个字符. printf("%d",a);输出十进制整数. printf("%f",a);输出十进制浮点数. printf("%o",a);输出八进制数. printf("%s",a);输出字符串. printf("%u",a…
使用 VSCode 给STM32配置一个串口 printf 工程 gcc 重定向 printf 和 keil 不一样. 文件准备 先从以前的工程中拷过一份串口的代码来,然后在 main 函数中初始化串口并 print 一个数据吧. 新添加的文件需要添加到 Markfile 文件中,否则编译肯定会报错的.同时为了 vscode 不报错也把 include 路径在 c_cpp_properties.json 中放一份. .h 文件路径 -> Makefile + c_cpp_properties.j…
转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=27025492&id=327609 一.核心数据结构 串口驱动有3个核心数据结构,它们都定义在<#include linux/serial_core.h> 1.uart_driver uart_driver包含了串口设备名.串口驱动名.主次设备号.串口控制台(可选)等信息,还封装了tty_driver(底层串口驱动无需关心tty_driver). struct…
keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如下: 虚拟 串口使用:步骤 1 下载虚拟串口软件,虚拟2个连接的串口COMA/COMB,这两个串口与PC机的真实物理串口没关系.两边的设置相同 2 打开串口通讯助手,将A分配给串口通讯助手,则B就分配给下面的COMx 2 在MDK中输入命令行或者将下面的做成debug.ini文件加载 MODE CO…
1 前言 STM32有强大的固件库,绝大部分函数都可以有库里面的函数组合编写.固件库可以到ST官网(www.st.com)上下载,也可以搜索“STM32 固件库 v3.5”下载到固件库.本文章就是基于固件库来编写有关串口的输入输出函数.由于博主的知识水平有限,目前仅仅是将程序的思路和实现给出,具体到函数的执行效率.代码的简化方面未进行深入探讨.如果有兴趣的同学可以联系我,我们可以一起探讨一下. 2 STM32固件库 有关固件库的详细介绍,在emouse 思·睿 技术博客里有较为详细的解释(详见h…
本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分. 特别说明,本书内容是以STM32F76xxx系列控制器资源讲解. 20.1  串口通讯协议简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息. 在计算机科学…
最近在客户那调试串口的时候,read串口然后printf打印,单字符printf,发现没有输出,后来想起来printf这些标准输入输出函数也是属于标准C库glibc的, 这里就要区分一下标准库函数和系统调用了. 系统调用是内核提供给上层程序的接口,能够实现内核和上层之间的交互,系统调用在内核中的实现是软中断的方式,通过相应的中断服务例程来实现,而标准库函数是在系统调用的基础之上封装的应用程序,完全运行在用户态,在必要的时候调用系统调用.编写应用程序可以直接使用应用程序也可以使用库函数,那为什么还…
此项目源码下载地址:https://github.com/lizhiqiang0204/STM32CubeIDE_Uart 串口与中断配置如下 在生成的main函数中,添加开启串口接收中断 HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USE…
原创博客:欢迎转载,转载请注明出处https://i.cnblogs.com/EditPosts.aspx?postid=6218383 1.简介(基于s3c2440 linux) 在内核调试技术之中,最简单的就是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在linux内核中没有这个库,所以在linux内核中,使用这个printk就要对内核的实现有一定的了解. printf和printk的区别:printk会在开头处加上"&…
linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用软件的编写: 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编程技巧:多进程.多线程.进程间通信.多任务之间的同步互斥等,嵌入式数据库的学习,UI编程:QT.miniGUI等. (2)Linux固件工程师(Fir…
 一.实验内容: 通过串口发送单个字符到NRF51822,NRF51822 接收到字符后将其写入到FLASH 的最后一页,之后将其读出并通过串口打印出数据. 二.nRF51822芯片内部flash知识: EN-nRF51D 开发板使用NRF51822 芯片为nRF51822-QFAA,如下图所示,共有256KBFLASH,256 页,页大小为1024 字节. NRF51822 内部FLASH 写流程如下: 三.代码解析: main: int main(void) { ... 串口初始化 prin…
资源:http://blog.csdn.net/zhzht19861011/article/category/6191478 资源:可以下载安富莱的STM32-V5开发版资料中的FreeRTOS教程,里面有详细介绍各个功能,可以在http://wenku.baidu.com/search?word=%B0%B2%B8%BB%C0%B3STM32-V6%BF%AA%B7%A2%B0%E5FreeRTOS%BD%CC%B3%CC&lm=0&od=0&fr=top_home中查找相应的文…
开发环境:Ubuntu 12.04 开发板:mini2440  256M NandFlash   64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本:busybox-1.13.3  点此可下载 yaffs制作工具:mkyaffsimage yaffs2制作工具:mkyaffs2image(适合64M).mkyaffs2image-128(适合128M以上) 紧接上一节:http://blog.csdn.net/mybelief321/articl…
51单片机内部只有128字节的RAM(8051),而8052有256字节的RAM,低128字节RAM直接或间接寻址都可以,高128字节RAM与SRF特殊功能寄存器共用地址,SFR只能直接寻址,高128字节RAM只能间接寻址.所以通常用总线方式扩展一片RAM.一般用62256(32kX8bit RAM).访问方式可参考我的博文: http://blog.ednchina.com/tengjingshu/218041/message.aspx 现在新出的51单片机都在内部扩展了外部RAM.这个RAM…
.dts==>.dtb ==>device_node ==>  platform_device ==> led_dev.c  ==>匹配 led_drv.c    (设备树是对平台设备总线的一种改进) 1.使用设备树时平台设备总线源码分析          平台设备总线分析:https://www.cnblogs.com/zsy12138/p/10391933.html struct bus_type platform_bus_type = { .name = "p…
目录: 第1部分:参照“正点原子USB虚拟串口工程移植步骤”移植ST的USB HID工程(失败了): 第2部分:在1的基础上,替换USB HID初始化代码为ST 例程中的代码,编译后根据报错调试(失败了): 第3部分:直接移植ST的USB HID工程,根据报错调试代码(成功了).       小孙想要总结这一年来学到的关于stm32的USB相关知识,但又不知道怎么总结,于是决定 从头开始调试固件库代码,直到实现USB功能为止!     首先准备参照正点原子<第88讲 USB虚拟串口实验-M3>…
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节开始讲解 RTX 的另一个重要的资源共享机制---互斥信号量(Mutex,即 Mutual Exclusion的缩写). 注意,建议初学者学习完上个章节的信号量后再学习本章节的互斥信号量. 一定要多思考,二值信号会造成优先级翻转,所以在优先级有严格要求的场合,请使用互斥信号.互斥信号量的概念及其作用互斥信号量就是信号量的一种特殊形式,也就是信号量初始值为 1 的情况. 有些 RTOS 中也将信号…
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制,二值信号量. 二值信号量是计数信号量的一种特殊形式,即共享资源为 1 的情况. FreeRTOS 分别提供了二值信号量和计数信号量,其中二值信号量可以理解成计数信号量的一种特殊形式,即初始化为仅有一个资源可以使用,只不过 FreeRTOS 对这两种都提供了 API函数,而像 RTX,uCOS-II 和 III 是仅提供了一个信号量功能,设置不同的初…
STM32F10xxx内置两个看门狗,提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障. 独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效.IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合. 我们的实验这样设计,主函数开始的时候,向串口输出"Hello World",然后启动看门口(溢出时间设定为3秒钟).在按下按键的时候…
第50章     读写内部FLASH 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:<STM32F4xx 中文参考手册>.<STM32F4xx规格书>.库说明文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 50.1 STM32的内部FLASH简介 在STM32芯片内部有一个FLASH存储器,它主要用于存储…
/*************************************************************** ** Find the serial number Node ** Receive the serial data in order to determine the number ** Version V1.0 From jinliming CT-TC 2017-07-27 **********************************************…
MCU:stm32f769NIHx  PHY:LAN8742A LWIP_VERSION:2.0.3 1.配置RCC,串口(printf debug log) (1)开启RCC,配置时钟系统 图1.1 (2)时钟树配置如下图所示 图1.2 (3)串口1配置基本参数 图1.3 /* 小技巧 */ 在工程里我们平时会用到printf打印debug信息,如果产品发布的时候,这些打印信息就要注释掉,为了方便管理,我们会对prinf再次封装并用宏去控制开启和关闭debug_log /* printf重定向…
互斥信号量可以在资源保护的时候很有帮助.用于控制在两个或多个任务间访问共享资源.任务1里面用互斥,那么任务2只能等任务1访问完再访问同一个变量. 比如全局变量double gADC_value[CH_ADC_NUM] = {0};      //7 adc channals 任务1中:周期100ms的采样任务,并保存数据都全局数组中. osMutexWait(myMutex01Handle, osWaitForever);             gADC_value[adc_index] =…
关于:IC( Inter-- Integrated Circuit)总线是一种由 PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据.在CPU与被控I2C之间.I2C与I2C之间进行双向传送,高速IC总线一般可达400kbps以上. I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号.结束信号和应答信号. 开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据. 结束信号:SCL为高电平…
目录 前言 11.1 任务同步 11.2 信号量概念 11.3 二值信号量 11.3.1 二值信号量概念 11.3.2 优先级翻转 11.3.3 二值信号量运作机制 11.4 计数信号量 11.4.1 计数信号量概念 11.4.2 计数信号量运作 11.5 互斥量 11.5.1 互斥量概念 11.5.2 优先级继承机制概念 11.5.3 互斥量运作 11.6 递归互斥量 11.6.1 递归互斥量概念 11.6.2 递归互斥量运作 11.7 死锁概念 11.8 创建信号量 11.8.1 创建二值信…
onps栈的移植涉及几个部分:1)系统配置及裁剪:2)基础数据类型定义:3)RTOS适配层实现:4)编写网卡驱动并注册网卡.本文作为onps栈移植的指导性文件将给出一般性的移植说明及建议,具体的移植样例工程及说明请移步码云下载: <onps网络协议栈移植及使用说明v1.0> 目标os为rt-thread的移植样例工程(STM32F407VET6及STM32F103RCT6两个平台) 目标os为ucos-ii的移植样例工程(硬件平台同上) 关于onps栈的前世今生请移步上一篇博文<开源网络…
在单片机开发中,我们借助于vsprintf函数,可以自己实现一个printf函数,但是,那是IDE帮我们做了一些事情. 刚开始在ARM9裸机上自己写printf的实现的时候,包含对应头文件也会提示vsprintf函数找不到,查询很多资料之后,发现使用arm-linux-ld就是找不到对应的库函数,换成arm-linux-gcc 使用, arm-linux-gcc -v -static -Wl,-Tsdram.lds,-Map,system.map -nostartfiles -o sdram.e…
stm32学习笔记----双串口同时打开时的printf()问题 最近因为要使用串口2外接PN532芯片实现通信,另一方面,要使用串口1来将一些提示信息输出到上位机,于是重定义了printf(),使其将打印的信息重定向至串口1.但是当在程序中调用printf()时,却发现上位机无论如何都接收不到信息,而且printf()之后的语句也不再执行,想必程序在printf()函数里面死掉了吧.当时觉得很纳闷,因为单独只使用一个串口时,printf()是没有问题的.往下说之前,先贴一下双串口的配置和pri…
使用fifo的好处有: 1:串口的数据发送的数据量较大时,使用fifo可以大大降低MCU的开销.(有点类似串入并出的cput处理模型,本质上还是串行收发) 2:在某些特殊场合,例如制定较复杂的协议时,可以使用fifo特性来做协议简化,比如一包 数据包含8个字节,(并且fifo设置的长度为8),这样相当于把uart转换为类似CAN/以太网模型, 这样信息可扩展性得到了质的提高,当然,这里需要同步协调.  fifo分析拓展: 1. 如果要用中断来处理接收到的数据,就是说,接收完数据然后产生中断,再于…