楚小云 / 小云问答 / 问答详情

在main之前,IAR都做了啥

2023-07-11 09:38:28
TAG: ma
北营

首先系统复位时,Cortex-M3从代码区偏移0x0000"0000处获取栈顶地址,用来初始化MSP寄存器的值。

接下来从代码区偏移0x0000"0004获取第一个指令的跳转地址。这些地址,是CM3要求放置中断向量表的地方。

这里是一个程序的启动区的反汇编:

__vector_table:

08004000 2600

08004002 2000

08004004 7E1D

08004006 0800

这个程序是由IAP程序来启动的,IAP程序获取0x0800"4000处的MSP值(0x20002600),并设置为MSP的值,即主堆栈最大

范围是0x2000"0000~0x2000"25FF。接下来IAP程序获取0x0800"4004处的Reset_Handler的地址

(0x0800"7E1D),并跳转到Reset_Handler()执行。

IAP在这里完全是模仿了Cortex-M3的复位序列,也就是说,在没有IAP的系统上,CM3只能从0x0800"0000获取MSP,从

0x0800"0004获取第一条指令所处地址。而IAP就存在在0x0800"0000这个地址上,IAP的启动,已经消耗掉了这个复位序列,所以

IAP要启动UserApp程序的时候,也是完全模仿Cortex-M3的复位序列的。

接下来我们看看复位后第一句指令——Reset_Handler()函数里有什么。

若我们使用的是ST公司标准外设库,那么已经有了现成的Reset_Handler,不过他是弱定义——PUBWEAK,可以被我们重写的同名函数覆盖。一般来说,我们使用的都是ST提供的Reset_Handler,在V3.4版本的库中,可以在startup_stm32f10x_xx.s中找到这个函数:

PUBWEAK Reset_Handler

SECTION .text:CODE:REORDER(2)

Reset_Handler

LDR R0, =SystemInit

BLX R0

LDR R0, =__iar_program_start

BX R0

看来ST没有做太多的事,他只调用了自家库提供的SystemInit函数进行系统时钟、Flash读取的初始化,并把大权交给了

__iar_program_start这个IAR提供的“内部函数”了,我们就跟紧这个__iar_program_start跳转,看看IAR做了什

么,上面一段代码的反汇编如下:

Reset_Handler:

__iar_section$$root:

08007E1C 4801 LDR R0, [PC, #0x4]; LDR R0, =SystemInit

08007E1E 4780 BLX R0;BLX R0

08007E20 4801 LDR R0, [PC, #0x4];LDR R0, =__iar_program_start

08007E22 4700 BX R0;BX R0

08007E24 6C69

08007E26 0800

08007E28 7D8D

08007E2A 0800

细心的观众会发现地址是0x0800"7E1C,比我们查到的0x0800"7E1D差了1,这是ARM家族的遗留问题,因为ARM处理器的指令至

少是半字对齐的(16位THUMB指令集 or

32位ARM指令集),所以PC指针的LSB是常为0的,为了充分利用寄存器,ARM公司给PC的LSB了一个重要的使命,那就是在执行分支跳转时,PC

的LSB=1,表示使用THUMB模式,LSB=0,表示使用ARM模式,但在最新的Cortex-M3内核上,只使用了THUMB-2指令集挑大梁,所

以这一位要常保持1,所以我们查到的地址是0x0800"7E1D(C=1100,D=1101),放心,我们的CM3内核会忽略掉LSB(除非为0,那

么会引起一个fault),从而正确跳转到0x0800"7E1C。

从0x0800"7E20处的加载指令,我们可以算出__iar_program_start所处的位置,就是当前PC指针

(0x0800"7E24),再加上4,即0x0800"7E28处的所指向的地址——0x0800"7D8D(0x0800"7D8C),我们跟紧着跳

转,__iar_program_start果然在这里:

__iar_program_start:

08007D8C F000F88C BL __low_level_init

08007D90 2800 CMP R0, #0x0

08007D92 D001 BEQ __iar_init$$done

08007D94 F7FFFFDE BL __iar_data_init2

08007D98 2000 MOVS R0, #0x0

08007D9A F7FDFC49 BL main

我们看到IAR提供了__low_level_init这个函数进行了“底层”的初始化,进一步跟踪,我们可以查到__low_level_init这个函数做了些什么,不是不是我们想象中的不可告人。

__low_level_init:

08007EA8 2001 MOVS R0, #0x1

08007EAA 4770 BX LR

__low_level_init出乎想象的简单,只是往R0寄存器写入了1,就立即执行"BX

LR"回到调用处了,接下来,__iar_program_start检查了R0是否为0,为0,则执行__iar_init$$done,若不是0,就

执行__iar_data_init2。__iar_init$$done这个函数很简单,只有2句话,第一句是把R0清零,第二句就直接"BL

main",跳转到main()函数了。不过既然__low_level_init已经往R0写入了1,那么我们还是得走下远路——看看

__iar_data_init2做了些什么,虽然距离main只有一步之遥,不过这中间隐藏了编译器的思想,我们得耐心看下去。

__iar_data_init2:

08007D54 B510 PUSH {R4,LR}

08007D56 4804 LDR R0, [PC, #0x10]

08007D58 4C04 LDR R4, [PC, #0x10]

08007D5A E002 B 0x8007D62

08007D5C F8501B04 LDR R1, [R0], #0x4

08007D60 4788 BLX R1

08007D62 42A0 CMP R0, R4

08007D64 D1FA BNE 0x8007D5C

08007D66 BD10 POP {R4,PC}

08007D68 7C78

08007D6A 0800

08007D6C 7C9C

08007D6E 0800

看来IAR迟迟不执行main()函数,就是为了执行__iar_data_init2,我们来分析分析IAR都干了些什么坏事~

首先压R4,LR入栈,然后加载0x0800"7C78至R0,0x0800"7C9C至

R4,马上跳转到0x0800"7D62执行R0,R4的比较,结果若是相等,则弹出R4,PC,然后立即进入main()。不过IAR请君入瓮是自不会

那么快放我们出来的——结果不相等,跳转到0x0800"7D5C执行,在这里,把R0指向的地址——0x0800"7C78中的值——

0x0800"7D71加载到R1,并且R0中的值自加4,更新为0x0800"7C7C,并跳转到R1指向的地址处执行,这里是另一个IAR函

数:__iar_zero_init2:

__iar_zero_init2:

08007D70 2300 MOVS R3, #0x0

08007D72 E005 B 0x8007D80

08007D74 F8501B04 LDR R1, [R0], #0x4

08007D78 F8413B04 STR R3, [R1], #0x4

08007D7C 1F12 SUBS R2, R2, #0x4

08007D7E D1FB BNE 0x8007D78

08007D80 F8502B04 LDR R2, [R0], #0x4

08007D84 2A00 CMP R2, #0x0

08007D86 D1F5 BNE 0x8007D74

08007D88 4770 BX LR

08007D8A 0000 MOVS R0, R0

__iar_data_init2还没执行完毕,就跳转到了这个__iar_zero_inti2,且看我们慢慢分析这个帮凶——__iar_zero_inti2做了什么。

__iar_zero_inti2将R3寄存器清零,立即跳转到0x0800"7D80执行"LDR R2, [R0],

#0x4",这句指令与刚才在__iar_data_init2见到的"LDR R1, [R0],

#0x4"很类似,都为“后索引”。这回,将R0指向的地址——0x0800"7C7C中的值——0x0000"02F4加载到R2寄存器,然后R0中的

值自加4,更新为0x0800"7C80。接下来的指令检查了R2是否为0,显然这个函数没那么简单想放我我们,R2的值为2F4,我们又被带到了

0x0800"7D74处,随后4条指令做了如下的事情:

1、将R0指向的地址——0x0800"7C80中的值——0x2000"27D4加载到R1寄存器,然后R0中的值自加4,更新为0x0800"7C84。

2、将R1指向的地址——0x2000"27D4中的值——改写为R3寄存器的值——0,然后R1中的值自加4,更新为0x2000"27D8。

3、R2自减4

4、检查R2是否为0,不为0,跳转到第二条执行。不为,则执行下一条。

这简直就是一个循环!——C语言的循环for(r2=0x2F4;r2-=4;r!=0){...},我们看看循环中做了什么。

第一条指令把一个地址加载到了R1——0x2000"27D4

是一个RAM地址,以这个为起点,在循环中,对长度为2F4的RAM空间进行了清零的操作。那为什么IAR要做这个事情呢?消除什么记录么?用Jlink

查看这片内存区域,可以发现这片区域是我们定义的全局变量的所在地。也就是说,IAR在每次系统复位后,都会自动将我们定义的全局变量清零0。

清零完毕后,接下来的指令"LDR R2, [R0],

#0x4"将R0指向的地址——0x0800"7C84中的值——0加载到R2寄存器,然后R0中的值自加4,更新为0x0800"7C88。随后检查

R2是否为0,这里R2为0,执行"BX

LR"返回到__iar_data_init2函数,若是不为0,我们可以发现又会跳转至“4指令”处进行一个循环清零的操作。

相关推荐

江门帝晶光电是国企吗

不是。是一家私营企业江门帝晶光电科技有限公司成立于2004年3月,注册资本18264.7069万元,2015年6月与领益智造(股票代码:002600)完成资产重组。帝晶光电目前拥有六大生产基地:LCM第一事业部、OEM事业部、CTP事业部、LCM第二事业部、赣州帝晶、江门帝晶,分别在香港、上海、西安、台湾设有四大办事处。
2023-07-11 07:11:131

桂林市领益智造上市了没有

上市了。领益智造公司于2020年6月2日完成定增的询价,股票代码:002600,2020年7月6日公开发行新股票,就证明该公司已经上市了。领益智造股份有限公司是精密制造领域的全球领先制造商,公司秉承“诚信务实、客户至上、尊已敬人、责任担当、长期主义、价值共生”的价值观。
2023-07-11 07:11:231

领益智造上市股票代码是多少?

我帮您查了一下,领益智造于2011-07-15在深圳证券交易所上市的,上市股票代码是002600,希望能帮到您。
2023-07-11 07:11:331

郑州领胜科技累不累

不累。郑州领胜科技有限公司于2015年11月在郑州航空港区正式投产运营,是广东领益智造股份有限公司(以下简称领益智造002600)全资子公司。根据查询相关资料显示,经营范围,生产、销售,手机、电脑及零部件、精密金属配件、新型电子元器件、导电材料、导热绝缘材料、屏蔽防辐射材料、高精密数控设备、自动化检测设备、工业机器人、切削工具、精密模具、数控设备,在郑州领胜科技有限公司工作不累。工作轻松,时间较短。
2023-07-11 07:11:471

领益智造是科技股吗

领益智造是科技股。领益智造所属概念:永磁高铁、小额贷款、小额再贷款、新材料、触摸屏、电子信息、电动汽车、智能终端、苹果、深股通、富士康、无线充电、OLED面板、OLED、小金属、稀土永磁、小米、消费电子、柔性屏等。领益智造,即广东领益智造股份有限公司,成立于1975年7月1日,注册资本70.71亿人民币,注册地址是广东省江门市蓬江区龙湾路8号,控股股东是领胜投资(深圳)有限公司,总部位于江门市蓬江区。广东领益智造股份有限公司的前身是江门市粉末冶金厂。广东领益智造股份有限公司于2011年7月15日在深圳证券交易所上市,主承销商是国信证券股份有限公司,上市保荐人是国信证券股份有限公司,股票代码为002600。广东领益智造股份有限公司主要从事新型电子元器件、手机及电脑配件的生产和销售,主要产品包括模切产品、CNC产品、冲压件、紧固件、组装产品。
2023-07-11 07:11:571

成都领益科技有限公司是双休吗

不是。现在一般都是单休,没有双休。成都领益科技有限公司为广东领益智造在成都的子公司(股票代码:002600),是世界领先的模切公司,为众多知名厂商定制高质量的模切产品。致力于建立富有活力、勇于开拓、通力合作的团队,将为员工提供广阔的发展空间。
2023-07-11 07:12:171

用PS制作一只可爱独眼毛怪

教程制作的重点是眼睛与身体两部分。眼睛部分跟动物眼睛制作方法类似;身体部分可以先画出大致轮廓,边缘用画笔或涂抹工具做出细毛发,然后把毛发素材加进去,调整明暗及光感即可。最终效果1、我们新疆一个1280 * 1024的文档,把背景色设置成我们喜欢的背景,我这里是:#002600。2、我们先来看看眼睛的结构。3、我们用椭圆工具画一个圆,为其添加图层样式:投影、内阴影,渐变叠加。#p#副标题#e#4、在圆的上方新建一个白色图层,添加杂色。(让圆没有太新的感觉,那样不自然)。5、添加一个圆形,颜色为:#18253d,添加图层样式:内发光,投影。6、添加一个同样大小的圆,颜色设置为:#3595c2,并给予遮罩。7、添加一个黑圈,样式设置为叠加,让瞳孔的层次感更强。#p#副标题#e#8、添加一个白色环,设置好图层遮罩,样式设置为叠加。9、新建一个空白文档,用钢笔工具抠出一个形,新建一个空白图层,设置好画笔的大小,然后选择“路径选择工具”,选择该路径,点击右键描边路径,然后点编辑定义画笔预设。10、回到制作眼睛的文档,选择画笔工具,选择刚做好的画笔,然后按F5调出画笔控制面板,新建一个空白图层,在图层上面猛点,出现形状。11、缩放大小后放在蓝色区域上面,样式设置为“叠加”,然后复制多一个,颜色改为黑色,任意旋转角度,如果效果太淡,可以加多两个。#p#副标题#e#12、新建黑色圆,添加图层样式:投影。13、用画笔画出随意的高光形状,注意开始设置的光源是在右上角,在眼睛的轮廓画出一些磨损的效果,用随意的笔刷大概的画出即可。14、选择画笔工具,画出怪物的全身还有手,然后用涂抹工具,强度设置为80%,把涂色的图层往外抹,根据实际毛发方向涂抹。15、找一些毛发素材,根据方向来贴图。#p#副标题#e#16、给手加上阴影,阴影的处理方式跟身体的毛的处理方式一样,不要用圆笔刷。17、画怪物的嘴巴,用比较硬的笔刷来画出来,可以画出自己喜欢的形状,只要不太圆滑的效果就行。18、接下来做光影,光是在前上方,我们要做出亮面,还有暗面,还有脸部眼睛,嘴巴的凹凸产生的明暗,让画面的层次感变立体。#p#副标题#e#19、小怪物完成了,我们调节下图层样式来美化一下,这里可以开始随意发挥了。20、我们来完善下背景。21、加上倒影,加上背景的光影。最终效果:#p#副标题#e#
2023-07-11 07:12:281

校招拿到了领益智造的epm管培生offer,月薪6000+,在东莞,不知道怎么样可以去吗?

可以的。1、新产品评估及报价。2、新产品样品制作工艺确定。3、工程变更主导。领益成立于2006年,是全球精密功能件龙头企业和中国智能智造领军企业。2018年在A股上市(002600)2020年实现营收281亿元。《财富》中国500强,中国民营500强及中国制造业500强企业。招聘类型:1、研发设计类:工程项目管理(EPM)、工业工程(IE)、产品开发、材料研发、产品检测、模具设计、自动化设备开发。2、供应链管理类:生产及物料管控(PMC)、采购、品质、物流、供应商管理。3、生产制造类:生产管理。4、职能类:环境健康与安全(EHS)、IT、社会责任、财务、法务、关务、行政、基建、人力资源、审计、体系、资安、秘书。5、商务类:项目管理(PM)、销售、客服。
2023-07-11 07:12:391

股票邻益制造代码是多少?

领益智造[002600]广东领益智造股份有限公司成立于1975年07月01日,注册地位于江门市龙湾路8号,法定代表人为曾芳勤。经营范围包括制造、销售:磁性材料元件及其制品、合金粉末制品、微电机、机械设备和零部件及相关技术出口;生产科研所需原辅材料、机械设备、仪器仪表、零配件等商品及相关技术的出口;承办中外合资经营、合作生产及开展“三来一补”业务(按粤经贸进字[94]196号文经营);动产及不动产租赁;塑胶、电子精密组件制造技术研发;生产、加工、销售:五金制品、塑胶制品、塑胶电子制品、模具;货物或技术进出口(国家禁止或涉及行政审批的货物和技术进出口除外)。(依法须经批准的项目,经相关部门批准后方可开展经营活动)广东领益智造股份有限公司对外投资23家公司。
2023-07-11 07:12:563

002600为什么停牌

股民听到了,股票已经停牌了,都不知道怎么办了,也不知道是好是坏。事实上,停牌的情况,同时遇到了两种并不需要过度的担忧,但是要碰到下面第三种情况的时候,千万要小心注意!在讲解停牌内容之前,今日的牛股名单已经出来了,想和大家分享一下,我们必须要在没有被删之前,请领取一下:【绝密】今日3只牛股名单泄露,速领!!!一、股票停牌是什么意思?一般会停多久?股票停牌的意思就是说“某一股票临时停止交易”。至于停牌需要持续多长时间,停牌一个小时就恢复如初的股票还是有的,而有的股票都有可能会停牌1000多天,这些都是有可能的,没人决定的了这个时间,具体要看是到底有哪些因素导致了停牌。二、什么情况下会停牌?股票停牌是好是坏?股票停牌大致有三种情况:(1)发布重大事项公司的(业绩)信息披露、重大影响问题澄清、股东大会、股改、资产重组、收购兼并等情况。因为事件很大才会造成停牌,影响的时间肯定不相同,不过最迟还是不会超过20个交易日。大概需要花一个小时的时间来澄清一个重大问题,股东大也只不过是一个交易的时间,资产重组和收购兼并等算是非常复杂的情况,停牌时间可能长达好几年。(2)股价波动异常如果说股价出现了很异常的波动,举个例子,深交所有条规定:“连续三个交易日内日收盘价涨跌幅偏离值累计达到±20%”,停牌1小时,基本上十点半就复牌了。(3)公司自身原因公司出现不同程度的违规交易所接受的停牌时间也是不一样的。上面的三种停牌状况,(1)(2)两种停牌都是好事,然而(3)这种情况比较难解决。就分别拿第一种和第二种情况来分析,股票复牌就说明利好,这种利好信号提醒我们,可以提早知道就可以优先规划好方案。这个股票神器于你有益,提醒你哪些股票会停牌、复牌,还有分红等重要信息,每个股民都必备:专属沪深两市的投资日历,轻松把握一手信息只是知道停牌和复牌的日子还差得远,主要是这个股票好不好,如何布局要有了解?三、停牌的股票要怎么操作?在复牌后有一部分股票大涨大跌的情况都是有的,股票未来是否可以出现上升趋势这是很重要的,这是需要运用到很多不同的思维方式去分析与研究的。所以,大家首先要学会沉得住气,千万别乱了阵脚,对股票进行全面的分析,这是首要的。从一个初始涉及的人的角度来考虑,对于识别股票好坏来说是很难的一件事,所以学姐特地给大家准备了诊股方法,哪怕你才初次接触投资,此时一只股票的好坏自己能分析出来:【免费】测一测你的股票好不好?应答时间:2021-09-08,最新业务变化以文中链接内展示的数据为准,请点击查看
2023-07-11 07:13:051

002600股票今天怎么停牌了

江粉磁材(002600)周三晚间发布公告,公司拟出资成立深圳龙元汇信科技股份有限公司注册资本为500万元,其中公司出资255万元,占比51%。  合资公司将搭建磁性材料行业交易的电商平台,运营成熟后逐步扩充至其他电子元器件产品。  江粉磁材表示,通过磁性材料电商平台,解决磁性材料行业供应链上信息的不对称性,对供应链各单位的资源配合、优化分配,提升整个行业的生产效率及效益。
2023-07-11 07:13:302

股票002600现在多少钱

江粉磁材002600最新的收盘价是7.82元——
2023-07-11 07:13:431

领益智造预计半年度净利润同比增长246%至298%

7月4日,领益智造(002600)发布业绩预告,公司预计2019年1-6月归属上市公司股东的净利润8.50亿至11.50亿,同比变动246.25%至297.87%,电子制造行业平均净利润增长率为10.59%。 公司基于以下原因作出上述预测:1、报告期内,公司归属于上市公司的主业制造业经营净利润为45,477万元至75,477万元,上年同期为29,589.06万元,增幅为54%至156%。原因为: 1)公司经营状况及管理调整持续向好,使公司主业制造业中的精密功能及结构件业务、显示及触控模组业务的营业收入及利润保持较好增长;2)公司大力推行降本增效、减少报废等管控措施,同时积极加强内部管理和企业整体素质提升(包括人员、体制和团队等),并积极推行自动化、优化人力。上述措施取得了一定的成效,不仅降低了成本和费用,同时也提高了生产和管理的效率。 2、公司子公司东方亮彩(指深圳市东方亮彩精密技术有限公司,简称“东方亮彩”)未完成业绩承诺,其原股东应对上市公司进行业绩补偿,其中业绩补偿股票按公司股票收盘价进行计量,变动额计入公允价值变动损益。受该因素影响,本期计入公允价值变动损益的金额为39,522.94万元。 预计本报告期非经常性损益对归属于上市公司股东净利润的影响约为44,000万元,主要系公司子公司东方亮彩业绩未完成业绩承诺的补偿股票和收到的政府补助。
2023-07-11 07:13:581

400多个机构盯上了同一家公司,一季度业绩逆势增长只是开端

要点: 2、这家公司一季度业绩逆势增长,获400余家机构调研。 热点缺乏、行情多变的一周终于结束了,周五晚上,我们如期为大家送上近期机构调研动向,快看看这些调研暴露了机构怎样的偏好吧~ 一、机构调研新动向 过去10天(5月5日-5月14日),机构调研了234家上市公司,调研节奏加速。 热门公司的扎堆现象明显:德赛西威获得413个投资者的调研,领益智造接待232家机构调,信维通信、一心堂、开立医疗、纳思达等公司也获得上百家机构的调研。 从接待调研的公司所处的板块来看,中小创依然是主角,121家中小板公司、86家创业板公司获调研。 1、电子:半导体国产替代再加速,消费电子海外产业链逐渐修复 从细分行业看,半导体领域上游中游都有重要新闻。 一是美国加大管制半导体设备。目前国内半导体材料与设备国产化率不足20%,国家大基金二期会在这些领域加大投入,从而保障产业链的安全,相关板块会在外部催化下迎来估值的提升。 二是中芯国际要回归A股 ,将扩产14nm工艺,从而进一步缩小与台积电、三星的技术差距,半导体国产替代进程也将正式进入新阶段,利好半导体产业链。 另外,消费电子接受调研的公司也非常多,包括领益智造、信维通信、盈趣 科技 等。一个重要原因是海外产业链预计5月将陆续复工,主要品牌商如苹果、三星部分线下零售店恢复营业,有效改善下游需求;主要供应商,如东芝、LG、Skyworks在日本、印度、墨西哥的工厂复产,将逐渐恢复中上游零部件产能。 2、机械设备:逆周期调节政策下高景气 随着国内复工复产的推进,工程机械的需求也逐步回暖,4月挖掘机销量大幅增长59.9%,同时各大主机厂普遍提价,反映出下游需求的火热。两会在即,逆周期调节政策预期升高,基建投资发力空间大,工程机械行业保持高景气的确定性强。 早在月初的时候,我们为大家梳理了各券商的5月金股,机械行业不少公司被选入其中,包括三一重工、中微公司、威海广泰等,详情可点击。 三、机构扎堆调研这些公司,有什么看点? 1、 德赛西威(002920.SZ) 德赛西威是国内 汽车 电子核心企业,主业是智能驾驶舱,新兴业务为智能驾驶以及车联网解决方案。 1)智能座舱产品进展: 2019年6月,公司在上海CES上发布了智能座舱3.0版本,推出基于自动驾驶L3环境下的"泛社交"交互中心的智能座舱理念。 2)智能驾驶辅助产品进展: 多种ADAS产品已实现规模化量产,新产品销量与订单量加速提升,2019年ADAS产品销售额同比增幅超过100%。 3)研发投入情况: 2019年公司研发投入6.56亿元,占比销售额12.29%,公司研发人员占比达到41.46%。2020年1月,公司通过了ASPICECL2( 汽车 行业软件过程改进和能力评估模型二级)国际认证,标志着公司在 汽车 领域的软件开发能力与国际接轨,达到国际先进水平。 4)客户结构: 公司着力优化以欧美系车厂、日系车厂和国内自主品牌车厂为核心的客户机构。2019年新开拓了一汽丰田、长安福特、雷克萨斯、DAF等优质客户。 2、领益智造(002600.SZ) 领益智造是全球领先的精密智造企业,主要业务包括精密功能件(领益 科技 )、精密结构件(东方亮彩)、充电器(Salcomp)、磁性材料(江粉磁材)等,产品广泛应用于消费电子、智能安防/家居、新能源 汽车 等领域,是苹果产业链核心供应商。 1)上下游业务整合情况: 目前已形成11大核心产品线,涉及产业链上中下游三个层级。上游以材料的研发和制造为方向,产品包括磁材产品线、陶瓷、铁氧体、纳米晶等,以及基础模具、加工能力的整合;中游提供精密零件,中高低档部件产品,以满足客户各种需求;下游以模组和次组装为方向,包括马达、充电器、无线充电、散热模组和软包配件等,并购赛尔康后具备了SMT和FATP的能力,可以实现某些产品的ODM和自研自制。 2)可穿戴、电脑等领域的布局规划: 公司从手机业务延伸至消费电子的其他领域,包括平板、PC、手表、TWS耳机、AR/VR等;也会运用在手机行业精密制造及垂直整合练就的优质能力,横向跨入新能源 汽车 、医疗、航空航天、电动工具、5G、IoT、穿戴式装置等其他产业领域将随着大客户产品线的发展脉络共同成长。 3)客户情况及开拓规划: 公司在客户端的基本策略为提高现有产品、现有客户的渗透率;围绕成熟客户新的产品线进行延伸;挖掘新客户,跨入新行业、新领域。安卓客户方面,目前已经全面进入国内HMOV客户,同时通过ODM和自研两条路径也进入了韩系国际大厂。 4)精密功能件行业市场空间及竞争格局: 精密功能件应用场景广阔,市场空间巨大,行业未来将会随着品牌客户集中而逐步甚至加快向头部企业集中,同时垂直整合也将进一步加强,分工将会更细,客户对定制化、规模化的要求也将会更高。 5)全球化布局情况: 公司早期在越南已有10万平米的厂房,主要是做冲压相关的产品。收购赛尔康后形成在台湾研发、东南亚制造的格局。此外公司在印度地区也有布局,除了赛尔康原有的规模化生产以外,后续还会加入冲压件、模切件等,形成业务协同。 6)5G领域的布局情况: 公司在5G相关产品的布局,主要包括5G手机、5G设备、数据中心的散热以及无源器件产品线。2020年已开始导入到部分核心客户,实现小批量投产,力争明年实现规模化投产。此外,公司正逐步进入到特种双工滤波器市场,预计2020年底导入新客户,2021年实现规模化营收。 3、信维通信(300136.SZ) 信维通信立足天线业务,顺应智能终端创新趋势,围绕射频前端业务综合布局,目前涵盖射频前端元器、无线充电、NCF支付和连接器等多方面的业务,现已成为国内领先的泛射频领域龙头企业。 1)2018-2019年公司增长较为平缓,做了哪些调整和产品储备? 过去两年公司遇到了产能瓶颈,随着常州生产基地、越南工厂的投入,产能得到了大幅扩充,为后续的发展奠定了基础;中美贸易摩擦导致外部环境不确定性加大,公司相对较谨慎,2019年首次在海外建厂,在越南布局生产基地。产品储备上,公司在5G天线、LCP器件、无线充电、高性能精密BTB、5G基站天线及关键天线部件、射频前端器件等产品线都取得了很好的进展。 2)2020-2022年公司规划及挑战: 技术上已经开始研究6G技术与材料;产品上,围绕泛射频布局5G天线、无线充电Rx/Tx、LCP模组、无线连接模组、射频前端等,在今年下半年或是明年会有大量产品出货。公司在管理上遇到了一些挑战,管理流程、激励上需要持续改善。 3)天线领域行业变化趋势及公司应对: 天线未来的趋势是高频化、小型化,对材料也是一种挑战。公司近几年和日本材料企业有很多的合作,在材料与技术上做好了准备。对6G方面的材料与技术也已经开始做储备。在LCP方面,从LCP膜到产品一体化布局,取得了不错的进展。 4)无线充电领域的优势及规划: 公司的无线充电客户包括北美大客户、安卓客户、 汽车 客户,优势在于一体化的优势,特别是材料的优势,现在已经与客户研发2022年及以后的新产品。无线充电市场空间非常大,公司产品形态从Rx做到Tx,产品应用也从手机拓展到无线耳机、平板、笔电、手表、智能 汽车 、智能家居、IOT产品,这块业务将快速成长,未来做到几十亿的收入规模。 5)2-3年内的新布局方向: 目前公司90%以上的收入来源于消费电子,正在拓展5G基站、智能 汽车 ,以及智能家居等IOT产业,未来公司来自于其他产业的收入占比也会陆续提高。技术上会继续加大材料的研究,例如射频材料、磁性材料、EMI材料、高分子材料、陶瓷材料等;产品会水平扩张,延伸模组产品,例如天线模组、电源模组 (WPC Rx/Tx)、LCP模组、无线连接模组、射频前端模组等。 股市常变,匠心不移。@鲁班行研 风险提示:内容供参考,请自主决策,风险自担。投资有风险,入市需谨慎!
2023-07-11 07:14:101

