函数调用

linux UART串口驱动开发文档

*爱你&永不变心* 提交于 2020-02-29 09:39:11
内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 一. Linux的串口接口及层次 . 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理 . W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x20000000起1K空间. W83977: 0x30000000起1K空间.

xcode lldb gdb调试

拥有回忆 提交于 2020-02-29 08:12:50
应用调试: 1 xcode gdb/lldb调试命令 命令 解释 break NUM 在指定的行上设置断点。 bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。 clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。 continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。 display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。 file FILE 装载指定的可执行文件进行调试。 help NAME 显示指定命令的帮助信息。 info break 显示当前断点清单,包括到达断点处的次数等。 info files 显示被调试文件的详细信息。 info func 显示所有的函数名称。 info local 显示当函数中的局部变量信息。 info prog 显示被调试程序的执行状态。 info var 显示所有的全局和静态变量名称。 kill 终止正被调试的程序。 list 显示源代码段。 make 在不退出 gdb 的情况下运行 make 工具。 next 在不单步执行进入其他函数的情况下,向前执行一行源代码。 print EXPR 显示表达式 EXPR 的值。 print-object 打印一个对象 print (int) name 打印一个类型 print

如何在C/C++中调用Java

旧街凉风 提交于 2020-02-29 07:52:36
转的一篇文章,看的不懂,先坐下记录吧~~~ java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少。怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder、Eclipse都是使用纯Java开发的集成环境。这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(Java Native Interface)的技术。通过这种技术,开发人员不一定要用命令行来启动Java程序,可以通过编写一个本地GUI程序直接启动Java程序,这样就可避免另外打开一个命令窗口,让开发的Java程序更加专业。 JNI答应运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,答应将Java虚拟机直接嵌入到本地的应用程序中。图1是Sun站点上对JNI的基本结构的描述。 本文将介绍如何在C/C++中调用Java方法,并结合可能涉及到的问题介绍整个开发的步骤及可能碰到的难题和解决方法。本文所采用的工具是Sun公司创建的 Java Development Kit (JDK) 版本 1.3.1,以及微软公司的Visual C++ 6开发环境。

浅析VS2010反汇编

China☆狼群 提交于 2020-02-29 07:04:36
第一篇 1. 怎样进行反汇编 在调试的环境下,我们能够很方便地通过反汇编窗体查看程序生成的反汇编信息。 例如以下图所看到的。 记得中断程序的运行,不然看不到反汇编的指令 看一个简单的程序及其生成的汇编指令 #include<stdio.h> #include<windows.h> const long Lenth=5060000/5; int main(){ while(true){ for(long i=0;i<Lenth;i++){ ; } Sleep(10); } } 汇编窗体 2. 预备知识 : 函数调用大家都不陌生,调用者向被调用者传递一些參数,然后运行被调用者的代码,最后被调用者向调用者返回结果,还有大家比較熟悉的一句话。就是函数调用是在栈上发生的,那么在计算机内部究竟是怎样实现的呢? 对于程序,编译器会对其分配一段内存。在逻辑上能够分为代码段。数据段,堆,栈 代码段:保存程序文本。指令指针EIP就是指向代码段。可读可运行不可写 数据段:保存初始化的全局变量和静态变量,可读可写不可运行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存,向地址增大的方向增长。可读可写可运行 栈(Stack):存放局部变量。函数參数,当前状态。函数调用信息等, 向地址减小的方向增长 。很很重要,可读可写可运行 如图所看到的 寄存器 EAX :累加(Accumulator

测试 C# delegate 执行效率

