设计sql 修改视图字段类型”窗口,什么不是字段列表框中

您的位置: >
+ (0) + (0)
STC单片机Keil中C语言函数定位的方法:STC单片机Keil中C语言函数定位的方法
下面以演示程序进行说明
演示程序中有ReadIAP、ProgramIAP和EraseIAP三个函数
最终目的是将这三个函数都定位到0x8000之后
第一步:新建一个项目&Demo&,并将源文件&Demo.C&添加到项目中
第二步:直接编译,并打开编译后生成的&Demo.M51&文件
从M51文件的&CODE MEMORY&信息中,可以看到3个函数的链接名称、链接地址和函数长度
ReadIAP的链接名称为&?PR?_READIAP?DEMO&,链接地址为&0003H&,长度为16H字节
ProgramIAP的链接名称为&?PR?_PROGRAMIAP?DEMO&,链接地址为&0019H&,长度为16H字节
EraseIAP的链接名称为&?PR?_ERASEIAP?DEMO&,链接地址为&0044H&,长度为14H字节
第三步:根据M51中函数的长度信息计算出各个函数重定位的地址,
ReadIAP的重定位的地址为0x8000
ProgramIAP的重定位的地址为0x8016
EraseIAP的重定位的地址为0x802C
第四步:打开项目选项中的&BL51 Locate&属性页
在上图的&Code&域中输入下列语句&?PR?_READIAP?DEMO(0x8000), ?PR?_PROGRAMIAP?DEMO(0x8016), ?PR?_ERASEIAP?DEMO(0x802C)&
第五步:点击确定按钮,并重新编译即可,此时可以重新打开&Demo.M51&文件,便可发现3个函数已被重定位到我们所指定的地址了。
不好我反对
STC单片机Keil中C语言函数定位的方法下载
相关电子资料下载
评价:好评中评差评
技术交流、我要发言
发表评论,获取积分! 请遵守相关规定!提 交
Powered by: 电子发烧友 (
. .All Rights Reserved 粤ICP备号keil c中没有使用到的函数会编译时候会有警告 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
keil c中没有使用到的函数会编译时候会有警告
13:33:01  
想写一个模块,模块里面有我常用的一些功能函数,比如:
a.h文件#ifndef _a_h_
#define _a_h_
extern void one(void);
extern void two(void);
#include &a.h&
extern void one()
& &........
extern void two()
& &.........
#include &reg52.h&
#include &a.h&
void main()
& &while(1)
& &&&one();
} 复制代码我只使用了a.h文件中定义的一个函数one,two没有用到
keil 编译的时候给出警告
有什么方法能让没有使用过的函数,不进行连接编译?
那keil c的库又是怎么样弄的?
13:33:35  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
把函数做成宏定义如何&&
#define one()&&do{...}while(0);
13:34:06  
每个.C文件中只写一个函数
13:34:41  
设置屏蔽等级,忘了是6,13,还是16,试试就知道了,条件编译也行
13:35:44  
人家怎么知道你没有调用呢?调用不一定是显式的,也许是修改堆栈,也许是用函数指针,方法多得很,编译器无法知道你是否会调用到该函数,在它的&眼&里,存在即为合理.
所以,没有用到的函数你可以用#if #endif封闭起来
助理工程师
13:36:50  
这个问题还是没有解决,有谁知道吗?
我再增加一些问题,网上找了半天没有解决
1.&&编译器没有被调用才出现警告,编译器肯定知道这个函数没有被调用.
2.&&#if #endif怎么用,难道我需要调用这个函数,另外还需要define一个表示我调用了?这也太麻烦了,
& &keil中调用库函数是怎么实现,没见到要怎么作啊
3.&&库函数编译的存储方式如果与主程序不同也警告,同样keil本机库函数调用也没有这个警告,不知道如何消除
4.&&屏蔽等级如何设置,好像只是设置优化等级的
5.&&#pragma WARNINGLEVE(0) 指令怎么不能用,警告&此行被忽略&,并且取消报警也不是我目的,我发现删除这个函
& & 数和没有删除目标代码大小是不一样的
6.&&#pragma rom(small)也不能用 &XXXX.C(129): error C252: misplaced primary control, line ignored&
13:37:58  
在keil4中,用LX51代替BL51连接器,然后再Misc control里添加REMOVEUNUSED这条指令,据说可以,不过我也没验证过.
助理工程师
13:38:45  
这是不可能消除的.
程序无法知道你不会调用它,因为你有可能使用非直接调用的指令,而是用散列指针之类的方法,程序是预测不到的,所以它不会给你做优化.
如果你真想消除警告,就用#if #endif把它&软删除&掉.
13:39:57  
本帖最后由 心如明镜 于
13:40 编辑
我用7楼的方法是可以去除不用的代码。但是今天遇到了问题,函数指针指向的函数不存在了。这就是间接引用的问题吧。
有没有什么 #pragma 可以告诉链接器不要把指定的函数去掉呢?我现在去掉了 REMOVEUNUSED ,但是编译后说DATA区溢出了。
08:20:05  
我也用7楼的方法 可以 而且我从来不用指针 嘿嘿
16:19:14  
7楼说的方法只能消除警告,但是没使用的函数还是生成代码了
17个问题&&&&&&&&9915个浏览
22个问题&&&&&&&&5934个浏览
CellWise周军
21个问题&&&&&&&&6987个浏览
1、现有智能家居及楼宇自动化的主流协议大PK及发展趋势
2、来自德国的独特技术—无需供电的物联网技术
3、将能量采集技术运用到智能控制的秘密
4、EnOcean技术在智能控制中实战项目
Powered by【连载8】Keil μVision5的工程建立过程 | 学单片机做四轴飞行器项目故事
《 STC15 单片机实战指南( C 语言版)》 一书以一坚科技研发的飞天三号( FSST15-V1.0)实验板为硬件平台, 以《 深入浅出玩转 STC15 单片机》为配套视频, 由清华大学出版社权威出版, 并且分别是 STC 官方大学计划和高校高性能联合实验室推荐教程和视频, 版权归作者和清华大学出版社所有。
本资料以个人学习、 工作经验以及宏晶科技单片机技术为素材, 以单片机初学者、单片机项目开发者为对象, 教大家如何走进单片机,继而达到开发工程项目(如:四轴飞行器设计,多功能收音机等)为目的。 限于时间和水平关系,资料中难免有过失之处,望各位高手批评指教,多多拍砖,拍累了,你们休息,我继续上路。
现已连载的方式免费共享于电子发烧友网,供单片机新手们参考学习,可以自由下载传阅 ,但未经作者许可,不得用于任何商业目的, 转载请注明出处。
作者 | 残弈悟恩
编辑 | Garen
说明一点,讲述 Keil5的建立过程之前,先在 E盘(路径当然可以随便,根据个人习惯吧)下新建一个文件夹,以便存放工程,文件命名为:我的第一个工程。特别提醒,这么取名是便于新手们理解,但笔者强烈建议以后不要用中文来命名,因为一些软件是不支持中文的,例如开发 FPGA的 QuartusII等。所以从开始就应养成良好的习惯,避免以后开发中遇到这样、那样的问题。对于单片机来说,无论程序的大小,都需要一个完整的工程来支持,即使点亮一个小小的LED也是需要建立一个完整的工程。接下来讲解Keil5的工程建立过程,建立过程大致分为下面几个步骤。
(1)双击桌面,打开 Keil5软件,等 Keil5软件完全启动后,选择 Project→NewuVision Project菜单项,操作界面如图 2-5所示。
图 2-5 新建工程
(2)选择工程的保存路径,笔者就选择 E 盘下的:我的第一个工程文件夹,这样便于以后工程的管理,接着在文件名(实质就是工程的名字)处输入文件名:我的第一个工程,如图 2-6 所示,软件会默认为.uvproj 的扩展名,然后单击“保存”按钮。
图 2-6保存工程
(3)此时弹出如图 2-4 所示的对话框,要求用户选择单片机型号。FSST15 开发板搭载的是 IAP15W4K58S4,由于前面我们已经添加了 STC MCU 的库,因此这里先如图 2-7 小“1”选择“STC MCU Database”,之后选择如图 2-7 小“2”所示,选择“STC15W4K32S4”,这里读者需要注意的, IAP15W4K58S4 隶属于 STC15W4K32S4 系列,因此直接选择STC15W4K32S4 即可,之后单击“OK”按钮。
图 2-7 选择 STC15W4K32S4
(4)接着弹出如图 2-8 所示的启动代码选择对话框,这里选择“否”(也可以选择“是”),所谓启动代码就是处理器最先运行的一段代码,主要任务是初始化处理器模式、设置堆栈、初始化寄存器等,由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写。对于单片机开发来说是否添加都一样,若读者对启动代码感兴趣,自行查阅相关资料,这里就不做过多说明。
图 2-8启动代码选择选框
此时 Keil5 中只是一个半成品的工程,为何这么说,因为只有虚荣的框架,没有完美的内涵。接下来开始新建文件,并将文件添加到工程中,为其增砖添瓦吧。
(5)选择 File→New 菜单项(或者直接 CTRL+N),如图 2-9 所示。
图 2-9新建文件
(6)此时 Keil5 的编辑界面处会有一个“text1”的文本文件,但与刚建立的工程还是没有一点点关系,接着选择 File→Save 菜单项(或 CTRL+S)保存文件,此时弹出如图 2-10所示的文件保存对话框,Keil5 已经默认选择了工程所在的文件夹路径,所以只需输入正确(一定要正确)文件名,文件名字随便,最好是英文的,之后是扩展名“.c”(一定是英文状态下的.c)。
注意: 如果是用 C 语言编写程序,则扩展名必须是.c;汇编编写程序,扩展名必须是.asm;头文件则为.h。这里文件名可以与工程名相同,也可以不同,然后单击“保存”按钮。
图 2-10文件保存对话框
(7)回到编辑界面,单击“Project”窗口处“Target1”前的“+”号,选中“Source Group1”并右键单击,弹出如图 2-11 所示下拉菜单,然后选中“Add Files to Group ‘Source Group1”菜单项,接着弹出一个对话框,选中上面所保存的文件(也即“我的第一个工程.c”),
如图 2-12 所示,之后单击“Add”按钮添加文件,最后单击“Close”按钮关闭此对话框。
图 2-11 添加现有的文件到“Source Group 1”
图 2-12 选择“我的第一个工程.c”文件
加入文件之后的工程编辑界面如图 2-13所示,不知读者注意到了没,这时在“SourceGroup 1”文件夹下多了一个“我的第一个工程.c”的文件(这个就是前面所保存、添加的c文件),这时源文件与工程就关联起来了,也即工程建立完毕了。
图 2-13文件加入工程之后的编辑界面
(8)编写代码,读者这里只需 CTRL+C、CTRL+V 实例 1 的源代码,暂时不需理会代码的具体含义,输入代码之后的软件编辑界面如图 2-14 所示。
图 2-14输入程序之后的界面
相信通过以上 8 个步骤,读者对 Keil5 的工程建立应该不陌生了吧。接着再介绍几个Keil5的常用按钮和一些选项的设置。Keil5软件的高级应用,请看第四章的模块化编程章节,哪里有更详细、更全面的应用讲解。可能对于新手们或者英语不好的读者来说,一看到软件有这么多按钮,并且都是英文的,感觉无从下手。残弈悟恩告诉大家,一定不要怕,这些都是纸老虎。再者,笔者也说过,对于软件,20%的功能按钮就可以实现 80%的功能操作。接下来介绍几个常用按钮,常用按钮如图 2-15所示,其中 9、10、11并不是按钮,只是便于讲解,才这样图示。
图 2-15“按钮”介绍图
(1)编译当前操作的文件。
(2)只编译修改过的文件,并生成用于下载到单片机中的 hex文件。
(3)编译工程中所有的文件,并生成用于下载到单片机中的 hex文件。2、3这两个按钮现阶段没什么区别,等到以后编写大型代码时,才能体会到两者的不同。
(4)用于打开“TargetOptions”对话框,打开的对话框如图 2-16所示,并在晶振选项框中填 11.0592,这里为何选择“11.0592”,具体由我们下载程序时 STC-ISP软件的设定决定。接着选择“Output”选项卡,并在“Create HEX File”前复选框中打勾,如图 2-18所示,别的先统统不予理睬。
注意:图 2-17 所示的“选择使用内部 IRC 时钟”前的对勾必须勾选,因为 FSST15 开发板上未搭载外部晶振。
图 2-16 晶振设置对话框
图 2-17 设置 STC-ISP 晶振选择对话框
图 2-18设置 Options for Targer对话框
(5)注释选中行。先选中要注释的代码,之后单击此按钮,就可以加入注释了。
(6)删除选中行的注释。
(7)软件进入仿真,具体操作后面章节有详细介绍。
(8)进入“Configuration”对话框,该对话框主要用来设置字体的大小、颜色,TAB键的缩进等,具体读者可以自己摸索、研究。
(9)表示已经生成了可以下载到单片机中运行的 HEX文件了。
(10)表示所编写的程序是“0 Error”(真棒,没有错误)。
(11)编写的代码为“0 Warning”(连警告都没有,你太棒了),编译程序时,警告是可以有的,但一定要做到胸有成竹,看该警告是否可以忽略。OK,若掌握了这 8 大步骤、11 小步骤,那 Keil5 软件可以说已经被读者所掌握,接下来就是万事俱备,只欠“编程”了。对于 Keil5软件,笔者先介绍这么多,到后面学习模块化编程时,笔者还要详细、深入地讲解踏,那时就可领略 Keil5的强大了。
上期回顾:【连载7】Keil μVision5的安装 | 学单片机做四轴飞行器项目故事
下期预告:【连载9】我的第一个程序—点亮 LED小灯 | 学单片机做四轴飞行器项目故事
华强聚丰拥有电子发烧友(百万电子工程师社区平台:)、华强PCB(多层线路板制造专家:)、华强芯城(电子元器件及SMT在线商城:)三大主营业务,以互联网信息技术改善传统制造业,打通电子产业链上下游,形成服务于整个电子产业链的一站式服务平台,为客户降低成本,提升品质,加速进程。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。引起我注意Keil c函数参数传递的是在一个偶然的机会,我在写一个函数的时候:如下
write_byte(ulong addr, uchar dat)
我原本以为addr会通过R4—R7来传递,而dat则通过R3传递的,在调试的时候却发现dat是通过固定地址储存区传递的。因此引发了我想知道它到底是怎样传递参数的。
因为大家都知道,keil c的参数传递规则
参数& & char,& && && && &int,& && && && & long,& &&&generic
数目&&1-byte pointer& &&&2-byte pointer& && &float& && &pointer
1& && & R7& && && && & R6 & R7& && && &R4-R7& &&&R1-R3
2& && & R5& && && && & R4 & R5
3& && & R3& && && && & R2 & R3
我原本以为三个int参数都通过寄存器能传递,一个ulong和一个uchar应该也可以吧,真是有点不明白。如果写为如下
write_byte(ulong addr, uchar * dat)
即一个ulong参数和一个指针参数则都能通过寄存器传递。
导致上面第二个uchar参数不通过寄存器传递的原因大概是因为第二个uchar型参数一定要通过R5来传递吧,而第一个ulong型参数正好用了R5,所以dat就只能通过固定地址的存储区来传递了。
为此我就想测试一下如果不通过寄存器来传递参数或通过模拟栈来传递参数时参数的传递情况会是怎样的。
第一个例子如下,通过寄存器传递参数,代码共101字节。
void delay(ulong dlyh, uint dlyl)
& && &&&while(dlyh--);
& && & while(dlyl--);
void main(void)
& && &&&delay(0x100, 0x50);
& && & while(1);
汇编代码如下,
& && & RSEG&&?PR?_delay?TEST_PARA
& && & USING&&0
& && && && && && && &; SOURCE LINE # 6
& && & MOV& && && &dlyh?040+03H,R7& && && && &;把从寄存器R4—R7传来的第一个参数
& && & MOV& && && &dlyh?040+02H,R6& && && &;存入固定地址。
& && & MOV& && && &dlyh?040+01H,R5& && && &;(有时真觉得这动作啥冒)
& && & MOV& && && &dlyh?040,R4
& && && && && && && &; SOURCE LINE # 7
;& && && &while(dlyh--);
& && && && && && && &; SOURCE LINE # 8
& && & MOV& && && &R0,#LOW (dlyh?040)
& && & MOV& && && &A,#0FFH
& && & LCALL& && & ?C?LLDIIDATA8
& && & MOV& && && &A,R4
& && & ORL& && && &A,R5
& && & ORL& && && &A,R6
& && & ORL& && && &A,R7
& && & JNZ& && && &?C0001
;& && &&&while(dlyl--);
& && && && && && && &; SOURCE LINE # 9
& && & MOV& && && &A,dlyl?041+01H
& && & DEC& && && &dlyl?041+01H
& && & MOV& && && &R6,dlyl?041
& && & JNZ& && && &?C0009
& && & DEC& && && &dlyl?041
& && & ORL& && && &A,R6
& && & JNZ& && && &?C0003
& && && && && && && &; SOURCE LINE # 10
& && & RET& &&&
; END OF _delay
; void main(void)
& && & RSEG&&?PR?main?TEST_PARA
& && & USING&&0
& && && && && && && &; SOURCE LINE # 12
& && && && && && && &; SOURCE LINE # 13
;& && && &delay(0x100, 0x50);
& && && && && && && &; SOURCE LINE # 14
& && & MOV& && && &?_delay?BYTE+04H,#00H& && && && && && &;传递第二个参数
& && & MOV& && && &?_delay?BYTE+05H,#050H
& && & MOV& && && &R7,#00H& && && && && && && && && && && && && && && && & ;传递第一个参数
& && & MOV& && && &R6,#01H
& && & MOV& && && &R5,#00H
& && & MOV& && && &R4,#00H
& && & LCALL& && & _delay& && && && && && && && && && && && && && && && && &&&;函数调用
;& &&&while(1);
& && && && && && && &; SOURCE LINE # 15
& && & SJMP& && &&&?C0006
; END OF main
我们看到,第一个参数在调用函数里先送到R4—R7,然后在被调用函数delay里又从R4—R7传递到固定存储地址。
第二个例子仍然是第一个例子的函数,但是不通过寄存器传递参数,共94字节。
汇编代码如下:
& && &RSEG&&?PR?delay?TEST_PARA
& && &USING& & 0
& && && && && && &&&; SOURCE LINE # 6
& && && && && && &&&; SOURCE LINE # 7
;& && && &while(dlyh--);
& && && && && && &&&; SOURCE LINE # 8
& && &MOV& && && &R0,#LOW (dlyh?040)
& && &MOV& && && &A,#0FFH
& && &LCALL& && & ?C?LLDIIDATA8& && && && && & ;取参数
& && &MOV& && && &A,R4
& && &ORL& && && &A,R5
& && &ORL& && && &A,R6
& && &ORL& && && &A,R7
& && &JNZ& && && &?C0001
;& && &&&while(dlyl--);
& && && && && && &&&; SOURCE LINE # 9
& && &MOV& && && &A,dlyl?041+01H
& && &DEC& && && &dlyl?041+01H
& && &MOV& && && &R6,dlyl?041
& && &JNZ& && && &?C0009
& && &DEC& && && &dlyl?041
& && &ORL& && && &A,R6
& && &JNZ& && && &?C0003
& && && && && && &&&; SOURCE LINE # 10
& && &RET& && && &
; END OF delay
; void main(void)
& && &RSEG&&?PR?main?TEST_PARA
& && &USING& & 0
& && && && && && &&&; SOURCE LINE # 12
& && && && && && &&&; SOURCE LINE # 13
;& && && &delay(0x100, 0x50);
& && && && && && &&&; SOURCE LINE # 14
& && &CLR& && && &A
& && &MOV& && && &?delay?BYTE+03H,A& && && && && && &;传递第一个参数
& && &MOV& && && &?delay?BYTE+02H,#01H
& && &MOV& && && &?delay?BYTE+01H,A
& && &MOV& && && &?delay?BYTE,A
& && &MOV& && && &?delay?BYTE+04H,A& && && && && && &;传递第二个参数
& && &MOV& && && &?delay?BYTE+05H,#050H
& && &LCALL& &&&delay& && && && && && && && && && && && && && && && &;调用函数。
;& && &&&while(1);
& && && && && && &&&; SOURCE LINE # 15
& && &SJMP& && &&&?C0006
; END OF main
我们可以看到,在这个例子中,调用函数直接把参数传递到固定的存储地址,少了通过寄存器这一步,产生的代码更小。
第三个例子,还是原来的函数,但是参数通过模拟栈传递,代码共128字节。
void delay(ulong dlyh, uint dlyl) reentrant
& && &&&while(dlyh--);
& && &while(dlyl--);
void main(void)
& && &&&delay(0x100, 0x50);
& && &while(1);
产生的汇编代码如下
& && &RSEG&&?PR?_?delay?TEST_PARA
& && &USING& & 0
& && && && && && &&&; SOURCE LINE # 6
& && &MOV& && && &A,?C_IBP
& && &ADD& && && &A,#0FCH& && && && && && && && &&&;模拟栈指针减四
& && &MOV& && && &?C_IBP,A
& && &MOV& && && &R0,A
& && &LCALL& && & ?C?LSTIDATA& && && && && && && &;保存第一个参数
;& && && &while(dlyh--);
& && && && && && &&&; SOURCE LINE # 8
& && &MOV& && && &R0,?C_IBP
& && &MOV& && && &A,#0FFH
& && &LCALL& && & ?C?LLDIIDATA8& && && &;取参数
& && &MOV& && && &A,R4
& && &ORL& && && &A,R5
& && &ORL& && && &A,R6
& && &ORL& && && &A,R7
& && &JNZ& && && &?C0001
;& && &&&while(dlyl--);
& && && && && && &&&; SOURCE LINE # 9
& && &MOV& && && &A,?C_IBP
& && &ADD& && && &A,#04H
& && &MOV& && && &R0,A
& && &INC& && && &R0
& && &MOV& && && &A,@R0
& && &DEC& && && &@R0
& && &DEC& && && &R0
& && &MOV& && && &AR6,@R0
& && &JNZ& && && &?C0009
& && &DEC& && && &@R0
& && &ORL& && && &A,R6
& && &JNZ& && && &?C0003
& && && && && && &&&; SOURCE LINE # 10
& && &MOV& && && &A,?C_IBP
& && &ADD& && && &A,#06H
& && &MOV& && && &?C_IBP,A
& && &RET& && && &
; END OF _?delay
; void main(void)
& && &RSEG&&?PR?main?TEST_PARA
& && &USING& & 0
& && && && && && &&&; SOURCE LINE # 12
& && && && && && &&&; SOURCE LINE # 13
;& && && &delay(0x100, 0x50);
& && && && && && &&&; SOURCE LINE # 14
& && &DEC& && && &?C_IBP
& && &DEC& && && &?C_IBP
& && &MOV& && && &R0,?C_IBP& && && && && && && && && && && &;传递第二个参数
& && &MOV& && && &@R0,#00H
& && &INC& && && &R0
& && &MOV& && && &@R0,#050H
& && &CLR& && && &A
& && &MOV& && && &R7,A& && && && && && && && && && && && && &&&;第一个参数,通过寄存器传递。
& && &MOV& && && &R6,#01H
& && &MOV& && && &R5,A
& && &MOV& && && &R4,A
& && &LCALL& &&&_?delay
;& && &&&while(1);
& && && && && && &&&; SOURCE LINE # 15
& && &SJMP& && &&&?C0006
; END OF main
第三个例子可以看出,通过模拟栈进行参数传递的函数,调用函数仍然尽可能的通过寄存器组传递参数,然后被调用函数再把寄存器传递来的参数保存入模拟栈。
这里只是举了几个例子来说明keil c的参数传递情况,也许举例的函数不是很一般,不能太说明问题,各位可自己试试。
现在我们来总结一下。(这里不考虑太简单的函数,特例是函数存参数的存储器在寄存器组里面,这方面的问题可去看我的另一辩文章“keil c的一些有趣特性”)。
一、如果函数无参数,这种情况就不用考虑参数的传递,多好。
二、通过寄存器组传递参数,调用函数把参数传入寄存器组里,在被调用函数里还要把参数从寄存器组里存入固定存储地址。
三、通过固定存储区传递参数,调用函数直接把参数传入固定的存储地址里,被调用函数从这里取参数就是了。
四、通过模拟栈传递参数,有点类似于通过寄存器组传递参数,不过代码的大小及执行的时间可就……。
由此看到,并不是说通过寄存器传递参数是最好的方法,有些情况下通过固定存储区传递参数或许会有更好的表现。(如代码大小,执行时间在某些情况也会更快(这里不再举例说明了,大家可自己想想))。
处处留心皆学问!
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
EEWORLD 官方微信
Powered by
逛了这许久,何不进去瞧瞧?

我要回帖

更多关于 oracle视图添加字段 的文章

 

随机推荐