维罗生态砖价格大全 维罗生态砖怎么样

  大多数人在选购瓷砖之前都是对瓷砖没有多大了解的,要么就直接听朋友推荐,要么就只听销售人员的意见,最好买回去又感觉不太喜欢,其实在选购瓷砖的时候要做很多功课的,比如了解有哪些品牌值得信赖、要知道自己喜欢什么风格、平方数是多少、要先选墙砖再选地砖等等,至于在品牌方面,大家对维罗生态砖比较熟悉的,那么维罗生态砖价格情况是怎样的?维罗生态砖究竟好在哪里?下面就跟小编一起来了解下。  维罗生态砖怎么样?  维罗生态砖,就是采用先进的生态技术工艺,对含有锰、铝、锌、铜等成分的天然矿物质进行高度的提纯,加工后与陶瓷原料混合,经1280度以上高温长时间烧制成的瓷砖产品。这些砖品通过在原料中加入金属盐及其氧化物等天然矿物质,改变了产品的分子结构,从而使生产出来的比普通砖放射性更低、硬度更高、光洁度更好、抗污能力更强的维罗生态砖。  使用研磨目数在150以上的颗粒为胚体原料,实现电脑随机3D布料制胚,真石化垂直渗透印花,还原石层肌理。再经高温高压煅烧,并抛光而成,实现了抛光砖石化的跨越。犹如石材表面,不含杂色,布色均匀,色相柔和,过度自然,浓淡相宜。无论色感、质感、触感还是砖面的丰富性、立体性及通透性,逼真近似优质天然石材的立体感。配以维罗生态砖专有的胜洁技术,使得生态石系列硬度高、光泽度高、低吸水率、耐酸碱腐蚀,且抗污能力更强,更易清洁等优良特性。    维罗生态砖价格:  名称型号规格价格  维罗生态砖KLP002地面抛光砖  KLP002600*600mm123.70元/片  维罗生态砖KLP001地面抛光砖  KLP001800*800mm263.56元/块  维罗生态砖RP104地面釉面砖  RP1041000*1000mm1034.66元/块  维罗生态砖KLP001地面抛光砖  KLP001600*600m123.70元/片  维罗生态砖RP319地面釉面砖  RP319800*800mm255.76元/块  维罗生态砖RP319地面釉面砖  RP319800*800mm255.76元/块  维罗生态砖AMP001地面抛光砖  AMP001800*800mm243.80元/片  维罗生态砖KLP002地面抛光砖  KLP002800*800mm263.56元/块  维罗生态砖兰乔圣菲系列RP104全抛釉面砖  RP1041000*1000mm1034.66元/块  维罗生态砖亚马逊系列AMP005地面抛光砖  AMP005800*800mm243.80元/块  维罗生态砖特点  1、超微分、微粉颗粒、垂直渗透印花三位一体真石化无生产技术。  2、维罗生态砖独家的环保低碳高能煅烧工艺1280度低碳高温煅烧。  3、维罗生态砖纳米级C+圣洁技术。    以上就是维罗生态砖价格表大全及维罗生态砖详细介绍了,在认准品牌后,也要学会如何辨别瓷砖的好坏,现在市面上瓷砖质量参差不齐,不良商家为了赚更多的钱,往往会弄些劣质瓷砖来混淆消费者的眼睛,因此要学会如何辨别方法,例如看瓷砖表面是否有黑点、气泡等,或者掂分量,试瓷砖的手感,同一规格产品,质量好,密度高的砖手感都比较沉,反之,质次的产品手感较轻。土巴兔在线免费为大家提供“各家装修报价、1-4家本地装修公司、3套装修设计方案”,还有装修避坑攻略!点击此链接:【https://www.to8to.com/yezhu/zxbj-cszy.php?to8to_from=seo_zhidao_m_jiare&wb】,就能免费领取哦~
2023-07-11 07:15:101

用共享游标提升 MSSQL 性能

