自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 C语言结构体的对齐原则

原文:http://www.cnblogs.com/luxiaoxun/archive/2012/11/09/2762438.htmlC语言结构体的对齐原则Q:关于结构体的对齐,到底遵循什么原则?A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:#include #include string.h>#define PRI

2016-11-30 16:39:57 571

转载 ANSI简介

ANSI是一种字符代码,为使计算机支持更多语言,通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。不同的国家和地区制定

2016-11-30 09:36:03 860

原创 解决KEIL MDK中文乱码的问题

之前使用MDK的时候一直出现中文乱码的问题,其实不是乱码,只是编辑器是以ANSI编码方式来识别字符的,所需要修改编辑器的编码方式,注意最好是修改成GB2312编码方式,因为有时候程序使用了中文字库需要在程序中输入中文字符串,而程序只能解码GB2312格式的中文字符串,所以以其他形式编码的中文是不能被程序正确解码的,需要使用GB2312编码。修改编辑器的编码方式如下:

2016-11-30 09:22:17 5072

转载 硬盘基本知识

原文地址:http://bbs.mydigit.cn/read.php?tid=331754硬盘的DOS管理结构 1.磁道,扇区,柱面和磁头数 硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区 域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节

2016-11-29 16:56:57 439

转载 IP头,TCP头,UDP头,MAC帧头定义

原文地址:http://www.cnblogs.com/li-hao/archive/2011/12/07/2279912.htmlIP头,TCP头,UDP头,MAC帧头定义 一、MAC帧头定义/*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress

2016-11-29 13:52:50 1281

转载 C#在winform中调用系统控制台输出

原文地址:http://www.tuicool.com/articles/E7zIreB在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示。所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅,发现是可以的,现在就把方法写下了:主要用到的是win32 API函数实现的:1 [D

2016-11-29 13:42:28 3943 2

原创 手把手教你写STM32的bootloader(SDIO读取TF更新Bootloader)

百度文库链接:http://wenku.baidu.com/link?url=N3dazsOFn4x2XS0t_1Cd3toxx3pNm4Bi85W5vaUuuOD6EiEKdPg9Q7ihEyS1JMEUCgkvxWyBK4uHnJbJjFdyuno5DC_Ny8PpjyKeKJwRDFS

2016-11-29 13:37:54 3949

原创 CRC16校验程序

CRC循环冗余校验原理参考:http://blog.csdn.net/liyuanbhu/article/details/7882789const uint16 wCRCTalbeAbs[] = { 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x

2016-11-29 13:32:43 1579

转载 RGB灯WS2812B

原文地址:http://www.wfuyu.com/technology/21994.html1.硬件介绍注:800Kbps,相当于1.25us传输1比特数据。注:在级联时,不要忘记每经过1个像素点传输,信号减少24bit.2.程序简介:这里是纳秒极的电平翻转,所

2016-11-29 13:25:24 9444

原创 Boot Device简介

Boot Device:A device which can be used by host system firmware to assist in system configuration prior to the loading of operating system software. A non-boot device does not need to be functional u

2016-11-28 15:15:08 10871

原创 基于STM32处理器的USB HID模拟鼠标键盘(2) - 实现键盘鼠标功能

由于在报告描述符中使用了两个Report ID,分别是0x01和0x02,前者是键盘的报告描述符的报告ID,后者是鼠标的报告ID,HID的键盘和鼠标发送的数据格式参考文档:http://linfengdu.blog.163.com/blog/static/1177107320122296942641/根据文档编写键盘和鼠标的发送函数如下: typedef enum { KEY

2016-11-28 10:42:12 18346

原创 C语言中的rand函数和srand函数

C语言中的rand函数和srand函数:只能产生伪随机数,最多也只是提高模拟的程度而已,rand函数内部管理着一个计数单位,程序每调用一次,它就根据这个计数单位和对应的srand产生种子的值,经过一系列的运算,得到随机值,其实就相当于你传了2个参数给rand(),比如是x是计数器的值,y是srand的值,那么:rand() = x*2 + y ,举个简单的例子,实际可能比这个关系式要复杂对于给定的

2016-11-27 23:21:38 3686

原创 什么是原语?

原语通常由若干条指令组成,用来实现某个特定的操作。通过一段不可分割的或不可中断的程序实现其功能。原语是操作系统的核心,它不是由进程而是由一组程序模块所组成,是操作系统的一个组成部分,它必须在管态(一种机器状态,管态下执行的程序可以执行特权和非特权两类指令,通常把它定义为操作系统的状态)下执行,并且常驻内存,而个别系统有一部分不在管态下运行。原语和广义指令都可以被进程所调用,两者的差别在于原语有不可

2016-11-27 23:20:13 7299 1

原创 【C语言】MCU系统printf函数重写以及fputc重定向

参考:http://www.51hei.com/mcu/3429.html//将stdio.h头文件中的printf函数注释掉不然会冲突//stdio.h头文件还是要包含的里面有va_list的定义//使用vsprintf将要打印的数据赋给字符串//使用字符串发送函数发送字符串//不要把这个数组放在printf函数里面,一方面会在栈分配内存上耗费时间//另一方面也是最主要的如果栈空

