![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发
文章平均质量分 81
龙图腾
驱动工程师真心喜欢学习真心喜欢技术
展开
-
解决反正的频繁弹出 扫描并修复
因为嵌入式开发,常用的SD卡需要在linux中格式化为多个分区。这个时候,sd卡接入windows后会弹出 扫描并修复 。。。。特别烦人。如果不小心还会搞坏卡里面的BootLoader解决方法:我的电脑->管理->服务 ->shell hardware detection关掉...原创 2020-11-26 18:37:54 · 1251 阅读 · 0 评论 -
linux底层设置分辨率 DRM KMS 理解
我的理解原创 2020-11-26 18:31:33 · 1457 阅读 · 0 评论 -
解决hisi编译器出错nl_intern_locale_data: Assertion
遇到问题:编译uboot与内核过程中出现:arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.百度答案:1,首...原创 2020-05-06 17:10:35 · 2836 阅读 · 8 评论 -
linux DTC处理#include
我在尝试使用kernel DTC命令编译时,冒出错误,发现有错误。进而得知·。发现dts文件中引用了.h文件.linux自带的DTC文件无法直接编译DTC需要GCC预处理预处理方法如下:cpp -Wp,-MD,x.pre.tmp -nostdinc -I. -I kernel/include/ -undef -D__DTS__ -x assembler-with-cpp -o...原创 2020-03-23 12:58:29 · 1892 阅读 · 0 评论 -
linux shell:替换结构 ${var1##*:} ${bz1%,*}的意思
介绍下Shell中的${}、##和%%使用范例,本文给出了不同情况下得到的结果。假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##*/}:删掉最后一个 / 及其左边的字符串:...转载 2020-01-02 15:40:46 · 600 阅读 · 0 评论 -
MBR简介
MBR,全称为Master Boot Record,即硬盘的主引导记录。 为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。 硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition ta原创 2011-12-01 12:04:25 · 1417 阅读 · 0 评论 -
SPI总线协议及SPI时序图详解
SPI总线协议及SPI时序图详解SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。 SPI是一个环形总线结构,由原创 2011-12-01 16:32:09 · 4568 阅读 · 0 评论 -
SPI,UART,I2C都有什么区别,及其各自的特点
区别:SPI:高速同步串行口。3~4线接口,收发独立、可同步进行 UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢 I2C:一种串行传输方式,三线制,网上可找到其通信协议和用法的 3根线实现数据双向传输 串行外围接口 Serial peripheral interface UART:通用异步收发器 UART是用于控制计算机与串行设备的芯片。有一点要注意的原创 2011-12-01 16:40:19 · 1471 阅读 · 0 评论 -
WinCE5.0中文模拟器SDK(VS2005)的配置
WinCE5.0中文模拟器SDK的安装过程不细说了,一路默认即可,下面主要介绍如何配置,使其能在VS2005中正常使用。 安装完成后,打开VS2005,点击菜单“工具”——“选项”——“设备工具”——“设备”,选择“Windows CE 5.0 ARMV4I Emulator”,点击“属性”按钮,如下图所示。 在弹出的对话框中,点击“仿真器选项”,如下图所示。原创 2011-12-01 21:27:51 · 781 阅读 · 0 评论 -
WinCE下VB.NET读写注册表的参考代码
与桌面Windows系统类似,WinCE将有关操作系统、应用程序和驱动的设置信息都保存在系统注册表中。WinCE的注册表与桌面系统中的组织方式也差不多,包括了如下四个根键: HKEY_CLASS_ROOT,包含了文件扩展名信息和COM子系统的配置信息 HKEY_LOCAL_MACHINE,包含了系统、驱动和应用程序的配置信息 HKEY_CURRENT_US转载 2011-12-01 22:01:54 · 602 阅读 · 0 评论 -
WinCE动态修改启动LOGO
前两天介绍了WinCE启动界面的定制,在实际应用中经常还需要让用户方便修改启动LOGO。通常情况下,启动LOGO是编译到BOOT代码中的。为了实现动态修改启动LOGO,需要将LOGO保存至Flash中,BOOT启动时从特定的位置将其读取出来,并填入FrameBuffer。另外,必须让用户能够通过应用程序在WinCE系统中修改Flash中保存的LOGO。为了方便BOOT中显示,一般会在PC上利用Im转载 2011-12-01 22:07:49 · 570 阅读 · 0 评论 -
WinCE 6.0中断驱动程序分析
Windows Embedded CE 6.0的中断处理过程主要分为两部分: 中断服务例程(ISR):处于内核中的低级处理程序,中断发生时首先被调用。中断服务线程(IST):处于驱动或者应用中的中断处理线程,由系统调度,完成大部分的中断处理工作。ISR的实现在OAL(OEM适配层)中,它只处理最低级的中断响应,通常是获取IRQ和SYSINTR并设置MCU内部的中断控制寄存器。中断处理的转载 2011-12-02 09:34:33 · 1112 阅读 · 0 评论 -
ActiveSync合作关系对话框的配置
当设备与PC同步时,ActiveSync软件经常会弹出如下图所示对话框。一般在调试阶段,选择“否”并点击“下一步”按钮,关闭该对话框。为了省去每次点击的麻烦,可以修改注册表,使其在同步时并不弹出该对话框,设置如下,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Services]"GuestOnly"=dword:000000转载 2011-12-02 09:45:45 · 423 阅读 · 0 评论 -
单机搭建WinCE开发环境
这两天在调试RMC程序,这是一个WinCE下的“远程桌面”程序。由于在单位没有时间调,所以只能回家做,可家里又没实验板。好在Windows CE是有模拟器的,可以用模拟器代替实验板进行程序的调试。即便如此,还是碰到了一些问题,不过都一一解决了,写出来跟大家分享一下。 最早主机上已经安装了EVC4+SP4,VS2005+SP1+Platform Builder6.0+R2等原创 2011-12-01 21:27:00 · 885 阅读 · 0 评论 -
定制WinCE6.0标准界面的一种方法
之前在《WinCE中公开源代码的编译方法》和《WinCE下定制触摸校准界面的方法》里介绍了如何修改Public目录下的源代码并且快速编译的方法。这里补充一个定制WinCE6.0标准界面的方法。具体的说,就是修改RES文件实现定制WinCE6.0的标准界面。该问题来自于lkb——我要将超时参数设置框里的“在x分钟之后”改成显示“在x秒之后”。下面就以这个问题为例做介绍,算是对lkb提出问题的一个解答转载 2011-12-01 21:32:08 · 777 阅读 · 0 评论 -
WinCE下调试串口的动态复用
车机项目中用到了很多串口外设,如DVD机芯、GPS、蓝牙、雷达和胎压监测等,而主CPU(TCC89XX)与小MCU(STM32)之间也是通过串口通讯的。一时之间,串口使用有点捉襟见肘的感觉,只能把调试串口拿出来用做普通串口。 调试串口用作普通串口本身没什么问题,之前在S3C2410上也做过。当时是把2410的调试串口强制改为普通串口,系统启动后调试串口就无法正常使用了。但目前的项目仍原创 2011-12-01 21:46:39 · 1264 阅读 · 0 评论 -
WinCE下应用程序的单实例运行
实现应用程序的单实例运行有很多种方式。如果是有窗口的应用程序,可以通过FindWindow()查找窗口来确认是否已有同名窗口存在。如果是无窗口的应用程序,可以用互斥体等内核对象实现。一般来说,在程序的入口处检查是否已有实例在运行。如果没有,则继续执行。如果有,则退出本次运行。基本流程如下图所示。 以互斥体实现的单实例参考代码如下。Code hi转载 2011-12-01 21:50:29 · 893 阅读 · 0 评论 -
合并HEX文件的一种方法
《合并BIN文件的两种方法》介绍了如何合并BIN文件,在这个基础之上再配合hex2bin.exe和bin2hex.exe这两个小工具就可以很方便的将两个HEX文件合并成一个了。当然,最终目标是在编译完成之后,自动完成所有转换的工作。而这需要在Keil MDK中配置一下编译选项,如下图所示。 在编译完成之后,分别执行两个批处理。先将生成的hex文件转换为bin文件,然后将IAP和M转载 2011-12-01 21:54:13 · 2735 阅读 · 0 评论 -
WinCE6.0 KITL概要
KITL(Kernel Independent Transport Layer)即内核独立传输层,它为我们提供了一种调试WinCE的简便方法。KITL将通信服务协议和用于通信的硬件分离开来。所以我们在创建硬件传输层时就省去很多麻烦,否则我们自己必须实现与设备进行数据交互的协议。KITL工作在硬件传输层之上,因此,它无须关心用于通信的具体硬件,我们可以用USB、Serial或者Ethernet作为K转载 2011-12-02 09:38:32 · 574 阅读 · 0 评论 -
WinCE驱动程序的分类
最近有一些同学发邮件问我,驱动调试助手到底能动态加载哪些驱动,为什么在加载USB设备驱动时总是失败。要解释这个问题,首先得弄清楚WinCE中驱动的相关概念。本文将主要介绍WinCE下驱动程序的分类。 驱动程序是介于操作系统和设备之间的一个代码层,它的主要作用是为操作系统提供一个接口,以操作不同的硬件,包括物理的和虚拟的设备。虽然驱动程序有很多种,但从编程的角度来看,无非是往一个固定转载 2011-12-02 09:41:10 · 424 阅读 · 0 评论 -
WinCE下流驱动的一点说明
一般情况下,WinCE流驱动的索引为0~9。应用程序中,通过CreateFile(_T("XXXN:"),…)打开对应的驱动,N也为0~9。这样看来,似乎在WinCE下同名流驱动个数被限制在10个以内。如果设备中有更多的同名设备该怎么办呢? 解决的方法有两个,第一种是换前缀,将XXX改成YYY,这样就又有10个可用的设备名了。当然,修改前缀时需要注意,驱动源代码和注册表中的Prefi转载 2011-12-01 21:47:32 · 1472 阅读 · 0 评论 -
合并BIN文件的两种方法
在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一个文件,方便烧写和生产。下面结合STM32的IAP Bootloader Code和Application Code的合并,介绍两种合并BIN文件的方法。 首先简单介绍一下STM32的IAP。IAP(In-application-programming),即在应用中编程。有了它,产品发布之后,仍然可以方便的升级固件,而不需要转载 2011-12-01 21:54:43 · 2116 阅读 · 0 评论 -
WinCE下读写注册表的又一种方法
上一篇介绍了VB.NET读写WinCE注册表的方法,用着确实方便。在驱动或者应用程序开发的过程中,其实也有一种简便的方法读写注册表,使用微软提供的CReg类(Registry helper class)。用法也很简单,只要包括creg.hxx即可,SDK中一般会包含该头文件。 闲话少说,直接附上代码,供参考。Code highlighting produced by转载 2011-12-01 22:01:20 · 1113 阅读 · 0 评论 -
WinCE显示资源中BMP图片的几种方法
前面介绍了如何直接操作WinCE的FrameBuffer,这里将介绍一种通过写FrameBuffer显示资源中BMP图片的方法。并与使用GDI做一个比较,看看直接读写FrameBuffer是否能提高效率? 采用GDI的方法,关键代码如下:Code highlighting produced by Actipro CodeHighlighter (freeware)转载 2011-12-02 09:26:08 · 1151 阅读 · 0 评论 -
WinCE中显示32位色BMP文件的一种方法
前面介绍了如何显示资源中BMP图片的方法,这里补充一个显示32位色BMP图片文件的方法,并再次比较直接写显存与用GDI的区别。 首先将WinCE5.0的模拟器显示属性修改为480*272*32,并准备一张32位色的图片,如下图所示。 使用直接写显存的方法,关键代码如下: Code highlighting pr转载 2011-12-02 09:27:50 · 951 阅读 · 0 评论 -
WinCE控制面板添加应用程序
WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构,而.cpl文件和控制面板中的实际应用程序相对应。WinCE的控制面板中的每个应用程序都由两部分组成:应用程序本身和所对转载 2011-12-02 10:26:38 · 568 阅读 · 0 评论 -
图解WinCE6.0下的内核驱动和用户驱动
在《WinCE驱动程序的分类》中曾提到,WinCE6.0的流驱动既可以加载到内核态也可以加载到用户态。下面通过一组图片简单说明一下这两种驱动的关系。 首先编写一个流驱动WCEDrv,代码如下。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHigh转载 2011-12-01 21:55:37 · 893 阅读 · 0 评论 -
WinCE下串口蓝牙模块的调试
拿到模块后,先请ZWEI帮忙把模块飞到板子上,最后的情形有点像蜈蚣跟蜘蛛在打仗,而且难分难解。 飞完线后用串口调试助手发送AT#指令,以确认蓝牙模块和串口都能正常工作。结果,运气不太好,发出去的指令就好像石沉大海了一样。 又请ZWEI用示波器量了一下RXD和TXD,信号都正常。把TXD和RXD短接,用串口调试助手自发自收,也不成功。串口调试助手,应该是没问题的,久经考验太长时间转载 2011-12-01 21:56:49 · 1248 阅读 · 0 评论 -
WinCE6.0实现TexFAT的注意点
TexFAT(Transaction-safe Extended FAT)与TFAT功能一样,在WinCE6.0之前,包括Windows Mobile6.5使用的是TFAT,WinCE6.0和WP7则使用TexFAT。它的含义、功能及其细节,请参考http://msdn.microsoft.com/en-US/library/ee490643.aspx。 在格式化TexFAT文件系统转载 2011-12-01 21:57:22 · 1545 阅读 · 0 评论 -
WinCE下自定义的大软键盘
WinCE下默认的大软键盘如下图所示。 在实际应用中,很多按键,如最上面一行的F1~F12几乎很少使用,只有数字、字母和几个重要的功能键用的较多,所以,我们可以根据自己的需求定制软键盘。 WinCE6.0中,其源代码位于C:\WINCE600\PUBLIC\COMMON\SDK\SAMPLES\LARGEKB。至于如何修改,这里就不做介绍了,应该转载 2011-12-01 22:05:03 · 1149 阅读 · 0 评论 -
WinCE6.0的EBOOT概要
为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤:1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。2. 利用创建的BSP,定制一个系统设计(OS Design)。即通过转载 2011-12-02 09:13:10 · 437 阅读 · 0 评论 -
S3C2410下WinCE6.0的启动过程详解
通过前两篇文章的介绍,我们已经知道NBOOT用来引导EBOOT,继而EBOOT加载并引导WinCE操作系统(NK)。那么,WinCE6.0的启动过程又是怎样的呢?本文基于S3C2410的平台做一个详细的分析。需要说明的是,WinCE6.0的整个启动过程对于同一类型的MCU来说大同小异,如S3C2410和PXA270同属ARM平台的MCU,所以他们的启动过程是类似的,可以说唯一的不同就在OAL处,而转载 2011-12-02 09:16:44 · 1135 阅读 · 0 评论 -
S3C2410-WinCE6.0-OAL的启动代码分析
Code 1 INCLUDE kxarm.h 2 3 IMPORT KernelStart 4 5 TEXTAREA 6 7 ;Include memory configuration file with g_oalAddressTable 8 9 INCLUDE oemad转载 2011-12-02 09:19:04 · 1037 阅读 · 0 评论 -
WinCE6.0下如何动态设置系统分辨率
由于WinCE的显示驱动是本地驱动,不能像流驱动一样动态加载。所以,一般情况下不能动态修改和调试。前两天曾介绍过一种在应用程序中针对相同分辨率但不同尺寸的LCD的调试方法。这里继续介绍WinCE6.0下动态设置系统分辨率的一种方法。我们可以通过系统提供的ChangeDisplaySettingsEx()函数实现动态修改系统的分辨率。 设定系统分辨率的参考代码如下: DW原创 2011-12-01 21:25:48 · 1885 阅读 · 0 评论 -
WinCE下如何获取进程所在的目录
众所周知,WinCE下没有当前目录的概念,所有路径都以根目录"\\"为参考。获取进程所在目录的参考代码如下。 GetModuleFileName(NULL,gszPath,MAX_PATH); int len = wcslen(gszPath); TCHAR *p = gszPath + len; while (*--p != _T('\\'))转载 2011-12-02 09:48:44 · 705 阅读 · 0 评论 -
Windows CE下流驱动的动态加载
我想很多WinCE的开发人员,尤其是刚入门并且做驱动开发的工程师,都曾碰到这样一个问题,要编写一个外围设备的驱动,拿最简单的GPIO驱动来说,编写驱动本身可能只花了一会儿功夫,可要把编译生成的DLL打包到先前做好的操作系统映像当中,最简单也得MakeImg一下,还要修改BIB文件、注册表文件,以让系统启动的时候就加载该驱动,所有工作都做完了,还得花几分钟下载整个操作系统到内存去运行,这也得要个好几转载 2011-12-02 09:12:40 · 642 阅读 · 0 评论 -
SPI总线协议
SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。 假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。 那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这转载 2011-12-28 10:47:17 · 475 阅读 · 0 评论 -
用IMX51_EVK小系统模拟新板子--修改u-boot宏定义
为了能够使u-boot能够把环境变量保存在自己所在的SPI NOR FLASH中,必须要修改相应的宏定义文件。步骤如下:1、修改mx51_bbg_android.h 文件在~/MyAndroid/bootable/bootloader/uboot-imx/include/configs/目录下,找到mx51_bbg_android.h 文件。用gedit或者vi打开,修改如下:转载 2012-05-29 11:34:17 · 1169 阅读 · 0 评论 -
u-boot 配置文件
一、配置文件名称和目录这个配置文件的名称为 开发板名称.txt。这个配置文件的目录为 include/configs/ 目录。二、宏定义整个文件的内容使用条件宏定义 #ifndef __CONFIG_H#define __CONFIG_Hxxxxxxxxxxxxxxxxxxxxxxxx转载 2012-05-29 12:53:44 · 931 阅读 · 0 评论 -
ramdisk作为根文件系统的配置
从ramdisk根文件系统启动Linux成功,总结一下 今天做了个试验,让Linux2.6.29.4从ramdisk根文件系统启动成功,总结一下。其中涉及的内容较多,很多东西不再详述,如需深入研究请查阅相关资料(百度或谷歌一下一大堆)。开发环境:Fedora 9交叉编译工具链:arm-linux-gcc 4.3.2 with EABI嵌入式Linux内核版本:2.6.2原创 2012-06-01 20:34:59 · 1855 阅读 · 0 评论