Boost SQL Performance with cursor_sharing关键词:cursor_sharing概述本文阐述在Oracle8i Release 2和Oracle9i中增强的游标共享设施。这些增强功能被一个新的参数cursor_sharing控制。cursor_sharing的目的就是提高没有使用绑定变量(bind vvariable)的应用程序服务器的性能。需要 cursor_sharing本段解释为什么应用程序不使用绑定变量(bind variables)会带来性能问题。应用程序反复执行相似的SQL语句使用Oracle数据库管理他(她)们的数据的应用程序必须使用SQL语句访问/修改数据库。这些SQL语句可以是由一个应用程序使用OCI, OCCI, JDBC, PL/SQL等直接产生的,也是可以是使用其他工具和库(例如:dbms_sql)间接产生的。根据不用的应用类型,通常一个应用程序都为最终用户提供了一个固定的功能集合,例如,一个人力资源应用程序可能会提供一些像增加一个新雇员,修改一个雇员的个人信息等功能。最终这些功能使用SQL访问和/或修改数据。因为应用程序重复地执行这些功能,一个应用和Oracle数据库的交互是由相似的SQL语句的反复执行构成的。SQL调用的步骤为执行一个SQL语句,客户端可以使用使用不同的接口。例如,通过OCI接口,客户端创建一个语句句柄(statement handle),然后perpare这个语句,绑定,定义和执行这个语句句柄,或者,SQL语句也可以通过一个PL/SQL过程被执行。按照客户端接口,Oracle数据库一直都使用固定的步骤(默认):1. 打开一个游标 - 用户游标是一个和SQL语句相关的全部用户状态的句柄,像执行内存,共享游标引用,用户游标的当前状态等等。2. 解析一个SQL语句到打开的用户游标中 -使SQL语句和用户游标关联;它也建立了一个共享游标,对应于SQL语句的解析格式。在一些情况下,共享游标也可以作为解析的一部分被校对和优化。解析,校对和优化SQL语句的过程通常是非常耗费CPU时间,内存和连接资源的。3. 如有需要,绑定变量 - 给Oracle提供SQL语句中绑定变量的数据类型,大小和值等必要的信息。4. 校对优化共享游标,如果还没有做这项工作的话。5. 执行用户游标 - 这一步真正完成语句执行的工作,根据语句的复杂程度消耗CPU和会话内存(session memory)。注意,解析,校对和优化(在本文中统称为编译)组成了执行一个SQL语句的消耗,并且能够限制数据库的容量和可测量性。共享游标一个典型的重复执行相似语句的应用,在Oracle数据库许多针对SQL处理目的的优化重复执行。最重要的优化是共享游标,试图通过在相同的语句的不同执行之间共享编译结果来消除编译的耗费(不是并发就是在不同的时间发生)。User Session 1PrivateexecutionstateUser Session 2PrivateexecutionstateShared Cursor为了能够使用共享游标,Oracle分割语句执行状态到共享游标中,并且在实例中预处理。共享游标是编译的结果并包含了执行计划;它在缓存在共享池中。每个执行该语句的会话有一个预执行状态的私有拷贝,如用户游标,运行时变量值等。在解析阶段(上面提到的第2步),Oracle首先搜索一个已经存在的可以被用户会话共享的共享游标。Oracle把搜索分为两步:基于SQL文本的检索,找到相同SQL文本创建的游标,根据其他标准选择适当的游标,如优化模式,访问的基本对象等。如果一个可以共享的游标被找到,并不需要编译,这个处理成为软解析(soft parse)。否则,编译SQL语句创建新的共享游标,这个处理成为硬解析(hard parse)。当被应用程序使用的大多数语句能够共享同样的游标集合时,大多数解析变成为软解析,进而提高数据库服务器的能力/吞吐量(缩减了内存和CPU的使用),响应时间(减少了解析阶段所使用的时间)和可测量性(减少了闭锁连接(latch connection) )。为什么游标不是共享的?假设其他的因素是相同的,如可配置的实例/会话/事务等级参数,理论上,如果在同样的行/对象上执行同样的操作,使用同样的计划,语句S1和S2的游标可以被共享。但是要计算和找出这些游标是非常困难的,这样做也可能抵消共享游标带来的好处。因此,Oracle游标共享标准规定在所有的情况下默认都不共享游标,除非它们被设计得很高效。从8i Release 2开始,如果S1和S2都是文本的并且不少的其他条件都相同(对象名被转换成为同样的基本对象,会话中语句的优化模式相同,等等),它们可以共享同一个游标。当应用程序在语句中使用文字标量替代绑定变量时就会导致一个游标共享的问题。如应用程序最终产生的语句只是在文字标量上有一些不同,甚至语句都是相同的。如,一个应用程序没有使用绑定变量,可以假设在不同的时间或不同的会话中有下面两个语句:INSERT INTO T VALUES(1, ‘foo", 4)INSERT INTO T VALUES(2, ‘bar", 7)因为这两个语句文本上并不相同,它们最终产生不同的游标。有几种情况下应用程序可能不会使用绑定变量:l 用文字标量很容易就写出一个SQL语句,特别是使用了一些工具l 老的Oracle关系数据库不支持绑定变量(至少是没有共享游标的好处,从Oracle7才开始使用它们),已有的应用程序要求作一些代码升级的工作。l 其他所有的数据库供应商都不支持绑定变量,即使有语法也不相同;因此,使用特定的Oracle语法/特性会使应用程序失去与其他数据的兼容性。l 如果一个语句使用绑定变量,那么它就一直使用相同的执行计划。如果不同的绑定变量会有不同的优化计划就可能产生问题,如,考虑下面的语句:SELECT * FROM T1, T2 WHERE (T1.N = 100) AND (T1.N1=T2.N2)SELECT * FROM T1, T2 WHERE (T1.N = 500) AND (T1.N1=T2.N2)根据值在字段N中的分布,两个语句可能有不同的优化计划。因此使用绑定变量:SELECT * FROM T1, T2 WHERE (T1.N = :X) AND (T1.N1=T2.N2)将会由于一些绑定变量的值导致低效的优化。这时可以强制使用文字标量代替绑定变量。概念在开始解决方案之前,这里先澄清一些基本概念。相似语句(Similar statements)如果任何两个语句只是文字标量不相同,可以认为它们是相似的。这纯粹是一个语义学上的标准。例如:以下的语句是相似的INSERT INTO T VALUES(1, ‘foo", 4)INSERT INTO T VALUES(2, ‘bar", 7)INSERT INTO T VALUES(5, ‘alpha", 11)INSERT INTO T VALUES(10, ‘kappa", 17)最优共享语句(Optimally sharable statements)相似语句可能有也可能没有同样的执行计划。例如,下面两个语句就有相同的执行计划:INSERT INTO T VALUES(1, ‘foo", 4)INSERT INTO T VALUES(2, ‘bar", 7)在本文中,这些语句叫做最优共享语句。因此:最优共享语句是具有相同最优计划的相似语句。同样也意味着最优共享语句可以共享相同的游标,而不会对执行成本有任何的影响。非最优化共享语句(Sub-optimally sharable statements)另一面,如下面两个语句:SELECT * FROM T1, T2 WHERE (T1.N = 100) AND (T1.N1 = T2.N2)SELECT * FROM T1, T2 WHERE (T1.N = 500) AND (T1.N1 = T2.N2)根据(N=100)和(N=500)的行数,值在字段N中的分布,在N, N1或N2上索引的可用性等情况,可能有不同的最优计划。例如,第一个语句可能使用一个在T1上的索引,而第二个语句可能是在T1上做全表扫描。或者第一个语句可能是作一个哈希连接而第二个语句可能是做一个嵌套循环连接。这些语句响应地可以当作是非最优化共享语句,因此:非最优化共享语句是可能具有不同最优计划的相似语句。同样也意味着如果非最优化共享语句共享同样的游标,那么在执行效率上可能会存在损失。最优共享与非最优共享语句最优共享和非最优共享语句的区别并不纯粹是在语义上的。它依赖于下面的因素:l 文字标量在语句中的位置(例如,是在VALUES子句中还是在WHERE子句中)l 可用的访问路径(例如,索引的存在)l 如果一个文字标量出现在一个包含字段的谓词中(如,N=100用到了在字段N上的统计值的可用性),则取决于数据分布(统计值)和它的可用性l 优化器的算法使用非共享语句因为使用同样的游标会产生不正确的结果,会出现相似语句不能共享同一个游标的情况。这些相似语句意味着不同的事情,或者在执行期间做了完全不同的事。下面的语句描述了这一点:SELECT * FROM T ORDER BY 1,4SELECT * FROM T ORDER BY 2,3在这个例子中,文字标量1,2,3和4指的是选择表项中的项目。这些语句叫做非共享语句。因此有:非共享语句是不能共享同样的执行计划的相似语句。这里最重要的一点就是:如果两个非共享语句共享同样的游标,它们其中一个就会得到错误的结果。解决方案这一节描述通过cursor_sharing参数所提供的解决方案概述新参数cursor_sharing只要有可能就允许相似语句共享游标。根据参数的值,相似语句可以被强制共享相同的游标(有可能会使用非最优计划),或者共享相同游标而不危及底层执行计划的安全。不管设置cursor_sharing为SIMILAR还是FORCE,Oracle都首先搜索完全相同的语句文本的游标。如果没有发现,Oracle搜索相似语句文本的游标。用法参数:cursor_sharing从Oracle 8i Release 2开始,一个新的动态参数cursor_sharing被引入。在8i中,参数可以有两个不同的值FORCE和EXACT。从9i开始,一个新的值SIMILAR被加入。默认值是EXACT。它只允许完全相同文本的语句共享一个游标。这是早期版本的行为。SIMILAR参数值使相似语句共享同样的游标,而不危机执行计划的安全。例如:只有最优共享语句共享游标。将参数值设为FORCE会强迫Oracle对相似语句共享游标,但存在非最优执行计划的风险,如,最优共享和非最优共享语句会共享同一个游标。只有在非最优执行计划的风险被共享游标的性能提高超过的时候,该参数才可以被设置为FORCE,例如:如果太多的非最优共享语句的硬解析导致了严重的性能问题。SQL语句一个新的标记CURSOR_SHARING_EXACT在被SQL语句中被用于在语句级别控制游标共享。这个标记类似于初始化参数cursor_sharing被设置为EXACT,并屏蔽了已经设定的初始化参数的值,也就是:它导致语句共享采用精确匹配构建的游标。ALTER SYSTEM 和 ALTER SESSION 命令允许新参数cursor_sharing的设置和改变。语法如下面的形式:ALTER SYSTEM SET cursor_sharing = {FORCE | SIMILAR | EXACT}ALTER SYSTEM SET cursor_sharing = {FORCE | SIMILAR | EXACT}动态视图下面的四个动态视图显示了绑定变量的信息:l GV$SQL_BIND_METADATAl V$SQL_BIND_METADATAl GV$SQL_BIND_DATAl V$SQL_BIND_DATA这些视图也包括了内部绑定变量的信息。内部绑定变量可以根据视图[G]V$SQL_BIND_DATA中的字段SHARED_FLAG2与用户绑定变量区分,内部绑定变量的标记值为256。只参看内部绑定变量的行,用户可以考虑下面的语句:SELECT * FROM V$SQL_BIND_DATA WHERE BITAND (SHARED_FLAG2, 256) =256主要利益与折衷考虑一个没有使用绑定变量的应用,该应用重复地使用相似语句,大多数的执行都将导致硬解析。一个不使用绑定变量的典型应用可能会有各种类型的语句:最优共享,非最优共享安和非共享。对于最优共享语句,共享游标明显是有好处;非共享语句不能共享同样的游标。对于非最优共享语句没有一个简单的答案:共享游标与获取最优计划的比较是硬解析的系统耗费与强制使用相同执行计划后的性能退化之间的折衷。因此,根据系统负载,应用特征,资源限制等,正确的答案是不同的。这也是Oracle 提供为cursor_sharing提供两个不同的值SIMILAR和FORCE,并把决定权留给用户的原因。SIMILAR是更保守的选择,它仅仅使最优可共享语句共享游标。采用FORCE,最优共享和非最优共享语句都被强制共享游标,结果便不可预测,因为游标可能被共享但执行计划的性能也降低了。因此,因为硬解析造成性能有非常大的影响并且非最优共享语句占非常大的百分比的情况下,使用FORCE是有意义的。另外一个考虑的方式是:在采用FORCE 之前先尝试SIMILAR。当cursor_sharing采用相似语句共享游标的时候,硬解析转换为软解析。注意,由于判断语句相似性的附加成本,软解析比已使用绑定变量的应用的软解析(用绑定变量在内部替换文字标量)花费要昂贵一些。但是,完全保存在CPU内部,内存和锁竞争任然需要考虑。对于cursor_sharing,Oracle任然首先搜索一个精确匹配。只有当一个完全相同文本语句的游标没有找到时,Oracle搜索一个相似语句的游标。这样做是为了确保当遇到相同的没有硬编码文字标量的SQL文本的时候,不会对性能有所影响。因为在寻找游标之前置换文字标量,其他的Oracle优化,像session_cached_cursors和cursor_space_for_time 可以方便地和cursor_sharing整合。例如,将cursor_sharing和session_cached_cursors设置为一个合理的值,在文字标量被内部绑定变量置换之后,相似语句就可以使用缓冲打开游标。主要好处的概要如下:l 应用程序不需要做改变l 对已经使用绑定变量的语句没有副作用l 使用SIMILAR,经常共享的游标不会影响执行计划l 作为最后的办法,所有的相似语句都可以用FORCE强制共享游标忠告混合语句(Mixed statements)混合语句是既有绑定变量也有硬编码文字标量的语句。如:INSERT INTO T VALUES(5, ‘alpha", :X)如果是使用Oracle7 OCI的客户端,混合的相似语句不会通过cursor_sharing共享游标;在更新的版本中可以共享游标(从Oracle8 OCI开始)。实际上,这也同样适用于在服务器上的PL/SQL存储过程的SQL语句,因为在服务器上的PL/SQL使用了较老的客户端接口。通过PL/SQL的静态SQLCursor_sharing对于在PL/SQL中的静态(嵌入)SQL没有任何影响。存储概要(Stored outlines)任何存储概要建立都没有将cursor_sharing设置为FORCE或SIMILAR,当cursor_sharing被设置时(FORCE或 SIMILAR)速度并不会有提升。那是因为存储概要被SQL文本索引,当前的cursor_sharing实现修改语句文本。为了使用带有游标共享的存储概要,它们必须使用create_stored_outlines参数重建(并且不要使用创建概要语句)。耗费(Overhead)使用FORCE或SIMILAR参数,搜索为相似语句创建的游标存在一个耗费。像前面提及的,这包括:l 用原始语句文本搜索游标l 用内部绑定变量替换文字标量,并且基于新文本的搜索当共享游标工作的时候,这个耗费并不重要,因为大量的硬解析会被花费很小的软解析替换。但是,当游标共享没有明显的增加的时候,这些耗费会对性能产生负面的影响。在三种情况下它会发生时:1. 应用程序没有使用绑定变量,发布相同的语句,并且没有相似语句如果应用程序一直用同样的文字标量硬编码执行同样的语句,它会发生。这样的应用程序默认使用软解析,并且设置游标共享为FORCE或SIMILAR,会使软解析更昂贵。针对这样一个应用的情况,有一个窍门可以使用:在共享池暖启动以后,也就是,在所有有相同文字标量的语句都被编译了以后,cursor_sharing可以被设置为FORCE或SIMILAR。这种情况下,Oralce会立刻发现哪些语句的游标,避免额外的消耗。如果在一个应用中,有一些语句使用同样的文字标量而有一些语句改变文字标量,这非常的有用。2. 应用程序发布不同结构的语句,因而没有任何相似语句这样的应用默认使用硬解析,设置cursor_sharing为FORCE或SIMILAR会使硬解析更昂贵一些。3. 没有使用绑定变量的应用,设置cursor_sharing为SIMILAR,大部分相似语句被次最优化共享这样的应用默认采用硬解析,将cursor_sharing设为FORCE,大量使用软解析。设置cursor_sharing为SIMILAR,将使硬解析更昂贵一些。使用FORCE使用FORCE可能会导致一个非常坏的执行计划被使用。在有些情况下,坏的执行计划和好的执行计划之间的差异是非常重要的,如,DSS环境。因此,Oralce不推荐在这种情况下使用FORCE。何时使用游标共享?这一段作一些关于使用游标共享的建议。使用cursor_sharing=SIMILAR像早先提及的,cursor_sharing并不会损害使用绑定变量编写的应用程序的性能。设置cursor_sharing为SIMILAR,在大多数情况下,提高没使用绑定变量的应用程序的性能(在前一段提及的两个情况例外)。因此,假如没有使用绑定变量的应用程序的性能问题,将 cursor_sharing设置为SIMILAR风险最小。应用中使用了绑定变量的部分继续共享游标,那些使用硬编码文字标量的部分从一些游标共享中获益。cursor_sharing=SIMILAR是否会提高应用程序性能依赖于下面问题的答案:l 性能低下是由于非常大量的硬解析造成的吗?这可以通过监控几个指标来判断,如硬解析的平均数,解析数/执行数,平均响应时间,会话的等待事件等等。l 在共享池中的使用硬编码文字标量的相似语句是否很多?可以通过动态视图v$sql或v$sqlarea查看。如果上面两个问题的答案都是肯定的,那么cursor_sharing很可能会提高性能。使用cursor_sharing=FORCE在下面的情况下可以考虑使用cursor_sharing=FORCE:l 次最优化共享语句的比率非常高,使SIMILAR的作用不大没有很轻松的方法找出次最优化语句的比率,除了测试所有的语句。另外一种方式是设置cursor_sharing=SIMILAR;如果硬解析是由于没有相似语句没有持续的共享游标,然后有许多次最优化语句,FORCE是唯一的解决方案。l 应用有硬编码文字标量,并且在执行时间上有一些退化,强迫相似语句使用相同游标当使用SIMIlAR没有帮助的时候,考虑FORCE作为最后的手段是有用处的。何时应该不使用cursor_sharing?早先提及的(在“忠告”一节中),有三种情况,使用cursor_sharing会有坏处。那些情况下,没有任何可以使用某些cursor_sharing的值共享游标的相似语句,并且使用它只会增加解析的耗费。另一个要记住的事情是:cursor_sharing为面对一个使用了文字标量的应用程序的DBA提供了一个解决方案。但是,它并不是替代使用绑定变量编写应用程序,也可以采用Oracle提供的其他优化。例如,应用程序可以保持频繁执行的解析语句在打开的游标中,并且在需要的时候,只是执行它们。这样的优化是基于深度的应用程序知识,并且不能被cursor_sharing匹配。结论cursor_sharing的使用可以解决有硬解析引发的性能问题,假如应用程序没有使用绑定变量。基于应用和数据库特性以及系统资源,参数应该被明智地设置。附录:一些性能测量这一段描述了用Oracle 8i Release 2做的一个试验,验证cursor_sharing。描述这个试验的目的是做一个基本的验证。服务器的最大吞吐量被一些客户端重复地发布一个单一语句测量。试验做了三次,采用下面的特性:1. 只使用绑定变量有两个目的:建立一个基线;确保每个语句不会因为使用cursor_sharing影响性能。2. 只使用文字标量,每个文字标量都有不同的文字发布相似语句,期望从cursor_sharing获取最大的收益。3. 每个文字标量都使用相同的文字并不期望从cursor_sharing获取收益,相反,期望性能恶化。理由是测试cursor_sharing软解析的耗费。在每种情况下只测量解析吞吐量(每秒钟的解析量)。结果下面是测试结果:Typecursor_sharing=EXACTcursor_sharing=FORCEBinds only26502650Similar statements86025001 statement with literalsg33002600Oracle 8.1.7 采用cursor_sharing的解析吞吐量(解析数/秒)
2023-07-11 07:15:191

妖股如何洗盘?

要我洗盘是所有洗盘中最为猛烈的。要是我们能看到一只正在洗盘的妖股,必定会格外的关注。 妖股洗盘的动作非常的剧烈,伴随着高振幅,高换手。我们说平常的庄股洗盘会出现缩量的情况。然而妖股洗盘过程中很难出现非常低迷的成交,就算是缩量也是量很高。 确定性比较高的洗盘,毕竟是高点,继续往上走,低点也往上走。为了保持市场的活跃度,所出现的k线必定是阳线多,阴线少。当然这些都是表面上的特征。我们说一下更加具体的特征。 首先我们能看到持续的大单。这个会集合表现在换手率上,也就是我们说的量能上。在妖股洗盘的过程中。主力资金通过这种高政府高亮的手法,将筹码进行转移。要保证每时每刻。都会有获利盘抛出,同时有跟风盘进入。他这样的目的有两个,一个是尽可能的增加市场总体的成本。还有就是如果有可能的话,就尽可能的降低自己本身的成本。一般来讲,吃货的量不可过多也不可过少。要根据自己的能量来。当然有一些实力较强的资金会到这个时候大口的吃货 妖股洗盘其实说到底没有非常大的技巧。因为这种炒作,一个是叠加市场的热度,另外一个就是资金本身的资金量。 看到其他答案说日线震荡洗盘,个人觉得在妖股中基本不存在,妖股的日线很少会出现连续震荡,洗盘往往在分时图上就完成了,周期非常短,一般不会超过两天,洗盘伴随的是分时图大开大合,成交天量,换手率暴增,这种洗盘方式是非常暴力的。 原因在于,妖股并非由单个庄家坐庄,而是靠游资合力造妖,持股周期短,盘中的巨幅波动是资金大分歧的结果,因为大家都知道,妖股本身就是一种纯粹的炒作,筹码博弈,风险都明白,一旦风向不对都会夺命而逃,换其他的游资接力,导致大分歧。 每一次大分歧看着都像是顶部特征,说它是洗盘,都是事后定的,因为在当下,说不清楚明天会有多少资金来接力,会不会继续拉,就是击鼓传花,不知道现在是不是最后一棒。 举个例子,近期的妖股星期六,看下是如何洗盘的,再强调一次,这里说的洗盘只是事后判断,不要把这种方式往其他股票上面套,幻想成为星期六,大部分时候,这种洗盘实际上是见顶信号。 到目前为止,星期六已经出现过三次暴力洗盘,第一次假阴线,第二次真阴线,第三次假阳线,图中圈定的K线。 第一次洗盘这根K线,正式洗盘从涨停板闪崩开始,股价快速回落到零轴附近,震荡之后继续下跌,午后资金回补,最高拉升至8%,之后再回落,完成洗盘。 股价上下波动幅度非常大,当天换手率达到21.08%,看似不高,但5%以上大股东持股达到52.48%,实际换手率达到45.5%,对于一只非次新的股票来说,已经接近天量换手,这种股票一般只会有两种结果,要么暴涨,要么暴跌。 妖股毕竟是妖股,市场号召力远胜过其他,第二天反包再度走向一致,回头看前一天就是非常完美的洗盘,大换手抬高了持仓成本,往上拉抛压变小,快速突破成交密集区有利加速,直到四天之后获利盘累积,再度出现第一次相仿的洗盘,周期重演。 放大之后的K线,单看其中一次,每次洗盘看着都像见顶,之所以没能倒台,就在于市场号召力强,有持续不断的资金接盘,所以说妖股的生命力是非常顽强的,只要继续杀跌,还会有资金尝试回补,妖股真正的顶部,可能是双顶,也可能是震荡的复合顶,但不会是尖顶,从东方通信、特力A都看得出来。 妖股并非一气呵成,而是逐渐升温,当温度达到顶点,突然降到冰点是不可能的,热度的下降一定会有一个过程,从 历史 上的妖股看,股价回归是一个漫长的过程,阴跌可能会持续大半年,中间还会有反复,是不是来个涨停。 妖股看似波动非常大,风险极高,但从市场承接力度,号召力看,其顽强的生命力,反而相对比较安全,这也是游资喜欢接力的原因。 以上就是我的看法,仅供大家参考,如有商榷之处,欢迎大家评论区讨论。 最后还是要提醒一句, 妖股的波动不是人人都能承受的,大多数还是看看就好,做股票适合自己的最好,不适合硬往里面套,容易适得其反。 妖股、庄股、洗盘,不同的概念,要分清楚。 何谓妖股,最近几年流行的术语,短线游资出现的多,有7板成妖的说法。妖股是走出来之后才叫妖股,没有起涨前,只能算是一个普通股。 妖股的形成主要有两种形式。 第一类,有庄家建仓的股票,借利好拉升吸引短线资金接力,成为妖股。那么这类股票,洗盘的工作是在拉升前,拉升之后很少出现洗盘行为,最多是震仓。而游资接力后,就更不存在洗盘了,因为各路资金,就是一个博弈的结果。 第二类,突发利好,股票遭到疯抢,连续涨停,形成的妖股。这类股票前期没有主力资金,既然没有,也不存在洗盘的情况,完全是市场行为引起的股价波动,不要把任何股票的震荡都归咎于庄家洗盘,这种思维是错误的。 散户容易有上帝式思维,总是认为庄家能控制一切,庄家也是人,只要是人就会有弱点,做盘股票更是有很多可以攻击的地方。 一个强大的散户,庄家是拿你没任何办法的。 妖股,一般是几个月翻翻一倍以上的股票。资金介入一只股票后,会尽量多的拿足筹码,然后启动上升走势。 操作过股票的朋友都知道,当一只股票要拉升的时候,最怕的就是散户的不坚定导致拉升障碍。 所以一般拉抬之前,会用一些骗线的手法,洗出去一部分短线客,避免未来操作的阻力。 那么他们一般会如何洗盘呢?我结合自己经验和大家分享一下,欢迎志同道合的人一起补充,一起探讨。 1、洗盘之前的建仓 今年比较妖的一只股票,应该是002600的领益智造了。我们拿他的操作进行分享。 任何一只股票,拉升之前都需要建仓,大资金操作来说都是下跌中进货。 该股跌到 历史 最低点2.32的时候,资金开始慢慢介入。我们看一下这个股的操作,2.32到12块钱用了一年,涨幅差不多有5倍之多。这样的股不是妖股,那么什么是妖股呢? 最下面的黄框框,就是资金介入的时候,也就是我们说的建仓时期。用了多久呢?大约有两个月,随后股价脱离成本,向第一个高点迈进。拉升后,第一次洗盘落在了5.8-7.1之间。 2、洗盘开始 操盘股票,其实收割散户倒是其次,重要的是关键点位散户不要捣乱。 所以股价拉出筹码成本区之后,争取在第一个平台把一些不坚定的筹码清理出去。主要的手法是一些均线上下跳动,这个过程也就是我们说的骗线。 散户的技术派多数是书本而来,弄一些似是而非的东西忽悠自己,主力就会利用这些把大家洗出去。 我标注的黄色区域,就是拉抬后的第一个平台,主力在这上下操作,股价一会跌破5天线,一会跌破10天线,一会跌破20天线。 总之就是围绕黄框框区域运动,各种均线都敢破,此操盘手不为不老辣。这段时间的散户,从成交量看被吓走了不少。操作很成功,你看那均线的缠绕,格外精彩一团乱麻。那里面埋藏的是很多散户的现金,主力都便宜的换成了筹码。 这个过程,用了5个月时间完成。 3、拉抬过程中出货 在一个区间,折腾5个月,一般散户真的耗不起。最后乖乖缴枪,但是随后的走势,重新让散户注意。 8月16日,忽然一根阳线突破了整理区,向更高点迈进。 一般散户看到这个开始捶胸顿足的后悔,一边惊叹又被主力资金洗出来了,埋怨自己的技术不成熟。 此时主力资金筹码再次收集完毕,这个过程就是边拉抬边出货。 此时他们要做的是,把筹码送给技术派高手,个股操作完毕。 随着股价从7-12的过程,主力资金完成了出货,K线形态走的也不如第一波坚决。 一个股票的建仓,洗盘、拉抬,筹码派发就此结束。当然我介绍的都是技术操作,同时还会有一些利好配合。比如什么基本面变化啊,一些其他利好预期啊,基本都是配合股价上涨的过程。 以上,就是我的介绍。 妖股就是我们大家熟知的强庄股 。我们大家都知道,强庄股整个运行方式要经过吸筹,洗盘,拉升,派发这几个阶段,如何发现洗盘的庄股,将决定你未来能否吃到拉升的这一波大利润的关键,下面介绍一些识别庄股洗盘的方法,便于大家区分识别。
2023-07-11 07:15:381

江粉磁材是创业板吗

不是创业板,是中小板。公司名称:广东江粉磁材股份有限公司英文名称:Jpmf Guangdong Co., Ltd.A股代码:002600 A股简称:江粉磁材证券类别:深交所中小板A股 所属行业:材料行业
2023-07-11 07:15:484

冷益制造股票是什么扳块?

是领益智造!属于什么板块!现在的股票属于太多不下20几个板块!稀土,超清,小米。。。。。这票还行!不过不是庄家控股了!!
2023-07-11 07:16:062

长城哈弗H5柴油发动机,安全气囊报故障码B002600 驾驶员正向气囊线路开路,怎么解决

用诊断电脑读取安全气囊数据流,观察是否正常显示气囊点火器阻值2~3Ω,无更换气囊。
2023-07-11 07:16:291

002600江粉磁材股还会继续跌吗

这只股票质地很好,现在大盘反弹,短期内将维持强势(个人观点,不做投资建议)
2023-07-11 07:16:401

请问一下苹果概念股有什么?

1、一般有:恒铭达(002947)、领益智造(002600)、歌尔股份(002241)、欧菲光(002456)、国光电器(002045)、长信科技(300088)、欣旺达(300207)、赛腾股份(603283)、联创电子(002036)、美盈森(002303)等;2、可以通过同花顺财经查询相关概念股。更多关于苹果概念股有哪些,进入:https://m.abcgonglue.com/ask/acf76f1615839672.html?zd查看更多内容
2023-07-11 07:17:121

维罗生态砖价格大全 维罗生态砖怎么样

  大多数人在选购瓷砖之前都是对瓷砖没有多大了解的,要么就直接听朋友推荐,要么就只听销售人员的意见,最好买回去又感觉不太喜欢,其实在选购瓷砖的时候要做很多功课的,比如了解有哪些品牌值得信赖、要知道自己喜欢什么风格、平方数是多少、要先选墙砖再选地砖等等,至于在品牌方面,大家对维罗生态砖比较熟悉的,那么维罗生态砖价格情况是怎样的?维罗生态砖究竟好在哪里?下面就跟小编一起来了解下。  维罗生态砖怎么样?  维罗生态砖,就是采用先进的生态技术工艺,对含有锰、铝、锌、铜等成分的天然矿物质进行高度的提纯,加工后与陶瓷原料混合,经1280度以上高温长时间烧制成的瓷砖产品。这些砖品通过在原料中加入金属盐及其氧化物等天然矿物质,改变了产品的分子结构,从而使生产出来的比普通砖放射性更低、硬度更高、光洁度更好、抗污能力更强的维罗生态砖。  使用研磨目数在150以上的颗粒为胚体原料,实现电脑随机3D布料制胚,真石化垂直渗透印花,还原石层肌理。再经高温高压煅烧,并抛光而成,实现了抛光砖石化的跨越。犹如石材表面,不含杂色,布色均匀,色相柔和,过度自然,浓淡相宜。无论色感、质感、触感还是砖面的丰富性、立体性及通透性,逼真近似优质天然石材的立体感。配以维罗生态砖专有的胜洁技术,使得生态石系列硬度高、光泽度高、低吸水率、耐酸碱腐蚀,且抗污能力更强,更易清洁等优良特性。    维罗生态砖价格:  名称型号规格价格  维罗生态砖KLP002地面抛光砖  KLP002600*600mm123.70元/片  维罗生态砖KLP001地面抛光砖  KLP001800*800mm263.56元/块  维罗生态砖RP104地面釉面砖  RP1041000*1000mm1034.66元/块  维罗生态砖KLP001地面抛光砖  KLP001600*600m123.70元/片  维罗生态砖RP319地面釉面砖  RP319800*800mm255.76元/块  维罗生态砖RP319地面釉面砖  RP319800*800mm255.76元/块  维罗生态砖AMP001地面抛光砖  AMP001800*800mm243.80元/片  维罗生态砖KLP002地面抛光砖  KLP002800*800mm263.56元/块  维罗生态砖兰乔圣菲系列RP104全抛釉面砖  RP1041000*1000mm1034.66元/块  维罗生态砖亚马逊系列AMP005地面抛光砖  AMP005800*800mm243.80元/块  维罗生态砖特点  1、超微分、微粉颗粒、垂直渗透印花三位一体真石化无生产技术。  2、维罗生态砖独家的环保低碳高能煅烧工艺1280度低碳高温煅烧。  3、维罗生态砖纳米级C+圣洁技术。    以上就是维罗生态砖价格表大全及维罗生态砖详细介绍了,在认准品牌后,也要学会如何辨别瓷砖的好坏,现在市面上瓷砖质量参差不齐,不良商家为了赚更多的钱,往往会弄些劣质瓷砖来混淆消费者的眼睛,因此要学会如何辨别方法,例如看瓷砖表面是否有黑点、气泡等,或者掂分量,试瓷砖的手感,同一规格产品,质量好,密度高的砖手感都比较沉,反之,质次的产品手感较轻。
2023-07-11 07:17:441

前海战略会成为南海争夺的前哨吗?

市场人士都在为中央的“前海战略”鼓舞不已,但是,很少会有人思考这样一个问题,为什么中央要推出一个“前海战略”,“前海战略”反映了中央决策层怎样的战略思维? 在回答这个问题之前,我首先要告诉你的是,“前海战略”更多体现的是一个战略命题,而不仅仅只是一个经济现象:在“前海战略”范围内内,传统的珠三角经济区域,北部湾经济区域,甚至是台海经济区域被巧妙的连成了一个整体,政策上和经济上的“合力”有利于打造一个类似于美国东海岸沿线那样的经济战略集群。 我们要尤为注意一点,“前海战略”更多是为了“对接”用的,而不是像市场人士所想象的那样,成为在南海前沿“战略制衡”菲律宾等国的“战略利器”。中央决策层的目的很明确,那就是将“前海战略”区域发展成为和东盟直接“经济对接”的战略桥头堡。“前海战略”是标志,而不仅仅是“政治过客” 对于“前海战略”的理解可能集中在两个层面:第一个层面和市场的普遍认识一致,即“前海战略”是中央为了应对南海危机而做出的经济应对。未来,中国为了巩固自己在南海上的主权地位,必定会在南海上开发更多的油气资源和旅游资源,这就需要“前海战略”所在区域的地方政府给予南海资源开发更多的政策便利和经济便利。因此,一个“前海战略”可以很好的统筹地方政府的政策步调的同时,可以将区域内的经济资源发挥到最大的集群效益。 最为重要的战略层面在于,“前海战略”更类似于天津滨海新区那样的政策和经济的集合体,“前海战略”区域将更多承载未来中央“新政策试验田”的重任,这重点体现在金融政策创新,中国人民币国际化进程中的离岸市场的建设经验的积累上。相比于经济上的利好,中央更关注中国未来金融利率改革和汇率改革这个“双头鹰”的“健康问题”。为什么不是在温州,也不是在上海?“前海战略”区域和香港以及东盟地区在地理上接近的优势,可以保证中国的金融改革进程在方向上“由外到内”的顺利进行,在这期间,“前海战略”区域所能提供的经济资源和地缘政治资源不是长三角经济区域所能提供的。 这让人很容易联想到山东省和吉林省正在建立的经济战略区域,该经济战略区域一方面体现了地缘政治特征,比如中国在朝鲜的经济投资;另一方面,中日韩FTA也需要一个地区性的连接纽带。相比之下,“前海战略”区域无论是在地缘政治上,还是在经济战略基础上,都极大的优于山东省和吉林省正在建立的经济战略区域。扩大“内需市场”,金融平台必不可少 在以往,市场普遍认为,扩大内需和家电补贴政策和汽车补贴政策可以划上等号,事实上,这样的看法非常片面,这样的政策也不会持久。扩大内需的前提是,中国民众的消费能力要得到全面的释放,这就意味着,普通居民在银行的存款欲望会减小,而对于金融投资理财产品的渴望会提升,当居民的钱能够更容易增值的前提下,居民的购物欲望才会提升。 需要补充一点的是,内需的提升也意味着国外更廉价优质的商品,会以更优惠的价格出现在中国消费者面前,这无疑需要人民币的升值作为支撑,提高人民币的升值空间才能为中国的消费者提供更大的国际购买力。以上的这些均需要金融体系内部改革的作为支撑,中国的金融系统要能够为居民的社保以及医保提供更完善的服务平台,在此基础上,中国的金融系统要更为便利的和国际金融结构对接,人民币直接结算的机会增加,人民币在国际市场上的流通更为便利,中国对于人民币和外汇资本的管制更为宽松合理。 很大程度上,在人口红利被挖掘殆尽的时候,中国未来经济结构调整的方向除了产业升级之外,将更多体现金融改革的身影,金融改革也将为产业升级提供更好的资金平台。 不要小瞧了“前海战略”,也不要小瞧了中央的战略思维,在这盘战略大旗中,金融改革和内需提振将是2012甚至是以后相当时段内,中国经济的“重头戏”…… 相关阅读: 七公司涉及小额贷款 关于珠三角金改的具体方向和措施,广东省副省长陈云贤在日前召开的广东省金融工作会议上透露,相比温州的金改方案,珠三角金融改革创新综合试验区政策“内容更全面、覆盖面更广、表述更具体”。 从温州金改市场炒作的规律来看,第一轮市场炒作的重点是小额贷款公司,金改区域内,参股小额贷款公司的上市公司股价均有大幅上升,因此,最先关注的仍将是广州、深圳、珠海以及佛山、东莞等地参股小额贷款公司的上市公司。 广东省金融办的数据显示,截至2011年末,广东省小额贷款公司达到196家,注册资本193亿元,累计投放贷款744亿元,贷款余额186亿元。 统计发现,广东省涉及小贷概念股的上市公司共计7家,分别是怡亚通(002183.SZ)、世联地产(002285.SZ)、东莞控股(000828.SZ)、金发科技(600143.SH)、中炬高新(600872.SH)、江粉磁材(002600.SZ)和深赛格(000058.SZ)。 七家小额贷款公司2011年合计盈利9450.84万元,其中,怡亚通持股100%的深圳市宇商小额贷款有限公司去年盈利最多,达到2571.43万元。其次是世联地产持股29%的深圳市世联小额贷款有限公司,去年净利润为2387.47万元;另外,东莞控股参股20%的东莞市松山湖小额贷款股份有限公司(下称松山湖小贷公司)去年净利润为1804.07万元,金发科技参股20%的广州萝岗金发小额贷款股份有限公司去年净利润为1511.71万元。 但是,唯一出现亏损的是深赛格持股51.71%的深圳市赛格小额贷款有限公司,去年净利润为-163.78万元。 “珠三角金改股”价值几何 那么,“珠三角金改股”的投资价值究竟有多大呢? 借助此次《珠三角金改方案》获批的政策优势,广东将全力打造广州南沙、深圳前海和珠海横琴三个金融创新和开放平台。因此广东前海、横琴、南沙将直接受益,相关上市公司存在机会。特别是拥有金融及小额贷款业务的上市公司有望受益。 除去参股小贷公司以外,涉及金融产业最多的还数东莞控股。 东莞控股2011年年报显示,除去持有松山湖小贷公司以外,其还持有东莞证券20%股权、东莞信托6%股权、东莞长安村镇银行5%股权。 丽珠集团(000513.SZ)还持有1.5065%珠海华润银行的股权,以及0.0004%的广东发展银行的股权。 《珠三角金改方案》尚未在市场上获得共鸣,“小贷概念股”也并没有受到市场的追捧。 “丽珠集团上涨和‘金改股"基本没关系,何况其持有两家银行的股权又非常之少。”上海一位基金经理坦言,尽管《珠三角金改方案》对广东地区金融机构是利好,也间接影响参股金融机构的企业,“但是真正实施起来还需很多时间,究竟能够带来多大的效益都是未知数。何况,前期的‘温州金改股"炒作已经路人皆知,因此,‘珠三角金改股"不会出现之前的爆炒效应。”
2023-07-11 07:18:121

电脑进入系统后蓝屏,出现如下错误提示,该如何解决?

电脑开机显示WINDOWDS错误恢复画面 ,然后蓝屏,这很可能是系统文件丢失或者损坏,导致无法引导系统,并伴有蓝屏,一般遇上这样的现象可以按下面的方法处理:(1)首先尝试重启电脑,马上按下F8键,进入错误恢复画面,选择最后一次配置,看能不能进系统,如果能进,一般系统会自动修复一些系统的小问题。如果不能,再选择安全模式,能进在安全模式下全盘杀毒,一般就会好的,如果安全模式也不能进,在这个画面反复的重启,并伴有蓝屏,哪代表系统的启动文件被破坏或者系统文件被破坏或者丢失,无法引导系统,一般遇上这样的情况,只能一键还原或者用光盘或者U盘重装系统。(2)用GHOST光盘安装系统的方法如下:先要到软件店或者电脑店买一张带PE的GHOST WIN7 SP1或者GHOST WINXP版光盘,然后按下面的步骤来做:(这里以WIN7 为例,XP的过程也是一样)第一步:开机按下F12键,进入快速启动菜单,选择DVDROM启动,也可以开机按下DEL,进入BIOS中,设好光驱为启动,(找到BOOT----boot settings---boot device priority--enter(确定)--1ST BOOT DEVICE--DVDROM--enter(确定)))F10保存。第一个就是光驱启动第二步:把光盘放入光驱,启动电脑,进入到一个启动菜单界面,选择WINPE(WIN2003或者 WIN8PE)进入,然后打开“我的电脑”或者“计算机”,找到C盘,然后格式化C盘,(文件类型选择NTFS ,快速格式化)确定即可。第三步:返回主菜单,只要点1或A就搞定了,它会自动安装系统和驱动。第四步:重启后,很多应用软件会自动安装,(当然不想要,可以卸载或者不要勾选安装),如果是纯净版的,有的就要手动安装驱动,然后想要什么软件上网下载什么安装。最后重启,安装成功。第五步:用GHOST版光盘上的一键还原做好备份(也可以手动GHOST),就可以了。
2023-07-11 07:18:391