2016-11-27 23:16:12 5164 1

原创 C语言结构体对齐问题

C语言中为了保证结构体的运算速度,对结构体进行了对齐操作,默认对齐字节数是按照结构体中占用字节数最大的简单数据成员算的,结构体中的结构体不算是简单数据成员,简单数据成员包括char、int、short、long、long long、float、double以及他们的unsigned形式(如果有)。使用#pragma pack(n)可以让结构体按照指定的n字节对齐,但是如果n大于结构体中的最

2016-11-27 23:08:06 515

原创 上传文件到远程Linux服务器

使用命令scp,使用范例如下:ryscp filename username@host_addr:remotedirector这个命令其实是使用ssh登录到远程服务器host_addr,然后将filename传送到remotedirectory路径,这个命令需要账号的密码。

2016-11-27 23:00:33 511

原创 IAR集成开发环境建立Debug和Release版本

在菜单栏的Project-->Edit Configuration中增删改各个版本,通常建立一个Debug和一个Release版本,每个版本拥有不同的工程配置文件,都对应着一种配置,互相是独立的,但是都共享源文件。可以在Workspace下拉栏中选择,直接在不同的配置间切换。如下图所示:建立不同的版本是为了开发方便,可以试验不同配置环境。

2016-11-27 22:50:42 8030

原创 基于STM32处理器的USB HID模拟鼠标键盘(1) - USB HID基础

HID是Human Interface Device的缩写,HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。交换的数据存储在称为报表或报告(report)的结构内,设备的固件必须支持HID报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。设备除了

2016-11-27 20:17:19 21386 2

原创 JLINK固件修复方法

有时候jlink的使用不当会导致jlink“坏掉”,但是这个坏掉不是硬件烧了,而是jlink内部软件的问题,比如今天这个狗日的MDK5给我更新jlink的时候告诉我固件更新失败,我说失败就失败吧,无所谓。然后要命的是jlink尽然不能用了,估计是因为固件更新了一部分,所以导致不能使用了,或者是因为检测出我的jlink是盗版的,然后故意给我弄坏了,ma dan,正版80多一个你和我们血呢??坏了

2016-11-24 10:53:27 4874

原创 JLINK的SWD解法

下面是20针牛角接口的JTAG接口图和SWD接口图,使用JTAG是安装左边的接法,使用SWD调试时使用右边图片的接法,注意要在MDK的debug选项栏的settings中的port选择SWD。有一点很奇怪的是单片机的3.3V引脚必须接到1管脚而不能接到2管脚。我猜测是因为在JTAG模式中1脚和2脚都接到了VCC-3.3V但是在SWD模式下2管脚是不可用的,也就是reserved,所以必须接

2016-11-23 21:57:29 2714

转载 linux下解压命令大全

.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxv

2016-11-23 17:55:06 395

原创 Linux查看程序端口占用情况

使用下面命令:netstat –apn | grep 8080即可查看占用端口8080的进程ID号,使用kill命令可以杀死该进程,也可以kill -9 强制杀死。

2016-11-23 17:47:22 387

原创 关于ARM体系中栈的对齐问题

关于ARM体系中栈的对齐问题-汤权基于ARM架构的处理器的C语言程序设计遵循ATPCS(ARM-THUMB procedure call standard)和AAPCS(ARM Application Procedure Call Standard)。ATPCS规定数据栈为FD(满递减Full Decrease)类型,并且对数据栈的操作是8字节对齐的。在我自己的轻量级的嵌入式操作系统t

2016-11-23 09:55:59 3922

原创 tqOS的PendSV抢占式任务调度

参考文献为:1、Cortex-M3权威指南2、http://www.cnblogs.com/sky1991/p/stepbystep_stm32_os_3.html3、http://www.openedv.com/posts/list/64274.htm4、tqOS V1.2其实PendSV的原理就是软中断,将PendSV的中断优先级设置为最低,不可以打

2016-11-23 09:52:16 889

原创 什么是适配器?

什么是适配器?打个比方,手机要充电,市电是220V的交流电,而手机需要5V的直流电才能充电,所以不能直接将市电接到手机充电口上,那怎么办呢?这时候横空出世一个充电头,他的功能是将220V的交流电转变成5V的直流电,这样在市电和手机之间有了一个充电头的东西,这个东西就叫做适配器。简单的描述适配器就是“将两个不相关、不兼容、不搭配或者不相爱的东西连接在一起使得两者可以相关、兼容、搭配甚至相爱”

2016-11-23 09:48:49 2934

原创 Linux在应用层读写寄存器的方法

参考链接:http://blog.csdn.net/liukang325/article/details/26601811/dev/mem:物理内存的全镜像。可以用来访问物理内存。由于应用运行都在用户空间,使用的是虚拟内存,不能直接访问物理地址空间,通过/dev/mem文件可以用来访问系统的全部寻址空间。/dev/kmem:kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容

2016-11-23 09:40:55 3240

原创 ubuntu下搭建JAVA开发环境

