下面是一条跳转指令,代码这里不贴,但是其中的代码很重要,在lowlevel.S中实现比如说点亮LED灯、关闭watchdog、关闭中断、串口初始化、系统时钟初始、nand flash初始化、内存控制器初始化。不过说实在的,去仔细分析这些初始化的过程,对于你对如何控制硬件有很大的帮
助, 对于这个函数,所要说的东西太多,会在后面的文章中单独分析它,现在先知道功能就好,没有它代码无法启动。
*/
--------------------
bllowlevel_init
--------------------
/* 跳转出来以后,继续执行下面的代码,下面的代码是判断程序是否已经在ram中了,在的话就不拷贝,直接跳转到stack_setup了,否则
继续执行copy_loop */
--------------------
#ifndefCONFIG_SKIP_RELOCATE_UBOOT
relocate: @relocate U-Boot to RAM
adr r0,_start @r0 <- current position of code
ldr r1,_TEXT_BASE @ test if we run from flash or RAM
cmp r0,r1 @ don't reloc during debug
beq stack_setup
..........................................
copy_loop: @copy 32 bytes at a time
ldmia r0!,{r3 - r10} @ copy from source address [r0]
stmia r1!,{r3 - r10} @ copy to targetaddress [r1]
cmp r0,r2 @ until source end addreee [r2]
ble copy_loop
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
--------------------
--------------------
/*
堆栈初始化代码
*/
--------------------
/* Set up the stack */
stack_setup:
ldr r0, _TEXT_BASE /* upper 128 KiB:relocated uboot */
sub r0, r0, #CFG_MALLOC_LEN /* mallocarea */
sub r0, r0, #CFG_GBL_DATA_SIZE /*bdinfo */
#ifdef CONFIG_USE_IRQ
sub r0, r0,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12 /* leave 3 words for abort-stack */
and sp, sp, #~7 @ 8 byte alinged for (ldr/str)d
#endif
--------------------
/* 清零BSS段内容为0 */
--------------------
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
clbss_l:
str r2, [r0] @ clear BSS location
cmp r0, r1 @are we at the end yet
add r0, r0, #4 @ increment clear index pointer
bne clbss_l @ keep clearing till at end
--------------------
/* 跳转到uboot代码的第二个阶段,第二阶段基本上都是用C实现的,幸好前面sp的值已经设置好了 */
--------------------
ldr pc, _start_armboot
_start_armboot:.word start_armboot
--------------------
Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。地址为http://code.google.com/p/tesseract-ocr/。
1.安装Tesseract
3. 打开命令行,定位到Tesseract-OCR目录,输入命令:
tesseract.exe number.jpg result -l eng
其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。
3. 打开Tesseract-OCR目录下的result.txt文件,看到识别的结果为7542315857,有3个字符识别错误,识别率还不是很高,那有没有什么方法来提供识别率呢?Tesseract提供了一套训练样本的方法,用以生成自己所需的识别语言库。下面介绍一下具体训练样本的方法。
1.下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,这个工具是用来训练样本用的,由于该工具是用JAVA开发的,需要安装JAVA虚拟机才能运行。
2. 获取样本图像。用画图工具绘制了5张0-9的文样本图像(当然样本越多越好),如下图所示:
tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
生成的BOX文件为num.font.exp0.box,BOX文件为Tessercat识别出的文字和其坐标。
注:Make Box File的命令格式为:
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。
5.文字校正。运行jTessBoxEditor工具,打开num.font.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。
font_properties不含有BOM头,文件内容格式如下:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。
这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:
font 0 0 0 0 0这里全取值为0,表示字体不是粗体、斜体等等。 7.生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容。
rem 执行改批处理前先要目录下创建font_properties文件 echo Run Tesseract for Training.. tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train echo Compute the Character Set.. unicharset_extractor.exe num.font.exp0.box mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr echo Clustering.. cntraining.exe num.font.exp0.tr echo Rename Files.. rename normproto num.normproto rename inttemp num.inttemp rename pffmtable num.pffmtable rename shapetable num.shapetable echo Create Tessdata.. combine_tessdata.exe num.
将批处理通过命令行执行。执行后的结果如下:
需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。
num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。
用训练后的语言库识别number.jpg文件, 打开命令行,定位到Tesseract-OCR目录,输入命令:
tesseract.exe number.jpg result -l eng
识别结果如如图所示,可以看到识别率提高了不少。通过自定义训练样本,可以进行图形验证码、车牌号码识别等。感兴趣的朋友可以研究研究。
1. 首先安装qtcreator(qt-creator-windows-opensource-2.6.0.exe),是Qt的集成开发环境,安装后并没有Qt Gui 应用程序的选项,必须安装Qt的library,提供对创建Qt应用程序的支持。(Qt开发环境不像vs那样安装开发环境的同时提供相应的Library的支持,因此必须手动安装并配置)
2. 安装minGW(MinGW-gcc440_1,直接解压)
[minGW的作用From Baiduzhidao:MinGW和VC一样,是一个开发环境。开发QT用MinGW是因为QT是Linux环境下的一个图形库,用来开发图形界面的应用程序,而Windows环境开发图形界面应用程序不需要QT,但是为了不大量修改源代码,就要把QT移植到Win下。(实事上,开发QT也可以用VC,不过需要用源代码重新编译QT库,开始的时候不那么方便。MinGW因为也是从Linux下移植过来了(当然在Linux下不叫MinGW),所以有相应的编译好了的QT库,直接用就可以了。]
3. 安装qt-win-opensource-4.8.4-mingw,提供对Qt 创建的支持。安装过程中提示minGW的安装路径,选择第2步的路径,安装后将出现qt design 的可视化界面开发工具。
配置Qt开发环境:
打开Qt Creator,(1). 工具->选项->构建和运行,“QT版本”中选择“手动设置”,然后添加第3步安装的d:\Qt\4.8.2\bin\qmake.exe;
(2). 切换到“工具链”,选择“手动设置”,然后添加第1步安装的d:\Qt\mingw\bin\mingw32-g++.exe;
好了,现在Qt 的开发环境已经搭建完成了,写一写Qt应用程序试试吧。