在main之前,IAR都做了啥

最近要在Cortex-M3上写一个简单的操作系统,打算使用IAR,为了写好启动代码,花了一些时间了解了IAR在main()以前做了些什么事。首先系统复位时,Cortex-M3从代码区偏移0x0000"0000处获取栈顶地址,用来初始化MSP寄存器的值。接下来从代码区偏移0x0000"0004获取第一个指令的跳转地址。这些地址,是CM3要求放置中断向量表的地方。这里是一个程序的启动区的反汇编:__vector_table: 08004000 2600 08004002 2000 08004004 7E1D 08004006 0800 这个程序是由IAP程序来启动的,IAP程序获取0x0800"4000处的MSP值(0x20002600),并设置为MSP的值,即主堆栈最大范围是0x2000"0000~0x2000"25FF。接下来IAP程序获取0x0800"4004处的Reset_Handler的地址(0x0800"7E1D),并跳转到Reset_Handler()执行。IAP在这里完全是模仿了Cortex-M3的复位序列,也就是说,在没有IAP的系统上,CM3只能从0x0800"0000获取MSP,从0x0800"0004获取第一条指令所处地址。而IAP就存在在0x0800"0000这个地址上,IAP的启动,已经消耗掉了这个复位序列,所以IAP要启动UserApp程序的时候,也是完全模仿Cortex-M3的复位序列的。接下来我们看看复位后第一句指令——Reset_Handler()函数里有什么。若我们使用的是ST公司标准外设库,那么已经有了现成的Reset_Handler,不过他是弱定义——PUBWEAK,可以被我们重写的同名函数覆盖。一般来说,我们使用的都是ST提供的Reset_Handler,在V3.4版本的库中,可以在startup_stm32f10x_xx.s中找到这个函数: PUBWEAK Reset_Handler SECTION .text:CODE:REORDER(2)Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, =__iar_program_start BX R0看来ST没有做太多的事,他只调用了自家库提供的SystemInit函数进行系统时钟、Flash读取的初始化,并把大权交给了__iar_program_start这个IAR提供的“内部函数”了,我们就跟紧这个__iar_program_start跳转,看看IAR做了什么,上面一段代码的反汇编如下: Reset_Handler:__iar_section$$root: 08007E1C 4801 LDR R0, [PC, #0x4]; LDR R0, =SystemInit 08007E1E 4780 BLX R0;BLX R0 08007E20 4801 LDR R0, [PC, #0x4];LDR R0, =__iar_program_start 08007E22 4700 BX R0;BX R0 08007E24 6C69 08007E26 0800 08007E28 7D8D 08007E2A 0800 细心的观众会发现地址是0x0800"7E1C,比我们查到的0x0800"7E1D差了1,这是ARM家族的遗留问题,因为ARM处理器的指令至少是半字对齐的(16位THUMB指令集 or 32位ARM指令集),所以PC指针的LSB是常为0的,为了充分利用寄存器,ARM公司给PC的LSB了一个重要的使命,那就是在执行分支跳转时,PC的LSB=1,表示使用THUMB模式,LSB=0,表示使用ARM模式,但在最新的Cortex-M3内核上,只使用了THUMB-2指令集挑大梁,所以这一位要常保持1,所以我们查到的地址是0x0800"7E1D(C=1100,D=1101),放心,我们的CM3内核会忽略掉LSB(除非为0,那么会引起一个fault),从而正确跳转到0x0800"7E1C。从0x0800"7E20处的加载指令,我们可以算出__iar_program_start所处的位置,就是当前PC指针(0x0800"7E24),再加上4,即0x0800"7E28处的所指向的地址——0x0800"7D8D(0x0800"7D8C),我们跟紧着跳转,__iar_program_start果然在这里:__iar_program_start: 08007D8C F000F88C BL __low_level_init 08007D90 2800 CMP R0, #0x0 08007D92 D001 BEQ __iar_init$$done 08007D94 F7FFFFDE BL __iar_data_init2 08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main我们看到IAR提供了__low_level_init这个函数进行了“底层”的初始化,进一步跟踪,我们可以查到__low_level_init这个函数做了些什么,不是不是我们想象中的不可告人。__low_level_init: 08007EA8 2001 MOVS R0, #0x1 08007EAA 4770 BX LR__low_level_init出乎想象的简单,只是往R0寄存器写入了1,就立即执行"BX LR"回到调用处了,接下来,__iar_program_start检查了R0是否为0,为0,则执行__iar_init$$done,若不是0,就执行__iar_data_init2。__iar_init$$done这个函数很简单,只有2句话,第一句是把R0清零,第二句就直接"BL main",跳转到main()函数了。不过既然__low_level_init已经往R0写入了1,那么我们还是得走下远路——看看__iar_data_init2做了些什么,虽然距离main只有一步之遥,不过这中间隐藏了编译器的思想,我们得耐心看下去。__iar_data_init2: 08007D54 B510 PUSH {R4,LR} 08007D56 4804 LDR R0, [PC, #0x10] 08007D58 4C04 LDR R4, [PC, #0x10] 08007D5A E002 B 0x8007D62 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4 08007D64 D1FA BNE 0x8007D5C 08007D66 BD10 POP {R4,PC} 08007D68 7C78 08007D6A 0800 08007D6C 7C9C 08007D6E 0800 看来IAR迟迟不执行main()函数,就是为了执行__iar_data_init2,我们来分析分析IAR都干了些什么坏事~首先压R4,LR入栈,然后加载0x0800"7C78至R0,0x0800"7C9C至R4,马上跳转到0x0800"7D62执行R0,R4的比较,结果若是相等,则弹出R4,PC,然后立即进入main()。不过IAR请君入瓮是自不会那么快放我们出来的——结果不相等,跳转到0x0800"7D5C执行,在这里,把R0指向的地址——0x0800"7C78中的值——0x0800"7D71加载到R1,并且R0中的值自加4,更新为0x0800"7C7C,并跳转到R1指向的地址处执行,这里是另一个IAR函数:__iar_zero_init2:__iar_zero_init2: 08007D70 2300 MOVS R3, #0x0 08007D72 E005 B 0x8007D80 08007D74 F8501B04 LDR R1, [R0], #0x4 08007D78 F8413B04 STR R3, [R1], #0x4 08007D7C 1F12 SUBS R2, R2, #0x4 08007D7E D1FB BNE 0x8007D78 08007D80 F8502B04 LDR R2, [R0], #0x4 08007D84 2A00 CMP R2, #0x0 08007D86 D1F5 BNE 0x8007D74 08007D88 4770 BX LR 08007D8A 0000 MOVS R0, R0__iar_data_init2还没执行完毕,就跳转到了这个__iar_zero_inti2,且看我们慢慢分析这个帮凶——__iar_zero_inti2做了什么。__iar_zero_inti2将R3寄存器清零,立即跳转到0x0800"7D80执行"LDR R2, [R0], #0x4",这句指令与刚才在__iar_data_init2见到的"LDR R1, [R0], #0x4"很类似,都为“后索引”。这回,将R0指向的地址——0x0800"7C7C中的值——0x0000"02F4加载到R2寄存器,然后R0中的值自加4,更新为0x0800"7C80。接下来的指令检查了R2是否为0,显然这个函数没那么简单想放我我们,R2的值为2F4,我们又被带到了0x0800"7D74处,随后4条指令做了如下的事情:1、将R0指向的地址——0x0800"7C80中的值——0x2000"27D4加载到R1寄存器,然后R0中的值自加4,更新为0x0800"7C84。2、将R1指向的地址——0x2000"27D4中的值——改写为R3寄存器的值——0,然后R1中的值自加4,更新为0x2000"27D8。3、R2自减44、检查R2是否为0,不为0,跳转到第二条执行。不为,则执行下一条。这简直就是一个循环!——C语言的循环for(r2=0x2F4;r2-=4;r!=0){...},我们看看循环中做了什么。第一条指令把一个地址加载到了R1——0x2000"27D4 是一个RAM地址,以这个为起点,在循环中,对长度为2F4的RAM空间进行了清零的操作。那为什么IAR要做这个事情呢?消除什么记录么?用Jlink查看这片内存区域,可以发现这片区域是我们定义的全局变量的所在地。也就是说,IAR在每次系统复位后,都会自动将我们定义的全局变量清零0。清零完毕后,接下来的指令"LDR R2, [R0], #0x4"将R0指向的地址——0x0800"7C84中的值——0加载到R2寄存器,然后R0中的值自加4,更新为0x0800"7C88。随后检查R2是否为0,这里R2为0,执行"BX LR"返回到__iar_data_init2函数,若是不为0,我们可以发现又会跳转至“4指令”处进行一个循环清零的操作。读到这里,我们应该可以猜到IAR的意图了:__iar_data_init2一开始加载了0x0800"7C78至R0,0x0800"7C9C至R4,[R0,R4]就是一段启动代码区,在这个区域内保存了要“处理”的所有地址与信息——执行的函数地址或者参数,实际上,这片区域也有一个名字,叫做:Region$$Table$$Base。在这个区域内,程序以R0为索引,R4为上限,当R0=R4,__iar_data_init2执行完毕,跳转至main()函数。好了,保持我们这个猜想,继续跟踪我们的PC指针——我们回到了__iar_data_init2函数中,第一件事就是比较R0,R4的值,可惜的是,仍然不相等,我们又被带到了0x0800"7D5C,至此,我们应该能看出这是一个__iar_data_init2的“主循环”,这也验证了我们对IAR意图的猜想~ __iar_data_init2中的“主循环”: 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4我们可以等价写为:for(r0=0x0800"7C78,r4=0x0800"7C9C;r0!=r4;r0+=4){...}此时,我们的R0为0x0800"7C88,经过“指令1”,R0变为0x0800"7C8C,R1为0x0800"7C55。我们来看看,7C55处,IAR又要执行何种操作。__iar_copy_init2: 08007C54 B418 PUSH {R3,R4} 08007C56 E009 B 0x8007C6C 08007C58 F8501B04 LDR R1, [R0], #0x4 08007C5C F8502B04 LDR R2, [R0], #0x4 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60 08007C6C F8503B04 LDR R3, [R0], #0x4 08007C70 2B00 CMP R3, #0x0 08007C72 D1F1 BNE 0x8007C58 08007C74 BC12 POP {R1,R4} 08007C76 4770 BX LR这是一个名为__iar_copy_init2的函数,他执行了什么"copy"操作呢?首先压R3,R4入栈,然后跳转到0x0800"7C6C,从R0——Region$$Table$$Base中取出参数0x238放入R3,接下来的指令大家应该都熟悉了,0x238不为0,所以我们被带至7C58处,再次从Region$$Table$$Base中取出参数0x0800"7F14放入R1,从Region$$Table$$Base取出参数0x2000"2AC8放入R2处。细心的观众应该能察觉这和__iar_zero_init2中取参数的几乎一样:先取出大小,随后取出了地址——只不过这里多出了1个地址,没错这就是"copy",随后的指令 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60则是另一个“4指令”,指令1将R1指向地址的数据读到R4,指令2将R2指向地址的数据改写为R4的数据,指令3、4是完成一个循环。说到这里大家都应该明白了——这就是一个"copy"的操作,从Flash地址0x0800"7F14起,将长度0x238的数据拷贝到RAM地址0x2000"2AC8中。通过Jlink,我们可以看到这片区域是我们定义的并且已初始化的全局变量。也就是说,每次复位后,IAR在此处进行全局变量的初始化。在这“4指令”执行完毕后,再次从Region$$Table$$Base中取出参数,为0,比较之后条件符合,函数返回__iar_data_init2。此时的R0已经为0x0800"7C9C与R4相等,__iar_data_init2终于完成它的使命。08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main将R0清零以后,IAR放弃主动权,把PC指针交给了用户程序的入口——main()。但请注意,这里使用的是BL指令进行main跳转,也就是说,main函数只是IAR手中的一个子程序,若是main函数执行到了结尾,接下来则会执行exit等IAR提供的“退出”函数。这些函数,等待下回分解~总之,IAR在启动main()函数以前,执行了Reset_Handler,调用SystemInit()(ST库提供)进行时钟,Flash读取初始化,并转入__iar_program_start中执行__low_level_init与__iar_data_init2,并在__iar_data_init2中,先后调用__iar_zero_init2与__iar_copy_init2对全局变量、全局已初始化变量进行相应的初始化操作。最后,调用main()函数执行。这就是IAR在启动main()函数之前做的事情,它并没有那么神秘,只要花些时间,就可以跟跟踪分析出这个过程。http://www.cnblogs.com/mssql/archive/2011/01/29/tt146.html
2023-07-11 07:18:581

在main之前,IAR都做了啥

近要Cortex-M3写简单操作系统打算使用IAR写启代码花些间解IARmain()前做些事 首先系统复位Cortex-M3代码区偏移0x0000"0000处获取栈顶址用初始化MSP寄存器值 接代码区偏移0x0000"0004获取第指令跳转址些址CM3要求放置断向量表 程序启区反汇编: __vector_table: 08004000 2600 08004002 2000 08004004 7E1D 08004006 0800 程序由IAP程序启IAP程序获取0x0800"4000处MSP值(0x20002600)并设置MSP值即主堆栈 范围0x2000"0000~0x2000"25FF接IAP程序获取0x0800"4004处Reset_Handler址 (0x0800"7E1D)并跳转Reset_Handler()执行 IAP完全模仿Cortex-M3复位序列说没IAP系统CM3能0x0800"0000获取MSP 0x0800"0004获取第条指令所处址IAP存0x0800"0000址IAP启已经消耗掉复位序列所 IAP要启UserApp程序候完全模仿Cortex-M3复位序列 接我看看复位第句指令——Reset_Handler()函数 若我使用ST公司标准外设库已经现Reset_Handler弱定义——PUBWEAK我重写同名函数覆盖般说我使用都ST提供Reset_HandlerV3.4版本库startup_stm32f10x_xx.s找函数: PUBWEAK Reset_Handler SECTION .text:CODE:REORDER(2) Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, =__iar_program_start BX R0 看ST没做太事调用自家库提供SystemInit函数进行系统钟、Flash读取初始化并权交给 __iar_program_startIAR提供内部函数我跟紧__iar_program_start跳转看看IAR做 面段代码反汇编: Reset_Handler: __iar_section$$root: 08007E1C 4801 LDR R0, [PC, #0x4]; LDR R0, =SystemInit 08007E1E 4780 BLX R0;BLX R0 08007E20 4801 LDR R0, [PC, #0x4];LDR R0, =__iar_program_start 08007E22 4700 BX R0;BX R0 08007E24 6C69 08007E26 0800 08007E28 7D8D 08007E2A 0800 细观众发现址0x0800"7E1C比我查0x0800"7E1D差1ARM家族遗留问题ARM处理器指令至 少半字齐(16位THUMB指令集 or 32位ARM指令集)所PC指针LSB0充利用寄存器ARM公司给PCLSB重要使命执行支跳转PC LSB=1表示使用THUMB模式LSB=0表示使用ARM模式新Cortex-M3内核使用THUMB-2指令集挑梁所 位要保持1所我查址0x0800"7E1D(C=1100,D=1101)放我CM3内核忽略掉LSB(除非0 引起fault)确跳转0x0800"7E1C 0x0800"7E20处加载指令我算__iar_program_start所处位置前PC指针 (0x0800"7E24)再加4即0x0800"7E28处所指向址——0x0800"7D8D(0x0800"7D8C)我跟紧着跳 转__iar_program_start: __iar_program_start: 08007D8C F000F88C BL __low_level_init 08007D90 2800 CMP R0, #0x0 08007D92 D001 BEQ __iar_init$$done 08007D94 F7FFFFDE BL __iar_data_init2 08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main 我看IAR提供__low_level_init函数进行底层初始化进步跟踪我查__low_level_init函数做些我想象告 __low_level_init: 08007EA8 2001 MOVS R0, #0x1 08007EAA 4770 BX LR __low_level_init乎想象简单往R0寄存器写入1立即执行"BX LR"调用处接__iar_program_start检查R0否00则执行__iar_init$$done若0 执行__iar_data_init2__iar_init$$done函数简单2句第句R0清零第二句直接"BL main"跳转main()函数既__low_level_init已经往R0写入1我走远路——看看 __iar_data_init2做些虽距离main步遥间隐藏编译器思想我耐看 __iar_data_init2: 08007D54 B510 PUSH {R4,LR} 08007D56 4804 LDR R0, [PC, #0x10] 08007D58 4C04 LDR R4, [PC, #0x10] 08007D5A E002 B 0x8007D62 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4 08007D64 D1FA BNE 0x8007D5C 08007D66 BD10 POP {R4,PC} 08007D68 7C78 08007D6A 0800 08007D6C 7C9C 08007D6E 0800 看IAR迟迟执行main()函数执行__iar_data_init2我析析IAR都干些坏事~ 首先压R4LR入栈加载0x0800"7C78至R00x0800"7C9C至 R4马跳转0x0800"7D62执行R0R4比较结若相等则弹R4PC立即进入main()IAR请君入瓮自 快放我——结相等跳转0x0800"7D5C执行R0指向址——0x0800"7C78值—— 0x0800"7D71加载R1并且R0值自加4更新0x0800"7C7C并跳转R1指向址处执行另IAR函 数:__iar_zero_init2: __iar_zero_init2: 08007D70 2300 MOVS R3, #0x0 08007D72 E005 B 0x8007D80 08007D74 F8501B04 LDR R1, [R0], #0x4 08007D78 F8413B04 STR R3, [R1], #0x4 08007D7C 1F12 SUBS R2, R2, #0x4 08007D7E D1FB BNE 0x8007D78 08007D80 F8502B04 LDR R2, [R0], #0x4 08007D84 2A00 CMP R2, #0x0 08007D86 D1F5 BNE 0x8007D74 08007D88 4770 BX LR 08007D8A 0000 MOVS R0, R0 __iar_data_init2没执行完毕跳转__iar_zero_inti2且看我慢慢析帮凶——__iar_zero_inti2做 __iar_zero_inti2R3寄存器清零立即跳转0x0800"7D80执行"LDR R2, [R0], #0x4"句指令与刚才__iar_data_init2见"LDR R1, [R0], #0x4"类似都索引R0指向址——0x0800"7C7C值——0x0000"02F4加载R2寄存器R0 值自加4更新0x0800"7C80接指令检查R2否0显函数没简单想放我我R2值2F4我带 0x0800"7D74处随4条指令做事情: 1、R0指向址——0x0800"7C80值——0x2000"27D4加载R1寄存器R0值自加4更新0x0800"7C84 2、R1指向址——0x2000"27D4值——改写R3寄存器值——0R1值自加4更新0x2000"27D8 3、R2自减4 4、检查R2否00跳转第二条执行则执行条 简直循环——C语言循环for(r2=0x2F4;r2-=4;r!=0){...}我看看循环做 第条指令址加载R1——0x2000"27D4 RAM址起点循环度2F4RAM空间进行清零操作IAR要做事情呢消除记录用Jlink 查看片内存区域发现片区域我定义全局变量所说IAR每系统复位都自我定义全局变量清零0 清零完毕接指令"LDR R2, [R0], #0x4"R0指向址——0x0800"7C84值——0加载R2寄存器R0值自加4更新0x0800"7C88随检查 R2否0R20执行"BX LR"返__iar_data_init2函数若0我发现跳转至4指令处进行循环清零操作 读我应该猜IAR意图:__iar_data_init2 始加载0x0800"7C78至R00x0800"7C9C至R4[R0,R4]段启代码区区域内保存要处理所址与信 息——执行函数址或者参数实际片区域名字叫做:Region$$Table$$Base区域内程序R0索引R4 限R0=R4__iar_data_init2执行完毕跳转至main()函数 保持我猜想继续跟踪我PC指针——我 __iar_data_init2函数第件事比较R0R4值惜仍相等我带0x0800"7D5C至我应 该能看__iar_data_init2主循环验证我IAR意图猜想~ __iar_data_init2主循环: 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4 我等价写:for(r0=0x0800"7C78,r4=0x0800"7C9C;r0!=r4;r0+=4){...} 我R00x0800"7C88经指令1R0变0x0800"7C8CR10x0800"7C55我看看7C55处IAR要执行何种操作 __iar_copy_init2: 08007C54 B418 PUSH {R3,R4} 08007C56 E009 B 0x8007C6C 08007C58 F8501B04 LDR R1, [R0], #0x4 08007C5C F8502B04 LDR R2, [R0], #0x4 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60 08007C6C F8503B04 LDR R3, [R0], #0x4 08007C70 2B00 CMP R3, #0x0 08007C72 D1F1 BNE 0x8007C58 08007C74 BC12 POP {R1,R4} 08007C76 4770 BX LR 名__iar_copy_init2函数执行"copy"操作呢 首先压R3,R4入栈跳转0x0800"7C6CR0——Region$$Table$$Base取参数0x238放入R3接 指令家应该都熟悉0x2380所我带至7C58处再Region$$Table$$Base取参数0x0800"7F14放入R1Region$$Table$$Base取参数0x2000"2AC8放入R2处细观众应该能察觉__iar_zero_init2取参数几乎:先取随取址——1址没错"copy"随指令 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60 则另4指令指令1R1指向址数据读R4指令2R2指向址数据改写R4数据指令3、4完循环 说家都应该明白——"copy"操作Flash址0x0800"7F14起度0x238数据拷贝RAM址0x2000"2AC8 通Jlink我看片区域我定义并且已初始化全局变量说每复位IAR处进行全局变量初始化 4指令执行完毕再Region$$Table$$Base取参数0比较条件符合函数返__iar_data_init2 R0已经0x0800"7C9C与R4相等__iar_data_init2终于完使命 08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main R0清零IAR放弃主权PC指针交给用户程序入口——main() 请注意使用BL指令进行main跳转说main函数IAR手程序若main函数执行结尾接则执行exit等IAR提供退函数些函数等待解~ 总IAR启main()函数前执行Reset_Handler调用 SystemInit()(ST库提供)进行钟Flash读取初始化并转入__iar_program_start执行 __low_level_init与__iar_data_init2并__iar_data_init2先调用 __iar_zero_init2与__iar_copy_init2全局变量、全局已初始化变量进行相应初始化操作调用main()函数执 行 IAR启main()函数前做事情并没神秘要花些间跟跟踪析程 中国至美中国blogs中国/mssql/archive/2011/01/29/tt146.htm
2023-07-11 07:19:091

在main之前,IAR都做了啥

最近要在Cortex-M3上写一个简单的操作系统,打算使用IAR,为了写好启动代码,花了一些时间了解了IAR在main()以前做了些什么事。首先系统复位时,Cortex-M3从代码区偏移0x0000"0000处获取栈顶地址,用来初始化MSP寄存器的值。接下来从代码区偏移0x0000"0004获取第一个指令的跳转地址。这些地址,是CM3要求放置中断向量表的地方。这里是一个程序的启动区的反汇编:__vector_table: 08004000 2600 08004002 2000 08004004 7E1D 08004006 0800 这个程序是由IAP程序来启动的,IAP程序获取0x0800"4000处的MSP值(0x20002600),并设置为MSP的值,即主堆栈最大范围是0x2000"0000~0x2000"25FF。接下来IAP程序获取0x0800"4004处的Reset_Handler的地址(0x0800"7E1D),并跳转到Reset_Handler()执行。IAP在这里完全是模仿了Cortex-M3的复位序列,也就是说,在没有IAP的系统上,CM3只能从0x0800"0000获取MSP,从0x0800"0004获取第一条指令所处地址。而IAP就存在在0x0800"0000这个地址上,IAP的启动,已经消耗掉了这个复位序列,所以IAP要启动UserApp程序的时候,也是完全模仿Cortex-M3的复位序列的。接下来我们看看复位后第一句指令——Reset_Handler()函数里有什么。若我们使用的是ST公司标准外设库,那么已经有了现成的Reset_Handler,不过他是弱定义——PUBWEAK,可以被我们重写的同名函数覆盖。一般来说,我们使用的都是ST提供的Reset_Handler,在V3.4版本的库中,可以在startup_stm32f10x_xx.s中找到这个函数: PUBWEAK Reset_Handler SECTION .text:CODE:REORDER(2)Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, =__iar_program_start BX R0看来ST没有做太多的事,他只调用了自家库提供的SystemInit函数进行系统时钟、Flash读取的初始化,并把大权交给了__iar_program_start这个IAR提供的“内部函数”了,我们就跟紧这个__iar_program_start跳转,看看IAR做了什么,上面一段代码的反汇编如下: Reset_Handler:__iar_section$$root: 08007E1C 4801 LDR R0, [PC, #0x4]; LDR R0, =SystemInit 08007E1E 4780 BLX R0;BLX R0 08007E20 4801 LDR R0, [PC, #0x4];LDR R0, =__iar_program_start 08007E22 4700 BX R0;BX R0 08007E24 6C69 08007E26 0800 08007E28 7D8D 08007E2A 0800 细心的观众会发现地址是0x0800"7E1C,比我们查到的0x0800"7E1D差了1,这是ARM家族的遗留问题,因为ARM处理器的指令至少是半字对齐的(16位THUMB指令集 or 32位ARM指令集),所以PC指针的LSB是常为0的,为了充分利用寄存器,ARM公司给PC的LSB了一个重要的使命,那就是在执行分支跳转时,PC的LSB=1,表示使用THUMB模式,LSB=0,表示使用ARM模式,但在最新的Cortex-M3内核上,只使用了THUMB-2指令集挑大梁,所以这一位要常保持1,所以我们查到的地址是0x0800"7E1D(C=1100,D=1101),放心,我们的CM3内核会忽略掉LSB(除非为0,那么会引起一个fault),从而正确跳转到0x0800"7E1C。从0x0800"7E20处的加载指令,我们可以算出__iar_program_start所处的位置,就是当前PC指针(0x0800"7E24),再加上4,即0x0800"7E28处的所指向的地址——0x0800"7D8D(0x0800"7D8C),我们跟紧着跳转,__iar_program_start果然在这里:__iar_program_start: 08007D8C F000F88C BL __low_level_init 08007D90 2800 CMP R0, #0x0 08007D92 D001 BEQ __iar_init$$done 08007D94 F7FFFFDE BL __iar_data_init2 08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main我们看到IAR提供了__low_level_init这个函数进行了“底层”的初始化,进一步跟踪,我们可以查到__low_level_init这个函数做了些什么,不是不是我们想象中的不可告人。__low_level_init: 08007EA8 2001 MOVS R0, #0x1 08007EAA 4770 BX LR__low_level_init出乎想象的简单,只是往R0寄存器写入了1,就立即执行"BX LR"回到调用处了,接下来,__iar_program_start检查了R0是否为0,为0,则执行__iar_init$$done,若不是0,就执行__iar_data_init2。__iar_init$$done这个函数很简单,只有2句话,第一句是把R0清零,第二句就直接"BL main",跳转到main()函数了。不过既然__low_level_init已经往R0写入了1,那么我们还是得走下远路——看看__iar_data_init2做了些什么,虽然距离main只有一步之遥,不过这中间隐藏了编译器的思想,我们得耐心看下去。__iar_data_init2: 08007D54 B510 PUSH {R4,LR} 08007D56 4804 LDR R0, [PC, #0x10] 08007D58 4C04 LDR R4, [PC, #0x10] 08007D5A E002 B 0x8007D62 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4 08007D64 D1FA BNE 0x8007D5C 08007D66 BD10 POP {R4,PC} 08007D68 7C78 08007D6A 0800 08007D6C 7C9C 08007D6E 0800 看来IAR迟迟不执行main()函数,就是为了执行__iar_data_init2,我们来分析分析IAR都干了些什么坏事~首先压R4,LR入栈,然后加载0x0800"7C78至R0,0x0800"7C9C至R4,马上跳转到0x0800"7D62执行R0,R4的比较,结果若是相等,则弹出R4,PC,然后立即进入main()。不过IAR请君入瓮是自不会那么快放我们出来的——结果不相等,跳转到0x0800"7D5C执行,在这里,把R0指向的地址——0x0800"7C78中的值——0x0800"7D71加载到R1,并且R0中的值自加4,更新为0x0800"7C7C,并跳转到R1指向的地址处执行,这里是另一个IAR函数:__iar_zero_init2:__iar_zero_init2: 08007D70 2300 MOVS R3, #0x0 08007D72 E005 B 0x8007D80 08007D74 F8501B04 LDR R1, [R0], #0x4 08007D78 F8413B04 STR R3, [R1], #0x4 08007D7C 1F12 SUBS R2, R2, #0x4 08007D7E D1FB BNE 0x8007D78 08007D80 F8502B04 LDR R2, [R0], #0x4 08007D84 2A00 CMP R2, #0x0 08007D86 D1F5 BNE 0x8007D74 08007D88 4770 BX LR 08007D8A 0000 MOVS R0, R0__iar_data_init2还没执行完毕,就跳转到了这个__iar_zero_inti2,且看我们慢慢分析这个帮凶——__iar_zero_inti2做了什么。__iar_zero_inti2将R3寄存器清零,立即跳转到0x0800"7D80执行"LDR R2, [R0], #0x4",这句指令与刚才在__iar_data_init2见到的"LDR R1, [R0], #0x4"很类似,都为“后索引”。这回,将R0指向的地址——0x0800"7C7C中的值——0x0000"02F4加载到R2寄存器,然后R0中的值自加4,更新为0x0800"7C80。接下来的指令检查了R2是否为0,显然这个函数没那么简单想放我我们,R2的值为2F4,我们又被带到了0x0800"7D74处,随后4条指令做了如下的事情:1、将R0指向的地址——0x0800"7C80中的值——0x2000"27D4加载到R1寄存器,然后R0中的值自加4,更新为0x0800"7C84。2、将R1指向的地址——0x2000"27D4中的值——改写为R3寄存器的值——0,然后R1中的值自加4,更新为0x2000"27D8。3、R2自减44、检查R2是否为0,不为0,跳转到第二条执行。不为,则执行下一条。这简直就是一个循环!——C语言的循环for(r2=0x2F4;r2-=4;r!=0){...},我们看看循环中做了什么。第一条指令把一个地址加载到了R1——0x2000"27D4是一个RAM地址,以这个为起点,在循环中,对长度为2F4的RAM空间进行了清零的操作。那为什么IAR要做这个事情呢?消除什么记录么?用Jlink查看这片内存区域,可以发现这片区域是我们定义的全局变量的所在地。也就是说,IAR在每次系统复位后,都会自动将我们定义的全局变量清零0。清零完毕后,接下来的指令"LDR R2, [R0], #0x4"将R0指向的地址——0x0800"7C84中的值——0加载到R2寄存器,然后R0中的值自加4,更新为0x0800"7C88。随后检查R2是否为0,这里R2为0,执行"BX LR"返回到__iar_data_init2函数,若是不为0,我们可以发现又会跳转至“4指令”处进行一个循环清零的操作。读到这里,我们应该可以猜到IAR的意图了:__iar_data_init2一开始加载了0x0800"7C78至R0,0x0800"7C9C至R4,[R0,R4]就是一段启动代码区,在这个区域内保存了要“处理”的所有地址与信息——执行的函数地址或者参数,实际上,这片区域也有一个名字,叫做:Region$$Table$$Base。在这个区域内,程序以R0为索引,R4为上限,当R0=R4,__iar_data_init2执行完毕,跳转至main()函数。好了,保持我们这个猜想,继续跟踪我们的PC指针——我们回到了__iar_data_init2函数中,第一件事就是比较R0,R4的值,可惜的是,仍然不相等,我们又被带到了0x0800"7D5C,至此,我们应该能看出这是一个__iar_data_init2的“主循环”,这也验证了我们对IAR意图的猜想~ __iar_data_init2中的“主循环”: 08007D5C F8501B04 LDR R1, [R0], #0x4 08007D60 4788 BLX R1 08007D62 42A0 CMP R0, R4我们可以等价写为:for(r0=0x0800"7C78,r4=0x0800"7C9C;r0!=r4;r0+=4){...}此时,我们的R0为0x0800"7C88,经过“指令1”,R0变为0x0800"7C8C,R1为0x0800"7C55。我们来看看,7C55处,IAR又要执行何种操作。__iar_copy_init2: 08007C54 B418 PUSH {R3,R4} 08007C56 E009 B 0x8007C6C 08007C58 F8501B04 LDR R1, [R0], #0x4 08007C5C F8502B04 LDR R2, [R0], #0x4 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60 08007C6C F8503B04 LDR R3, [R0], #0x4 08007C70 2B00 CMP R3, #0x0 08007C72 D1F1 BNE 0x8007C58 08007C74 BC12 POP {R1,R4} 08007C76 4770 BX LR这是一个名为__iar_copy_init2的函数,他执行了什么"copy"操作呢?首先压R3,R4入栈,然后跳转到0x0800"7C6C,从R0——Region$$Table$$Base中取出参数0x238放入R3,接下来的指令大家应该都熟悉了,0x238不为0,所以我们被带至7C58处,再次从Region$$Table$$Base中取出参数0x0800"7F14放入R1,从Region$$Table$$Base取出参数0x2000"2AC8放入R2处。细心的观众应该能察觉这和__iar_zero_init2中取参数的几乎一样:先取出大小,随后取出了地址——只不过这里多出了1个地址,没错这就是"copy",随后的指令 08007C60 F8514B04 LDR R4, [R1], #0x4 08007C64 F8424B04 STR R4, [R2], #0x4 08007C68 1F1B SUBS R3, R3, #0x4 08007C6A D1F9 BNE 0x8007C60则是另一个“4指令”,指令1将R1指向地址的数据读到R4,指令2将R2指向地址的数据改写为R4的数据,指令3、4是完成一个循环。说到这里大家都应该明白了——这就是一个"copy"的操作,从Flash地址0x0800"7F14起,将长度0x238的数据拷贝到RAM地址0x2000"2AC8中。通过Jlink,我们可以看到这片区域是我们定义的并且已初始化的全局变量。也就是说,每次复位后,IAR在此处进行全局变量的初始化。在这“4指令”执行完毕后,再次从Region$$Table$$Base中取出参数,为0,比较之后条件符合,函数返回__iar_data_init2。此时的R0已经为0x0800"7C9C与R4相等,__iar_data_init2终于完成它的使命。08007D98 2000 MOVS R0, #0x0 08007D9A F7FDFC49 BL main将R0清零以后,IAR放弃主动权,把PC指针交给了用户程序的入口——main()。但请注意,这里使用的是BL指令进行main跳转,也就是说,main函数只是IAR手中的一个子程序,若是main函数执行到了结尾,接下来则会执行exit等IAR提供的“退出”函数。这些函数,等待下回分解~总之,IAR在启动main()函数以前,执行了Reset_Handler,调用SystemInit()(ST库提供)进行时钟,Flash读取初始化,并转入__iar_program_start中执行__low_level_init与__iar_data_init2,并在__iar_data_init2中,先后调用__iar_zero_init2与__iar_copy_init2对全局变量、全局已初始化变量进行相应的初始化操作。最后,调用main()函数执行。这就是IAR在启动main()函数之前做的事情,它并没有那么神秘,只要花些时间,就可以跟跟踪分析出这个过程。
2023-07-11 07:19:181

那个朋友可以讲下中国重汽斯太尔桥和汉德斯太尔桥的区别 越详细越好

重汽AC16桥.汉德铸造桥.曼桥.东风3286.北奔.安凯主机厂株齿产品明细表 所处位置/名称 花键数 主机厂 株齿代码 主机厂代码 产品名称 备注 重汽 B846172800 AZ9981320158 AC16桥新品28:17后   盆角齿 31 重汽 B846172801 AZ9981320153 AC16桥新品28:17中   31 重汽 B846242904 AZ9981320154 AC16桥新品29:24中   31 重汽 B846242905 AZ9981320159 AC16桥新品29:24后   31 重汽 B846212900 AZ9981320157 AC16桥(21:29后桥)   31 重汽 B846212901 AZ9981320152 AC16桥(21:29中桥)   31 重汽 B846013000 AZ9981320130 AC16桥三联齿主动圆柱齿轮 与汉德主动齿通用(多铜套) 过桥箱   重汽 L846010700 AZ9981320107 AC16桥三联齿从动圆柱齿轮 与汉德从动齿通用   重汽 ZZ-L913022700 AZ9231320227 STR桥行星轮227(与AC16桥和HDMAN901行星轮通用) 中桥行星齿,与166后半轴齿轮配   重汽 B915016600 AZ9981320166 AC16桥新品166后半轴轮 与汉德002通用(多铜套)   重汽 ZZ-L913015200 AZ9231320152 STR桥行星轮152(与AC16桥通用) 轮间差速器行星齿,后桥用,与040轮间半轴齿配 后桥差速器   重汽 L915004000 AZ9981320040 AC16桥新品040半轴轮 后桥差速器半轴齿,与152行星齿配   重汽 L915005200 WG9981340052 AC16桥新品052轮边行星轮 轮边专用 轮边   汉德 HD-B846531012 81.35199.6524 铸造桥18:27后 与北奔、安凯通用 盆角齿 31 汉德 HD-B846501012 81.35199.6520 铸造桥18:27中 31 汉德 HD-B846101200 81.35199.6535 铸造桥21:28后 31 汉德 HD-B846101210 81.35199.6554 铸造桥21:28中 31 汉德 HD-B846353900 81.35199.6587 铸造桥24:29后 31 汉德 HD-B846363900 81.35199.6565 铸造桥24:29中 31 汉德 HD-B8461729D0   HD铸造桥中桥盆角齿(17:29等) 31 汉德 HD-B8461729D1   HD铸造桥后桥盆角齿(17:29等) 31 汉德 HD-L589004400 81.35113.0044 铸造桥太阳轮   轮边   汉德 HD-L589002900 81.35112.0029 铸造桥行星轮     汉德 HD-L589002100 81.35111.0021 铸造桥外齿川     汉德 HD-L589001900 81.35114.0019 铸造桥齿圈支架     汉德 L589003100 81.35610.0031 铸造桥过桥箱主动齿轮 与重汽通用(少铜套) 过渡箱   汉德 L589001100 81.35610.0011 铸造桥过桥箱被动齿轮 与重汽通用   汉德 L589000200 81.35617.0002 铸造桥轴间差速器从动齿轮 与重汽通用(少铜套)   汉德 L589000901 81.35609.0009 铸造桥行星齿轮 轴间差速器行星齿(与227行星轮通用)   汉德 L589003600 81.35106.0036 铸造桥半轴齿轮 后桥差速器与040半轴通用 后桥差速器   汉德 L589005900 81.35108.0059 铸造桥行星齿轮 后桥差速器(与152通用?)   汉德 B589031600 81.35199.6316 中联重科25吨中桥锥齿轮 专为中联重科开发 盆角齿   汉德 B589036300 81.35199.6363 中联重科25吨后桥锥齿轮   汉德 L589003900 81.35113.0039 中联重科25吨太阳轮 轮边   汉德 L589002600 81.35112.0026 中联重科25吨行星轮   汉德 HD-B589031710 81.35199.6317 HD-MAN桥-中桥盆角齿(21:28) 第三代军车桥 盆角齿 33 汉德 HD-B589039310 81.35199.6388 HD-MAN桥-后桥盆角齿(21:28) 33 汉德 HD-L589000900 81.35111.0009 HD-MAN桥-内齿圈 轮边   汉德 HD-L589001900 81.35114.0019 HD-MAN桥-齿圈支架   汉德 HD-L589002700 81.35112.0027 HD-MAN桥-行星轮   汉德 HD-L589004100 81.35113.0041 HD-MAN桥-太阳轮   东风车桥 B584182700   EQ3286后(18:27)   盆角齿 33 东风车桥 B585182700   EQ3286中(18:27)   33 东风车桥 B584242900   EQ3286后(24:29)   33 东风车桥 B585242900   EQ3286中(24:29)   33 东风车桥 B584212800   EQ3286后(21:28)   33 东风车桥 B585212800   EQ3286中(21:28)   33 东风车桥 B584172900   EQ3286后(17:29)   33 东风车桥 B585172900   EQ3286中(17:29)   33 东风车桥 B585507000   EQ3286齿圈及托盘总成   轮边   东风车桥 L584010220   EQ3286太阳轮     东风车桥 L584010320   EQ3286行星轮     北奔 B846212802 346350 4139 后桥(21:28) 与汉德、安凯通用 盆角齿 31 北奔 B846212803 346350 2939 中桥(21:28) 31 北奔 B846418270 346350 4039 后桥(18:27) 31 北奔 B846518270 346350 2739 中桥(18:27) 31 北奔 B846172905 545350 3939 后桥(17:29) 31 北奔 B846172906 545350 2639 中桥(17:29) 31 北奔 B846242903 545350 3639 后桥(24:29) 31 北奔 B846242902 545350 3539 中桥(24:29) 31 北奔 L8460041BC 355354 1312 北方奔驰内齿圈   轮边 31 北奔 L846371200 346354 3712 北奔内齿圈-加宽     北奔 L846031200 355354 0312 北奔前桥内齿圈     北奔 B846112400 346350 1124 北奔前贯齿轮总成(三联齿) 与重汽三联齿通用 过渡箱   北奔 L913001400 659353 0014 北奔行星齿轮 与重汽901小齿通用   北奔 B915052600 346353 0526 北奔后贯齿轮总成 与汉德002、AC16166长把子侧齿通用   北奔 B915081500 346353 0815 北奔半轴齿轮 与重汽L915004000通用 后桥差速器   北奔 L913191400 346353 1914 北奔行星齿轮 与重汽L913015200通用   安凯 L588505500 HFF2405055 CK 2BZ 行星轮 与汉德029通用 轮边   安凯 L588503501 HFF2405035 CK 2BZ 太阳轮 与汉德044通用   安凯 L588504100 HFF2405041 CK 2BZ 内齿圈 与北奔加宽内齿圈通用   安凯 L588504200 HFF2405042 CK 2BZ 齿圈支架     安凯 L588207300 HFF2502073 CK 1BZ 前输入轴 与汉德L589001600通用 中桥过渡箱   安凯 L588012100 HFF2510121 CK 1BZ 行星轮(精锻小齿) 与汉德L589000901通用   安凯 B588012000 HFF2510120 CK 1BZ 前差半轴齿轮总成 与重汽166通用   安凯 B588014000 HFF2510140 CK 1BZ 三联齿轮总成 与重汽三联齿通用   安凯 L588013900 HFF2510139 CK 1BZ 从动圆柱齿轮 与重汽、汉德通用   安凯 L588301501 HFF2403015 CK 1BZ 行星轮(精锻小齿) 与重汽L913015200通用 后桥差速器   安凯 L588301601 HFF2403016 CK 1BZ 半轴齿轮 与重汽L915004000通用   安凯 L588207101 HFF2502071 CK 2BZ 贯通轴(渐开线花键)   中桥   安凯 L588207102 HFF2502071 CK 2BZFTH 贯通轴(矩形花键)   8 安凯 B846518270   奔驰桥螺伞(18/27等高齿)中桥 与汉德、北奔通用 盆角齿 31 安凯 B846418270   奔驰桥螺伞(18/27等高齿)后桥 31 安凯 B846242902   奔驰桥螺伞(24/29等高齿)中桥 31 安凯 B846242903   奔驰桥螺伞(24/29等高齿)后桥 31
2023-07-11 07:19:324

电脑进入系统后蓝屏

如果重做后仍蓝屏 就属于硬件设备问题了 建议考虑以下几点:硬件故障:1 新加硬件设备 最近如果新加了硬件 建议更新这个硬件设备的驱动或拔下此硬件(不兼容造成蓝屏 尤其是内存条)1 内存条 你把内存条拔出 来用橡皮把金手指擦擦或者用脱脂棉蘸点酒精把插巢擦一遍,不要蘸过多等干了后再插上就行 也可以换个内存插槽尝试2 硬盘 系统读取不了文件造成蓝屏 一般是硬盘数据线的问题 这样你需要打开机箱 硬盘数据线拔掉 重插!3 CPU散热 这种情况一般出现在开始一段时间后 解决方案:检查各部件的风扇良好情况或CPU带不动你的大硬盘吧,我认为是CPU过热引起的,散热不好.打开机箱,清一下CPU风扇的灰尘(用吸尘器最小的吸管,或者用胶片自己卷一个吸管),如果这样可以进入系统,你就赶快换一个新的风扇.
2023-07-11 07:20:001

香奈儿邂逅香水英文全名怎么写

Chance有好几种的,不是你说的是哪种。浓香水是:Chance by Chanel Eau de Parfum Sprayhttp://www.askyaya.com/uploadimage_detail/1319/1152173282824.jpg淡香水是:Chance by Chanel Eau de Toilette Sprayhttp://www.askyaya.com/uploadimage_detail/1319/1152176437904.jpg这两款都是橙黄色的,味道一样,前者留香时间长,瓶盖是金属的,后都留香时间不如前者,瓶盖是透明的。另外后来出的绿色清新版是:Chance Eau Fraiche by Chanelhttp://www.chinaedy.com/img_shopxp/upfilepic/2007112610103710161.jpg
2023-07-11 07:20:154

永恒之塔 魔道的输出高低是只看魔增吗?平民 下本为主魔增要堆到多少?

不是、 (在魔命打到一定数值的前提下),这个版本增幅是有上限的,2900,在往上以后就以魔法抵消的形势消失,在就是魔法攻击力,技能释放顺序,很重要。
2023-07-11 07:20:322

57X26十2X13X4326X(57十43)26X1002600
2023-07-11 07:20:431

稀土股票有哪些

给你推荐一支尚未以稀土概念爆炒过而实际掌握稀土矿区较大的股票 —— 江西铜业600362 这个股票名号是铜业~但江铜实际掌握有关黄金~白银和稀土的多大型矿区~ 比如国内稀土矿藏四川应该是第二~ 而四川最大的稀土矿区开发权是江铜的~ 奇怪的是江铜对这一巨量概念甚至没有大篇幅介绍过
2023-07-11 07:21:043

融资融券信用账户能从事债券回购交易吗

不能,交易所交易实施细则规定:投资者信用证券账户不得用于买入或转入除可充抵保证金证券范围以外的证券,也不得用于参与定向增发、证券投资基金申购及赎回、债券回购等。参考资料:上海证券交易所融资融券交易实施细则、深圳证券交易所融资融券交易实施细则
2023-07-11 07:21:214

9+625486848887等于多少?

自己动脑!
2023-07-11 07:21:231

撞破南墙的《魔装》(完结)

撞破南墙于2013年7月加盟创世中文网后开始连载的东方玄幻类小说。 强者路乃是不归途,自古以来,踏着千万,留名者却万中无一。唯有大毅力者方能在步步惊险凶恶的环境中不断攀爬,寻找着所谓强者的巅峰。这个世间只有不断追求更强的勇者,绝无永远不败的强者。而苏唐不仅是一个勇者,还是一个拥有魔装的幸运者。 内容简介:做弱者,多不得好活做强者,多不得好死所谓命运,就是在不得好活与不得好死之间做一个选择韩进,一个做好事却没好报的异类修真者,他的肉体在一场同归于尽的大爆炸中被毁,但在将要魂飞魄散的一瞬间,他坚信师父说过的话,死亡绝不是生命的最后!他力保一丝元神不灭,来到了一个完全陌生的魔法世界。在这里,韩进遭受到严峻的考验,大陆的局势混乱到了极点,几十个领主间连年征战不休,人命贱如刍狗,而韩进的修为已经被清零,只能从头再来……作品数据: 小说性质:VIP作品 总点击:10640479 月点击:525 周点击:525 小说类别:异界大陆 总推荐:743272 月推荐:10 周推荐:10 写作进程:已经完本 完成字数:2527518 授权状态:A级签约 本书起点中文网首发   内容简介:一个身手非凡、运气极渣的现代刺客在吃烤肉时,不幸被铁签刺破喉咙而死,灵魂被异界的邪恶大法师召唤,附生在被当成实验品的少年身上,得以解开厄运的诅咒。在成功狙杀了召唤自己的邪法师后,他巧妙地踩着对方的尸体,攀上了幸运的高枝……  作品信息: 小说性质:VIP作品 总点击:7884423 月点击:300 周点击:300 小说类别:异界大陆 总推荐:589675 月推荐:0 周推荐:0 写作进程:已经完本 完成字数:2068314 授权状态:A级签约 本书起点中文网首发 内容简介:军魂!军魄!军势!!!世界上有一种东西叫做「势」,龙畅游在大海,虎纵横于深山,蛇潜藏在草丛,马飞驰于平川,这就是它们的势!真正的勇士,对于自己不了解的事物,常怀恐惧戒慎之心,而什么都不怕的……那是傻子。书里的主角钱不离,对于他无法掌握的未来常感到担忧,所以他才能比常人看的更远,因为不想把自己生命的一切,演化成棋子,交给迷茫的未来,所以他奋起一搏,倾尽所能的将局势掌握在掌中,其它的,才归天意。作品信息: 小说性质:VIP作品 总点击:3179627 月点击:262 周点击:262 小说类别:架空历史 总推荐:285016 月推荐:0 周推荐:0 写作进程:已经完本 完成字数:1891160 授权状态:A级签约 本书起点中文网首发 内容简介:若人生如棋,我愿为卒,漫漫征途,谁曾见我后退半步作品数据: 小说性质:VIP作品 总点击:3683098 月点击:256 周点击:256 小说类别:异界大陆 总推荐:273187 月推荐:0 周推荐:0 写作进程:已经完本 完成字数:1936921 授权状态:A级签约 本书起点中文网首发 内容简介:一座位于地下几千米深的大型强子对撞机发生了故障,让可怕的反物质生命在惊鸿一瞥中发现了毗邻的物质世界,先是小规模的渗透,接着是大规模的入侵,人类被拖入一场持续数百年的战争当中。然而最终失败的却是人类,其他位面也未能幸免,物质世界在反物质生命的强大攻势下节节败退,科学家们不甘心接受这样的结局,动用剩余的战争资源,孤注一掷的发动了轮回计划,把强大的终极单兵武器审判之翼送回到几百年前。一个在社会底层苦苦打拼的年轻人,从那一刻开始,生命轨迹悄悄发生了变化。披挂着审判之翼的罗成,不止要守护当前的科技位面,还要往返其他位面,帮助濒临灭绝的巨龙一族,整合一团散沙的精灵,拯救一个个在全面战争中陨落的强者,联合各个位面的所有力量,和潮水般涌来的寄生魔物做殊死一搏,他唯一的使命便是改变这场战争的结局。作品数据: 小说性质:VIP作品 总点击:1182361 月点击:279 周点击:279 小说类别:时空穿梭 总推荐:159003 月推荐:46 周推荐:46 写作进程:无法完成 完成字数:1532793 授权状态:A级签约 本书起点中文网首发
2023-07-11 07:21:381

高清监控数据量庞大 视频监控存储如何应对

面对高清监控所带来的难题,要如何应对?海康的张龙君表示,高清主要是指码流在4-20Mbps的视频,应用高清的监控环境一般具有规模大、海量存储空间、监控区域重要等特点。 针对高清监控的特点和要求,海康威视(002415,股吧)推出了CVR和云存储系统。海康的CVR解决方案是基于流媒体数据直存技术,可以接入国内十多家主流编码器和平台。底层采用海康流媒体数据管理结构,结合VSPP(视频流预保护)技术,在保证复杂环境下系统稳定性的同时,完全消除覆盖读写带来的文件碎片问题,能大幅提高系统的应用性能和系统的写入能力及检索效率,保障了服务的持续性。海康可以开放全部的SDK,为用户进行个性化定制。在CVR方案的基础上,海康还推出了针对监控应用的云存储系统,该系统将应用于国内某特大型平安城市项目。海康云存储系统对外提供唯一的服务器接口,上层应用只需通过该接口接入即可,剩下的存储配置和管理均由云存储系统智能化自动完成。海康云存储系统具有应用简单、智能负载、无缝扩展、服务连续、最优性价比等特点。 对应高清监控数据量巨大、存储可靠性要求更高、系统结构更加灵活的特性,高清存储需要解决的问题也就越发明确:在高清监控系统中,存储设备和子系统必须具备有效、完整的记录功能;对所存储的数据要能从介质和系统角度考虑其可靠性和安全性;对系统结构灵活的特性,要能实现存储资源的统一管理和调度,以配置灵活的录像计划,并且能根据需求的变化,随时应对系统录像时间延长、监控前端扩展的要求。 宏杉的彭亚雄也谈到,“720P/1080P高清监控点得到广泛部署,而高清化带来的直接影响就是海量数据存储问题,首先高清监控所需存储容量是以前标清建设模式的2-4倍(将来甚至会更高),其次单路码流的增大,对存储设备处理能力也提出了更高的性能要求,同时上千TB的部署规模和大容量硬盘的广泛使用,如何保障硬盘安全,成为了存储设计厂商所需考虑的重要问题。”总的来看,高清监控对存储设备在容量、性能和可靠性方面都提出了更高的要求。 如何解决这些难题?需要关注的不仅是存储介质的选择,还有基于现有的在线存储介质,去设计不同的存储方案,从多维度去满足不同的高清监控系统对存储的需求: · 为实现大容量存储,可设计多硬盘插槽、兼容大容量硬盘的产品,并通过外部阵列柜的扩展来提供海量的存储空间; · 针对高可靠性存储需求,可在设备级采用RAID保护技术(如RAID5和RAID6技术的应用)。设备采用双控制器架构,利用物理硬件的冗余和心跳检测技术关联等,来保障存储服务的可靠性。在系统级,可以采用N+1设备在线冗余模式,以及录像管理服务器双机热备模式; · 在系统架构上,针对监控系统的特点,推荐采用分布式网络存储方案,降低系统传输压力。针对不同规模、不同结构的高清监控系统,还应该采用不同的存储子系统。例如针对旧系统改造、局部实现高清的系统,可采用混合式DVR来实现高清视频的接入和存储,既保护了原有的模拟标清视频接入,也为系统增加了“高清”亮点。
2023-07-11 07:21:452

杰华特值得申购吗

 【杰华特(688141)、股吧】在12月6日发布了其发行招股书,其中杰华特申购时间为2022年12月14日,杰华特的发行价格是38.26元/股,网上发行数量是952.5万股。杰华特微电子成立于2013年,是一家快速成长的高性能模拟和数模混合半导体供应商。自成立以来,公司始终致力于提供高集成度、高性能与高可靠性的电源管理等芯片产品,为客户提供一站式采购服务。请点击输入图片描述(最多18字)  杰华特值得申购吗从最近10日内上市新股来看,未出现破发个股,收益逐渐恢复。因此是杰华特值得申购是可以考虑的。  【申购信息】股票简称杰华特申购代码787141股票代码688141上市地点上海证券交易所网上顶格申购需配市值9.5万元网上发行数量952.5万股发行总股数量5808万股发行价格38.26元杰华特申购日期2022年12月14日  主营业务  公司是以虚拟 IDM 为主要经营模式的模拟集成电路设计企业,专业从事模拟集成电路的研发与销售,主要采用公司自有的国际先进的工艺技术进行芯片设计制造,是工业和信息化部认定的专精特新“小巨人”企业。公司具备包括芯片和系统设计技术、晶圆制造工艺在内的完整核心技术架构。目前公司产品以电源管理模拟芯片为主,在电源管理芯片领域拥有业界领先的全品类产品设计开发能力与产品覆盖广度,并逐步拓展信号链芯片产品,致力于为各行业客户提供高效率、高性能、高可靠性的一站式模拟集成电路产品解决方案。  公司坚持面向全应用领域开发模拟集成电路产品,随着产品数量的积累和技术能力的提升,公司下游应用领域逐渐从消费电子向工业应用、计算和存储以及汽车电子、通讯电子领域扩展。报告期内,公司产品结构逐步完善,工业及通讯领域销售占比从 20%左右提升至 50%左右,已成为公司最主要的产品应用领域。随着研发体系的进一步优化,公司将同步开发电源管理芯片和信号链芯片,进一步加强面向工业、通讯及汽车电子领域供应高性能芯片的能力。公司始终坚持“创新技术、自主研发”技术战略,截至 2022 年 6 月末,公司已取得 401 项专利,其中 146 项为发明专利,以及 49 项集成电路布图设计登记证书。  工艺平台是模拟芯片设计与制造的基础。目前,国内模拟 IC 设计公司多依赖于晶圆厂标准工艺,而全球前十大模拟芯片公司均拥有自有工艺平台,以此来保证自身产品的先进性和独特性,保障产品的持续竞争力。公司借鉴了国际领先的模拟芯片公司的发展经验以及研发模式,主要采用虚拟 IDM 模式,在主要合作晶圆厂均开发了国际先进的自有 BCD 工艺平台用于芯片设计制造。公司将自研工艺技术的迭代升级作为自身发展的核心竞争力之一。公司掌握的自研工艺技术不仅能够提供长期技术优势,通过工艺优化更好提升产品性能,切入通讯电子、汽车电子等新兴应用领域,亦能够形成成本优势,增强产品竞争力,是公司与国际龙头厂商进行竞争的重要支撑。  公司高度重视研发投入和人才队伍建设,报告期内累计研发投入达 5 亿元以上,占各期营业收入的比例均在 15%以上;截至报告期末,公司共有研发人员 341 名,占员工总数的 55%以上。凭借持续性的研发投入以及专业的人才团队,公司现已拥有 1,000 款以上可供销售、600 款以上在研的芯片产品型号,涵盖业内主流的应用场景,其中自主研发、设计的部分产品性能已处于国际先进水平,已进入海康威视、中兴、小米通讯、新华三、荣耀等各行业龙头企业的供应链体系,并相继研发出了诸如高集成度大电流系列、高压高精度高可靠性功率管理系列等多类具有首创性的芯片产品。随着公司技术实力的增强以及行业地位的提升,汽车电子与新能源领域等国家战略性新兴行业已成为公司的重点市场发展方向。未来,公司将继续以工艺开发和产品拓展为主线,以卓越的产品定义与质量管控为着力点,坚持“生产一代、研制一代、开发一代、储备一代”发展策略,以多样化、高性价比的芯片产品提升市场份额,争取早日实现“成为模拟集成电路行业领军者”的企业愿景。  看完了杰华特的公司简介以及主要产品发展和杰华特申购信息,下面为大家拓展下关于申购规则问题。  【申购规则】  1、申购时间:股票交易时间不同,股票交易时间是上午9:30至11:30,下午1:00至3:00.申购新股的话,只要在工作日的上午9:00至下午3:00,提交委托都可以。上班族可利用中午的时间申购。  2、撤单:股票交易在委托后只要未成交都可以撤单,申购新股的委托是不可以撤单的。  3、申购机会:每个账户对单个新股只能申购1次,不能重复申购。每支新股都有“申购上限”包括数量上限和资金上限。比如说,你有50万用于打新股,当天只有1支新股可申购,申购上限为30万元,那么只用一个账户的话,就只能申购1次,多出的20万元只能另行安排。  4、中签号:中签公布时间T+2,如7月17号申购,19号晚上就可以在证券账户上查到是否中签,如果中签,你的持仓中就会看到中签的股票及数量,如果没有中签,持仓中冻结的申购份额就消失了。
2023-07-11 07:21:571

药名,光条又叫什么名称

“光条”就是“山药”.
2023-07-11 07:21:584

科大讯飞股票跌停,是否说明未来形势会好转?

大讯飞股票跌停这是必然的趋势,因为受到春运还有疫情的双重碰撞, 但是我觉得他在后期应该也会上涨,会往好的方向上涨。形势会有好转。
2023-07-11 07:22:134

在黄灯时过了那条线红灯时还有个车屁股在线内算闯红灯吗

你是站住了还是过去了,如果过去了没事,如果站住了也没事顶多算你越线停车,要是红灯了看见过线了在往回一倒车,那应该就是闯红灯了。以后注意点祝你一路顺风哦。
2023-07-11 07:22:202

中央电视台动物世界是哪国拍的?是从什么时间开始的?

都是国外的科学群体拍摄的
2023-07-11 07:21:151

科思股份上市时间

科思股份(证券代码:300856)将于2020年7月22日登陆创业板。科思股份本次公开发行股票2,822万股,其中公开发行新股2,822万股,发行价格30.56元/股,新股募集资金8.62亿元,发行后总股本11,288万股。科思股份主要从事日用化学品原料的研发、生产和销售。2019年度,公司实现营业收入11亿元,净利润15,369.84万元。科思股份成立于2000年4月,主要从事日用化学品原料的研发、生产和销售,产品涵盖化妆品活性成分及其原料、合成香料等。科思股份现拥有两大生产基地,分别位于江苏省宿迁市和安徽省马鞍山市,其中下属马鞍山工厂—安徽圣诺贝化学科技有限公司为按照原料药GMP标准体系建设,并已通过美国FDA现场审计。多年来,科思股份坚持以市场为导向的经营方针,目前已在相关领域具备领先的工艺技术、研发水平和产品品质,拥有众多优质客户资源。产品主销欧美地区,主要产品均占据了同类产品的较大市场份额。
2023-07-11 07:21:011

国外的社会到底是怎样的?

国外的人们都生活在水生火热之中啊!天天吃不饱,穿不暖的!有了上顿没下顿!孩子上不起学,喝不起奶粉!连房子都买不起啊!哪像我国,人民个个生活的有声有色,安居乐业,最主要的是:我们的动车很安全,至少你们信不信,反正我是信的!
2023-07-11 07:20:532

摩羯座配什么、什么时候才开始初恋、

就我来说吧。金牛处女比较好。其他的倒是没多大感觉。初恋的话。早的初中或者小学就开始了。看你自己的感情变化和对象咯。
2023-07-11 07:20:433

12万的房贷十年还清10.4.9利息一月还多少

12万的房贷十年还清4.9利息一月还1325.03元。按基准利率4.9%来计算,10年期月供1266.93元,累计还款152031元,利息32031元;按基准利率4.9的1.1倍(5.39%)来计算,10年期月供1295.78元,累计还款155494元,利息35494元;按基准利率4.9的1.2倍(5.88%)来计算,10年期月供1325.03元。累计159003元,利息39003元。
2023-07-11 07:20:391

159003基金怎样计算收益率

  1、159003基金是货币基金,净值不变,每日结算利息自动到账。货币基金的收益计算办法和一般开放式基金不同。基金公司通常每日公布当日每万份基金单位实现的收益金额,也就是万份基金单位收益。  2、货币基金是聚集社会闲散资金,由基金管理人运作,基金托管人保管资金的一种开放式基金,专门投向风险小的货币市场工具,区别于其他类型的开放式基金,具有高安全性、高流动性、稳定收益性,具有“准储蓄”的特征。
2023-07-11 07:20:302

CF火线礼包为什么我到等级却领不到枪 我只领到了3选1的那个礼包 我刚刚升级是不是没跟新?

是系统信息更新慢,还有你动作不够快
2023-07-11 07:20:191

广雅、省实初中和高中是不是在同一个校区的?谁知道呢?我想多点了解广雅和省实的初中……

初中广雅好一点,高中省实就全省最好,还有它们不统一个校区的
2023-07-11 07:19:541