元气小坏坏 提交于 2020-02-29 07:02:26
关于delegate的执行效率,我也是偶然间关注的一个问题。我对一个问题提出了自己的解决方案,只不过这个解决方案是使用代理的。同时其他人又提出了直接封装一个类,调用这个类中的封装的方法去解决这个问题。针对我们遇到的问题,我们都一致认为代理是解决我们问题比较合适的方式。但是,他们也提出代理的效率是非常低下的,如果我们使用代理,会影响我们系统的性能。于是我就想:代理的执行效率真的很低吗? 写个测试程序试试呗。 首先写一个简单的代理类,源码如下: 1 public class DelegateT 2 { 3 public delegate int del(int a); 4 private event del DelHandle; 5 public void Reg(del d) 6 { 7 DelHandle = d; 8 } 9 public void UnReg(del d) 10 { 11 DelHandle -= d; 12 } 13 14 public int DoSomething(int a) 15 { 16 //这里可以做一些事情。 17 18 if (DelHandle != null) 19 { 20 return DelHandle(a);//触发事件,调用注册的方法。 21 } 22 else 23 { 24 return 0; 25 } 26 } 27 }

c++回调lua函数,实现事件

爱⌒轻易说出口 提交于 2020-02-29 06:00:34
基于上一篇文章 cocos2dx 导出c++类供lua使用 上一篇主要是因为不能调用lua函数 才那样解决,但是本篇能调用lua函数,那么目的实现也就简单多了 归其原因还是tolua 工具生成的hpp cpp文件的函数不对 虽然在c++中函数参数声明为LUA_FUNCTION 但是还是被当做了int处理 所以我们要手动处理函数的调用 也就是修改生成的 函数 ... 生成的对应 代码 改为以下 if (NULL == tolua_S) return 0; int argc = 0; NetMgr* self = nullptr; #if COCOS2D_DEBUG >= 1 tolua_Error tolua_err; if (!tolua_isusertype(tolua_S, 1, "cc.Http", 0, &tolua_err)) goto tolua_lerror; #endif self = static_cast<NetMgr*>(tolua_tousertype(tolua_S, 1, 0)); #if COCOS2D_DEBUG >= 1 if (nullptr == self) { tolua_error(tolua_S, "invalid 'self' in function 'tolua_cocos2d_Node_registerScriptHandler'

Delphi中调用API函数经验点滴

怎甘沉沦 提交于 2020-02-29 05:54:48
在Delphi中调用Windows API 函数十分方便,只需在单元的uses段加入Windows 单元名即可(对于由Delphi自动创建的单元,该项工作已经完成)。单元Windows.pas 已经由Delphi编写并直接提供开发者引用。笔者在开发Windows 应用时对于几个特别的API函数总结了一些经验供大家参考。以下开发经验均在Windows 9x中适用。 一、关闭系统   对于某些特殊的应用程序,可能需要进行关闭系统的操作,可以调用函数ExitWindows 或者ExitWindowsEx 来实现。   在Delphi中函数ExitWindows 的语法如下:   function ExitWindows(dwReserved: Cardinal; Code: Word): LongBool;   如果调用该函数成功,则返回True,否则返回False ;成功调用该函数将执行“关闭所有程序并以其他身份登录(Windows 95)”或“注销(Windows 98)”操作。其中的参数dwReserved和参数Code都必须是0 。   例如,要实现注销操作,只需要在适当的位置写入如下语句:   ExitWindows(0, 0);   执行关闭计算机或重新启动计算机的操作,可以通过调用函数ExitWindowsEx 来实现。   在Delphi中函数ExitWindowsEx

Delphi中调用API函数经验点滴(二)

给你一囗甜甜゛ 提交于 2020-02-29 05:54:39
二、弹出模式化对话框   在Delphi中,提供模式化对话框的方法很多,现对几种比较常用的方法做如下比较:   1) 直接调用Windows API 函数MessageBox   该方法一般情况下使用正常,而且根据不同的操作系统将显示相应的中文或英文按钮标题。而在笔者曾经开发的系统中,偶尔会出现该函数没有锁定 Handle所指的窗口的情况。通过观察发现,当入口参数的窗口句柄是Application.MainForm的窗口句柄时,没有出现类似情况。因此, 建议大家甚用。   2) 调用Delphi提供的函数MessageDlg   该方法的不足之处是,对话框的按钮标题是英文。   3) 调用Delphi提供的过程ShowMessage   该方法默认将应用程序的标题作为对话框的标题,并且仅仅是信息提示框,不太灵活。   4) 调用函数Application.MessageBox   该方法是笔者强力推荐使用的方法。该方法的使用效果与Windows API 函数MessageBox完全相同,并且不会出现有时没有锁定当前活动窗口的情况。   例如:   Aplication.MessageBox(Handle, '这是一条警告信息。', '警告', MB_OK + MB_ICONEXCLAMATION); 转自bbs.sendsms.cn 来源: oschina 链接: https:/

《Effectirve C++》笔记(条款1~10)

╄→гoц情女王★ 提交于 2020-02-29 03:54:21
条款1:视C++为一个语言联邦 C是多种范式汇集的语言,包括C的过程、C面向对象、Template泛型(STL模板库)、模板元编程、lambda。(后面自己补充可能由曲解原文意思) 条款2:尽量以const、enum、inline替换#define 单纯变量用const或enum替换define,形势函数的宏用inline函数替换。 class ttt{ enum{NumTurns=5}; int scores[NumTurns]; } 用枚举替换更像define,因为枚举和define均不可取地址,而const的变量可以被取地址。 条款3:尽可能使用const const char *p; 指针非常量,数值为常量--我还是喜欢声明时把*和变量放一起,构成一个整体,这样也容易理解,const就是对这个整体修饰的这个整体不可变也就是*p也就是值不可变。char * const p;指针常量,值非常量 对函数指定const:void a() const;此时函数不可调用非const成员(可以读非const数据成员),如某个数据成员需要被const方法操作,可以用mutable修饰:mutable boos bbb; const char& operator[](std::size_t position)const { XXXXX return pText[position]; }

Javascript中递归的调用

青春壹個敷衍的年華 提交于 2020-02-29 03:32:20
  递归函数就是调用自身,如下所示: 1 function factorial(num){ 2 if(num<=1){ 3 return 1; 4 }else{ 5 return num*factorial(num-1); 6 } 7 }   这是经典的递归调用,但是执行如下代码时会导致出错。 1 var anotherFactorial=factorial; 2 factorial=null; 3 alert(anotherFactorial(3)); //Uncaught TypeError: factorial is not a function   上面的代码先把factorial()函数保存在anotherFactorial中,然后将factorial设置为null。结果指向原始函数的指针只剩下一个,在接下来的调用就会出现错误(factorial已经不是函数),此时使用 arguments.callee (即指向正在执行函数的指针)可以解决这个问题,即: 1 function factorial(num){ 2 if(num<=1){ 3 return 1; 4 }else{ 5 return num*aguments.callee(num-1); 6 } 7 }   但是在严格模式下,不能通过脚本访问aguments.callee。最好的解决方法是使用 命名函数表达式