参考链接:http://jingyan.baidu.com/article/86fae346b696633c49121a30.html安装步骤:1、根据机子的参数从官网下载JRE包。2、解压JDK包,注意不能再共享目录中解压,因为共享目录是Windows格式的,不支持连接文件,需要转到Linux文件系统分区解压。3、设置环境变量。4、生效配置。5、使用java -versi

2016-11-23 09:37:49 696

转载 windows下通过VNC图形化访问Ubuntu桌面环境

要在windows下图形化访问Ubuntu或其它Linux系统桌面环境有很多方法,我比较喜欢的是使用VNC服务,需要在Ubuntu下安装vncserver和在windows下安装客户端访问工具。 1. windows下客户端访问工具对于VNC,客户端访问工具也有不少,比如RealVNC、VNCViewer等,我比较喜欢的是VNCViewer,比较小巧轻量级,使用也十分简单,

2016-11-23 09:26:23 806

原创 使用KEIL-MDK直接生成bin文件

MDK下的output选项栏中只有生成HEX文件的选项没有生成bin文件的选项,但是这不代表MDK不能生成bin文件。要生成bin文件需要在选项中的User选项卡中添加命令来生成bin文件。命令使用的是fromelf.exe工具。参考:http://blog.csdn.net/zhzht19861011/article/details/5927924。我的设置是:C:\

2016-11-23 09:22:36 974

原创 内存分配的几种方式Stack, Heap, Pool

内存分配的几种方式Stack, Heap, Pool引述1:http://www.tuicool.com/articles/BvQrUvzThree WaysThe figure below shows three ways of allocating memory from within a C++ application: stack, heap, custom written

2016-11-22 18:41:01 1602

原创 C语言编译过程

1.       预处理(Preproceessing)预处理的过程主要处理包括以下过程:将所有的#define删除,并且展开所有的宏定义处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。删除所有注释 “//”和”/* */”.添加行号和文件标识,以便编

2016-11-22 18:38:48 569

原创 [原创] 删繁就简--1 bit的查找,看了白版主的0bit查找的感想

tqOS中使用了OsMapTable任务优先级映射表来查找最高有效位。这在8*8任务的系统中是可行的,需要的查找表有256个元素。但是如果进一步提升系统的最大可支持的任务数量,比如16*16最大支持256个任务的话,就需要查找表中有2^16=65535个元素,每个元素2个字节,也就是一共128KB......不可思议,所以如果扩展最大任务数量至16*16甚至是32*32,用查找表就不合适了。可以使

2016-11-22 18:36:32 648

原创 什么是回调(Callback)函数

回调函数参考:http://www.zhihu.com/question/198011311、“你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数

2016-11-22 18:34:07 889

原创 Linux配置防火墙,开启特定端口

http://www.myhack58.com/Article/48/66/2012/34999.htm编辑iptables文件:vi /etc/sysconfig/iptables,添加下面两行话:-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙) -A INPUT -m

2016-11-22 18:05:34 1651

转载 Image uImage与zImage的区别【转】

1,内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImag

2016-11-21 15:32:14 490

原创 Ubunt16.04下编译Linux遇到的问题

编译环境为64位Ubunt16.04,arm-linux-gcc版本为4.3.3,再make menuconfig玩之后进行make zImage的时候出现下面的错误:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.我也不知道什么

2016-11-21 15:08:14 824

原创 Linux下make menuconfig出错解决办法

64位Ubuntu16.04下使用menuconfig配置linux内核,但是刚安装的Ubuntu使用make menuconfig时出现下面的错误: *** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' requires the ncurses li

2016-11-21 14:51:38 909

原创 64位Ubuntu下使用arm-linux-gcc交叉编译器

arm-linux-gcc是用于交叉编译ARM平台上Linux程序的编译器,在32位的宿主Linux计算机上运行时是正常的,但是在我的64位Linux发行版Ubuntu系统上却无法运行,报错:/usr/local/arm/4.3.3/bin/arm-linux-gcc: 3: /usr/local/arm/4.3.3/bin/arm-linux-gcc: arm-none-linux-gnueab

2016-11-21 14:11:22 2492

原创 Linux下使用LCD5110显示中文(ASCII+GB2312字库)

关于如何在Linux下使用LCD5110参见另一篇blog:http://blog.csdn.net/tq384998430/article/details/53214273。在这篇博客的基础上需要添加屏幕绘点的函数:void LCD_DrawDot(int x,int y,int onoff){ int a = y / 8,b = y % 8; if(onoff) { LCD_B

2016-11-20 21:22:03 3969

原创 Linux下使用/dev/mem控制GPIO模拟SPI时序控制LCD5110

关于如何使用/dev/mem直接控制GPIO口参见我的另一篇博客:http://blog.csdn.net/tq384998430/article/details/53161192。这篇文章将使用GPIO的操作模拟出SPI时序来控制诺基亚LCD5110屏幕,关于该屏幕可以自行百度,网上资料很全。使用GPIO模拟SPI是单片机开发中常用的一种手段,GPIO还可以模拟IIC等总线的时序,可以用在没

2016-11-18 11:18:33 2819

空空如也

空空如也

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

TA关注的人

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