- 博客(39)
- 资源 (8)
- 收藏
- 关注
原创 arm体系结构学习笔记 part4 -- 异常处理的返回
先来说说arm指令的处理过程:pc寄存器保存的总是当前正在取指的指令的地址。如果有如下指令序列S1,S2,S3,S4,S5这五条指令在内存中分布为:PC寄存器保存的总是当前正在取址的指令的地址,arm态下指令长度为4个字节,如图所示当前正在执行的指令为pc-8即pc的值为当前正在执行的指令加8同理在arm9五级流水的情况下:
2010-12-08 22:31:00
4346
原创 arm体系结构学习笔记 part3 -- 异常处理机制
先来看看异常向量表: 这个表格给出了当异常发生时候的程序将跳转到的地址 以及跳转到该地址的同时arm核所处的异常模式以未定义异常为例当arm核执行时遇到未定义的指令时 程序将自动跳转到异常向量表中的0x00000004地址处执行 并将处理器切换为未定义模式 与此同时其实arm核还完成了cpsr到spsr_und的备份以及设置异常处理完毕的返回地址保存到lr_und而复位异常的跳转地址为0x0 这是每次系统重新加电的时候arm核总是从0x0地址开始取指令指令 而系统上电时系统所处的模式总是svc
2010-12-07 22:15:00
2606
原创 arm体系结构学习笔记 part2 -- 中断相关
中断分类:1.由软件中断指令SWI引起的软件中断。SWI中断可以实现从用户模式到特权模式的切换。一般用于特权操作的系统程序。2.由外设引起的硬件中断。arm有两个中断控制信号 一个是fiq一个是irq 。中断控制器是这两个中断和多个外部中断之间的桥梁。通过设置cpsr的6 7位可以使能或者禁止这两类中断。中断响应时间:外部中断信号发出到取出中断服务程序的第一条指令经历的时间。FIQ模式下备份寄存器最多,保证了FIQ不需要花更多的时间去备份寄存器数据,而ldm和stm的执
2010-12-05 19:21:00
1334
原创 arm体系结构学习笔记 part1--处理器模式与寄存器
ARM920T supports seven modes of operation:· User (usr): The normal ARM program execution state· FIQ (fiq): Designed to support a data transfer or channel process· IRQ (irq): Used for general-purpose interrupt handling· Supervisor (svc): Protected m
2010-12-04 22:25:00
2269
原创 arm蛋疼汇编part 10--与位置有关代码 与位置无关代码
代码一:makefile:test.bin: test arm-2440-linux-gnueabi-objcopy -I elf32-littlearm test -O binary test.bin cp test.bin ../../test : test.o arm-2440-linux-gnueabi-ld -Ttext=0x30000000 test.o -o testtest.o : test.S arm-2440-linux-gnueabi-as test.S
2010-12-03 22:31:00
2512
原创 arm蛋疼汇编 part9 -- elf文件瞎扯
[leftover-crazy@leftover-crazy 6nd]$ arm-2440-linux-gnueabi-objdump -h test.o test2.o testtest.o: file format elf32-littlearmSections:Idx Name Size VMA LMA File off Algn 0 .text 0000007c 00000000 00000000
2010-12-01 23:12:00
1341
原创 arm蛋疼汇编 part8 -- 汇编 c 谁调用谁?
今晚学校网络真无法忍受了 哎~只能直接上代码了:makefile:test.bin: test arm-2440-linux-gnueabi-objcopy -I elf32-littlearm test -O binary test.bin cp test.bin ../../test: test.o test2.o arm-2440-linux-gnueabi-ld -Ttext=0x30000000 test.o test2.o -o testtest2.o: test2.c
2010-11-30 23:21:00
2605
原创 arm蛋疼汇编 part7--ATPCS 被调函数的标准“框架” 非山寨版本
test.S代码:@保护现场寄存器压栈 mov ip,sp @使用ip寄存器备份sp 此时sp指向函数调用前的数据栈中的最后一个数据 @即下一个存放用于本被调函数的数据栈顶地址为sp-4 stmfd sp!, {fp, ip, lr, pc} @满减栈 @ pc,lr ,ip ,fp 依次入栈 @栈中从高地址到低地址分别对应高编号入栈的寄存器到低编号的入栈寄存器
2010-11-29 21:17:00
2339
原创 arm蛋疼汇编 part6--写程序怎能不调试 eclipse cdt zylincdt openocd gdb 调试
step1:安装eclipse cdt 这个google search 一大堆 archlinux 下 yaourt 直接 搞定step2:在线安装安装eclipse zylincdt插件 eclipse下 Help==>install new software==>work with: zylincdt - http://www.zylin.com/zylincdt 剩下的google search一堆setp3:安装openocd yaourt搞定最新版 配置文件如下:
2010-11-27 23:52:00
2013
1
原创 arm蛋疼汇编 part5--接着hello uboot part3! ATPCS
先上代码:test.S如下 Makefile如下 test.S代码分析如下: 压栈后栈内数据分布由上而下(从高地址到低地址)分别存放 fp ip lr此时fp存放的是栈内第一个数据的地址 即fp的地址如此压栈倒腾后sp寄存器便可在我们写的被调程序中随意操作 即可以使用该栈 并且容易根据fp寄存器弹栈 只要在程序结束前恢复fp ip lr 即符合ATPCS规范 ARM-thumb 过程调用标准”:1, r0-r3 用
2010-11-26 19:58:00
1219
原创 arm蛋疼汇编 part4--接着hello uboot part2!
[leftover-crazy@leftover-crazy 3nd]$ vi test.S 代码如下:@压栈操作 str lr, [sp, #-4]!@函数调用 ldr r0, =hello @取hello标签地址给R0 既参数一的地址 @arm汇编参数传递通过 @R0传递第一个参数 @R1传递第二个参数
2010-11-25 21:10:00
1153
转载 arm蛋疼汇编 part3-- 转载 ARM微处理器的指令系统
跳转指令:arm程序跳转的两种方法: 1.直接修改pc寄存器的值 可以实现4GB空间的跳转 2.使用跳转指令 只能实现前后32M空间的跳转B: 相对来说有去无回的跳转 格式: B{条件} 目标地址 eg:B Lable@@@@@@@@@@@@@@@@@@@@@@@CMP R0,#0BEQ Lable @相等则跳转 BL: 带返回的跳转 跳转前将PC寄存器的值写入LR寄存器(R14) 格式: BL{
2010-11-24 19:51:00
945
原创 arm蛋疼汇编part 2 -- arm寻址方式
寻址方式:处理器根据指令给出的地址信息寻找物理地址的方式。立即数寻址:地址信息包含在指令中eg:add r0,r0,#2 @十进制 2为立即数 r0寄存器寻址:地址信息存放于寄存器中eg:add r0,r1,r2 @ r0
2010-11-23 21:50:00
738
原创 arm蛋疼汇编part 1
mov r0,r1 mov r0,#133 ldr r0,=1234567890 add r0,r1,r0 sub r0,r1,r0lable1:@以下两条指令将r1存储的内存地址为12345内的数据读取到r0中 ldr r1,=12345 ldr r0,[r1] label2: @以下两条指令将r0中的数据存储到r1保存地址为123456的内存中 ldr r1,=123456 str r
2010-11-18 22:46:00
993
原创 简单uboot下可执行程序编写笔记
[leftover-crazy@leftover-crazy bootloaderprj]$ vi hellobootloader1.c 代码如下void (*show)(char *, ...);int main(int argc, char *argv[]){ show = 0x33f9303c; show("Hello u-boot!/n"); return 0;} 编译:[leftover-crazy@leftover-crazy bootloaderp
2010-11-16 23:01:00
3733
1
转载 程序员的十个层次
<br /><br />自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已。<br />那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知
2010-11-13 00:11:00
1023
原创 archlinux平台下 tftp-hpa 的安装配置笔记
[leftover-crazy@leftover-crazy ~]$ yaourt tftp1 extra/tftp-hpa 5.0-3 Official tftp server 选1安装rftp server修改/etc/hosts.allowsudo vim /etc/hosts.allow 内容修改如下## /etc/hosts.allow#tftpd: ALL //增加in.tftpd: ALL //增加nfsd: ALLrpcbind: ALLmou
2010-10-30 16:35:00
2989
原创 archlinux平台下 fl2440 主机nfs服务器搭建
参考archlinux wikihttps://wiki.archlinux.org/index.php/NFS_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 服务器端和客户端所需要的软件包都是很少的。你只需要安装:core/portmapcore/nfs-utils
2010-10-28 21:40:00
2865
原创 备份
[INFO ] Performing some trivial sanity checks[INFO ] Build started 20100922.000656[INFO ] Building environment variables[WARN ] Directory '/home/leftover-crazy/src3' does not exist.[WARN ] Will not save downloaded tarballs to local storage.[
2010-09-22 00:28:00
776
原创 archlinux平台下 fl2440 使用minicom加dnw2烧写flash
minicom使用和安装已经在上一篇中做了简要说明之后是dnw2的安装以及使用首先应该安装usb的驱动对应二进制包为libusbsudo apt-get install libusb-dev //ubuntu环境sudo pacman -S libusbsudo pacman -S libusb1 //archlinux环境安装完usb驱动后安装dnw2 网上很多文章说的都是自己用dnw2编译安装其实archlinbux下很方便的可以使用yaourt dnw2关于yaourt的使用就不
2010-09-19 22:34:00
2741
1
原创 FL2440在linux平台下minicom的使用 串口收发文件
开发平台:archlinuxminicom安装sudo pacman -S minicom lrzsz协议安装 包括了x/y/zmodem协议,安装完成后可以直接通过串口线进行pc与开发板直接的文件双向传送sudo pacman -S lrzsz
2010-09-18 02:31:00
2926
原创 一个土鳖的时间范围查询条件写法 基于QDateEdit和sqlite的smalldatetime
<br />if(ui->dateEdit->date()>ui->dateEdit_2->date()) { QMessageBox::about(this,tr("日期范围错误"),tr("开单的起始时间不能大于开单的截止时间,请点击'确定'返回重新设置日期间隔!")); return; } QString datetime1,datetime2; datetime1=QString::number(ui->dateEdit->
2010-08-05 04:38:00
2860
原创 QSqlDatabase 使用小结,解决部分数据库操作导致程序崩溃的办法
这两天都在为 QSqlDatabase 类头疼 因为涉及多个连接 连接到同一个数据库 而又没有对各个连接设置名称 网上大部分简易教程都是采用默认数据库连接名称 这样就会导致在对其中一个数据库连接进行操作时 影响到其它数据连接的操作(其实本质上他们是同一个连接) 因为我采用多文档窗体在各个窗体处理不同的数据连接 所以移除或者改变一个连接 也会导致其它连接跟着受到影响 直接导致了程序假死崩溃 本来毫无头绪 不知道个所以然 参照前辈的文章来写程序 也
2010-08-04 16:18:00
9815
1
原创 QSqlDatabase 与多文档窗口注意事项(此文有部分错误 仅作留档 请参见下一篇解释)
当多文档窗口中有多个子窗口同时显示,而这几个子窗口又同时连接同一个数据库时,如果在子窗口的析构函数中使用void QSqlDatabase::close ()或者void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]此时会发现当关闭其中一个子窗口时正常 当关闭第二个子窗口时程序将崩溃原因是第一个窗口关闭了数据库连接,或者移除了数据库,而第二个窗口关闭时又要关闭此连接,或者移除此数据库,而此时此链接或者
2010-08-04 04:09:00
1096
原创 QSqlDatabase 数据库操作没有removeDatabase 导致程序崩溃(此文极有可能是错误的,仅作个人留档参考)
void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]Removes the database connection connectionName from the list of database connections.Warning: There should be no open queries on the database connection when this function
2010-08-02 22:54:00
4653
原创 QSqlQuery插入数据操作实例,包含批处理代码
<br />void KaiDanWnd::on_action_4_triggered(){ if(ui->lineEdit->text()==tr("")) { QMessageBox::about(this,tr("数据填写不完整"),tr("客户姓名未填写")); return; } if(ui->lineEdit_3->text()==tr("")) { QMessageBox::about(
2010-08-02 02:39:00
6825
1
原创 QTabWidget bug导致程序崩溃
<br />QTabWidget 使用的时候如果读取的数据不存在 或者读取的数据项在setitem的时候没有写入数据,则程序会崩溃<br />比如:<br />//ui->tableWidget->setItem(row,0,new QTableWidgetItem(tr("***")+ui->comboBox_6->currentText().trimmed()+tr("***")+ui->tableWidget->item(currentrow,0)->text())); ui
2010-07-31 02:58:00
3492
原创 QTabWidget 的使用小记
实例化QTabWidget 后需要做如下设置 QStringList headers;//存放列标题QSting组 headerstableWidget->setColumnCount(8);//设置列数 ui->tableWidget->setRowCount(0);//设置行数 ui->tableWidget->setHorizontalHeaderLabels(headers);//设置列标题 ui->tableWidget->resizeColumnsT
2010-07-30 00:28:00
6417
原创 qt 程序发布以及中文翻译的方法
<br />程序发布的话非静态编译 必须带上所有的dll动态连接库<br />没有带上动态链接库的话 程序运行时会提示缺少XXX.dll<br />只要在qt安装目录内找到相应的dll复制到exe程序所在目录内就可以了<br />譬如我现在windows下的qt安装在C:/Qt/2010.04 提示缺少QtCore4.dll QtGui4.dll QtSql4.dll libgcc_s_dw2-1.dll 这四个连接库 <br />则只需要将C:/Qt/2010.04/qt/b
2010-07-28 23:52:00
1596
原创 qt model和view的table 小记
QT中的model和view都是采用index索引 index含有两个成员变量一个是row 一个是column 对应该索引的行号列号model提供数据 view提供视图 view用来显示model的数据 必须将model绑定到某个view中才能显示 ui->tableView->setModel(model);ui->tableView->currentIndex();//获取选中单元格的indexui->tableView->currentIndex().column();//
2010-07-28 02:01:00
4759
原创 qt右键菜单的简单实例 ContextMenu
enum ContextMenuPolicy { NoContextMenu, DefaultContextMenu, ActionsContextMenu, CustomContextMenu, PreventContextMenu };void TextWnd::on_tableView_customContextMenuRequested(QPoint pos){ Q
2010-07-27 21:34:00
4625
原创 一个夭折 脱裤子放屁的QSql Sqlite操作类
<br />本来想自己封装一下Sqlite操作类 写到一半才发现是脱裤子放屁 多此一举了 <br />自己写的东西还没有Qt用起来简洁 唯一的好处估计就是能在整个工程里对同一个数据库进行操作 能通过QDir查找指定目录下的数据库文件 绑定到combobox让用户手动选择操作的数据库 有空再添加以下数据库的备份函数 其实思路也就是文件另存为 <br />一下代码贴出来自嘲一下 唉 <br />.h文件<br />#ifndef SQLITEDB_
2010-07-27 00:40:00
1292
原创 QDir对某个目录内文件名进行模糊搜索
QStringList SqliteDB::findDbfiles(){ QDir dir; dir.setPath("./DbfInUse"); dir.setFilter(QDir::Files | QDir::Hidden); dir.setSorting(QDir::Name); QStringList names = dir.entryList(); QStringList newnames; newnames=names.
2010-07-27 00:31:00
6413
原创 qt中获取当前登录的用户信息类的简单实现
.h文件代码如下#ifndef CSF_H#define CSF_H#include #include class csf{public: csf(); static void setUserName(QString name);//填入用户姓名 static void setlogintime(QDateTime time);//填入用户登录时间 static void setissuperuser(int i);//填入管理员权限级别
2010-07-25 00:31:00
6541
原创 利用QCryptographicHash 加密QString
直接上代码了 废话不多说了 这是MD4加密 可以自己更改成QCryptographicHash::Md5 或者QCryptographicHash::Sha1QString Encrypt(QString s){ QByteArray string=s.toAscii(); QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Md4); hash->addData(string
2010-07-25 00:15:00
5868
2
原创 QMdiArea相关
<br />Qt全屏显示函数 window.showFullScreen()<br />Qt最大化显示函数 window.showMaximized()<br />Qt最小化显示函数 window.showMinimized()<br />Qt固定尺寸显示函数 window.resize(x,y)<br />void MainWindow::on_action_21_triggered(){ HelpWnd *hw=new Hel
2010-07-22 23:25:00
9124
1
原创 简单的QMessageBox显示版权信息
先说说QMessageBox::about吧void MainWindow::on_action_22_triggered(){ QMessageBox::about(this,tr("作者信息以及版权声明"),tr("晖源建材行财务管理系统 2.0""Copyright © 2010 蔡圣缝. All rights reserved.""晖源建材行财务管理系统由蔡圣锋基于QT 4.7.0独立开发完成,完全遵循LGPL协议。本软件仅允许晖源建材行免费作为商业应用,对于其它用户在未经作者允许的情
2010-07-21 02:00:00
2410
2
原创 qt中解决不同平台间编码问题以及登录窗口写法
#include #include "logindialog.h"#include "mainwindow.h"#include int main(int argc, char *argv[]){ QTextCodec *codec = QTextCodec::codecForName("utf8"); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec);
2010-07-18 23:59:00
872
原创 QT中窗口如何隐藏最大话按钮 和设置背景图片
LoginDialog w; w.setWindowFlags((Qt::WindowCloseButtonHint)&(Qt::WindowMinimizeButtonHint)); w.setMinimumSize(500,300); w.setMaximumSize(500,300); w.show();
2010-07-17 21:27:00
2795
第7章 界面编程5-鼠标、键盘与光标
2010-07-15
第6章 界面编程4-控件
2010-07-15
第2章 MFC基础 本章先介绍Visual C++和MFC的基本情况,然后讨论Windows API和MFC编程的基本方法。
2010-07-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人