为什么我用不了语音,一按就把文字变成语音的软件0

&编译器在生成代码使用两个堆栈:一个是用于子程序调用和中断操作的硬件堆栈,一个是用于以堆栈结构传递的参数临时变量和局部变量的软件堆栈。硬件堆栈是从数据内存的顶部开始分配的,在硬件堆栈下面再分配一定数量的字节作为软件堆栈。硬件堆栈和软件堆栈均为向下生长型的堆栈(注意:这与51单片机相反)。 通常如果你的程序没有子程序调用也不调用象带有%f 格式的printf()等库函数,那么默认的16 字节应该在大多数的例子中能良好工作。在绝大多数程序中除了很繁重的递归调用程序再入式函数,最多40 个字节的硬件堆栈应该是足够的。
&&&&& 如果函数的调用层次太深,有可能会发生硬件堆栈溢出到软件堆栈中,改变了软件堆栈中数据的内容,同样,当定义了太多的局部变量或一个局部集合变量太多也有可能出现软件堆栈溢出到动态分配的数据区,两个堆栈都有可能溢出,如果堆栈溢出,会引起不可预测的错误。可以使用堆栈检查函数检测两个堆栈是否溢出。在Target的页面中有一个Return&Stack&Sizi选项,用于指定硬件堆栈(保存函数返回值)的大小,通常如果子程序调用嵌套不深(不超过4层),那么使用默认的16字节就足够了,如果使用了浮点函数,则至少应设定为30个字节。在一般情况下,除了层次很深的递归调用及使用了%f格式说明符外,设定为40个字节就足够了。
&&&&&&&硬件堆栈是从数据内存的顶部开始分配的,而软件堆栈是在它下面一定数量字节处分配。硬件堆栈和数据内存的大小是受在编译器选项中的目标装置项设定限制的。数据区从0x60 开始分配。在IO 空间后面是正确的。允许数据区和软件堆栈彼此相向生长。
&&&&& 如果你选择的目标装置带有32K 或64K 的外部SRAM,那么堆栈是放在内部SRAM的顶部而且向低内存地址方向生长。参考程序和数据内存的使用。任意一个程序失败的重要原因是堆栈溢出到其它数据内存的范围,两个堆栈中的任意一个都可能溢出,并且当一个堆栈溢出时会偶然产生坏的事情,你可以使用堆栈检查函数检测溢出情况&。
关于堆栈检查函数:
&&&& 启动代码在硬件堆栈和软件堆栈的最低字节分别写进一个代码(0xaa),把这个代码称为警戒线。如果硬件堆栈和软件堆栈如果溢出过,则警戒字节的代码(0xaa)就会被改变,堆栈检查函数就是通过检查这两个堆栈的最低字节的代码是否被改变来判断两个堆栈是否溢出。通过调用_StackCheck(void)函数来检查堆栈溢出,如果警戒线字节中的代码仍然保持正确的值,那么函数检查通过,没有溢出。如果堆栈溢出,那么警戒线字节将可能被破坏,_StackCheck(void)函数检查到警戒线判断字节中的代码被改变,就判断相应的堆栈溢出(当程序堆栈溢出,程序可能运行不正常或偶然崩溃),该函数再调用函数_StackOverflowed(char&c),如果参数是1,那么硬件堆栈有过溢出;如果参数是0,那么软件堆栈曾经溢出。
&&& 在使用堆栈检查函数时应注意以下几点:
1、在使用堆栈检查函数时,前必须用#i nclude&&macros.h&预处理。
2、如果使用自己的启动文件,在ICCAVR6.20以后的版中,如果使用的启动文件中没有警戒线的内容,ICCAVR也会自动添加警戒线。而在ICCAVR6.20以前的版本中,必须自己添加该部分内容,否则生成的代码中堆栈分配将不带警戒线。
3、如果使用动态内存分配,必须跳过警戒线字节_bss_end来分配您的堆(即增加一个字节),详见内存分配函数说明
4、当_StackCheck(void)函数检测到警戒线字节被改变,则会调用一个默认的_StackOverflowed&函数来跳转到程序存储器0的位置(复位向量地址)。可以指定或重新编写一个新的函数来代替它,例如可以用新函数来指示是哪个堆栈溢出等,但这个函数也不可能执行太多的功能或让程序恢复到正常状态。因为堆栈溢出后,会更改掉一些有用的数据,引起不可预测的错误,甚至使程序死机。
下面用一个简单的实例来说明堆栈检查函数的作用:
init(&)&&&&&&&&&&&&&&&&&&&&&&&&&&&//调用初始化程序
float&a,b;
printf(&a&=&%f\n&,&a);
printf(&b&=&%f\n&,&b);
_StackCheck(&);&&&&&&&&&&&&&&&&&&&//调用堆栈检查函数
_StackOverflowed(char&c)
if&(c&==&1)
puts(&trashed&HW&stack&);&&&&&&&&//硬件堆栈溢出
puts(&trashed&SW&stack&);&&&&&&&&&//软件堆栈溢出
原文地址:/michael1517/item/7ccfb411b8a41be75f53b1d3
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:80508次
排名:千里之外
评论:16条
(3)(1)(1)(1)(1)(2)(2)(1)(5)(1)TMS320C2XX的软件堆栈
TMS320C2XX的软件堆栈
发布: | 作者: | 来源:
| 查看:90次 | 用户关注:
型号:TMS320C2XX关键字:DSP,堆栈,TMS320C2XX简介:介绍了对德州仪器(TI)公司的TMS320C2XX系列DSP芯片的8级硬件堆栈进行软件扩展的方法 ,给出了在内存中扩展堆栈的两个宏定义和中断服务程序 下载:点击下载
型号:TMS320C2XX关键字:DSP,堆栈,TMS320C2XX简介:介绍了对德州仪器(TI)公司的TMS320C2XX系列DSP芯片的8级硬件堆栈进行软件扩展的方法 ,给出了在内存中扩展堆栈的两个宏定义和中断服务程序 下载:点击下载
本页面信息由华强电子网用户提供,如果涉嫌侵权,请与我们客服联系,我们核实后将及时处理。
应用与方案分类
&&& 目前,处理器性能的主要衡量指标是时钟“硬件堆栈”开发工具问世,让多媒体研发人员开发更简单
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
飞思卡尔半导体公司表示,通过一套“硬件堆栈”开发工具套件,设计面向i.MX应用处理器的消费电子多媒体设备变得更为简单。正如一个软件堆栈分为应用、网络和操作系统层一样,i.MX硬件堆栈将原型制作任务分成三个层级:处理器、调试和外围设备。i.MX产品开发套件(PDK)配置的独特之处在于,它可以在调试之后将中间层消除,以使得原型可以适合一个接近消费电子最终形状的小型封装。飞思卡尔公司多媒体应用部门产品管理总监Ken Obuszewski表示:“我们重新设计了PDK,让所有调试电路可以适用到一个中间层板上 - 处理器板位于底部,所有外围设备即我们所说的个性模块位于顶层。很多OEM都可以在调试后将较大的调试板从堆栈中间移出来,以使得两块更小的板可以被包含到大小更接近最终产品的一个外壳中。”i.MX处理器被用于各种多媒体应用,包括消费电子、汽车、工业领域 - 从Creative Labs公司的便携MP3播放器,到福特的Sync等汽车媒体管理器,再到来自VirtualLogix公司的工业可视化平台。在此之前,开发人员要么不得不在显示原型之前设计其自己的硬件,要么展示外形比最终产品大出数倍的原型。而现在,他们只需要将大的中间层调试板去处,就可以展示小外形的原型。i.MX的底层处理器板上有一个基于ARM-1136内核的i.MX31处理器,以及内存和功率管理芯片。中间的调试板有调试端口,包括串行端口、以太网和JTAG接口。而最顶层的“个性”板则配备了显示屏、触摸屏、加速计、Wi-Fi和蓝牙等外围设备。这三层都符合有害物质限制(RoHS)标准。飞思卡尔最近宣布加入Windows Embedded Partner计划。采用Windows Embedded CE操作系统而不是Linux系统的开发人员将从此获益。
您的昵称:
美国的游客
(您将以游客身份发表,请 | )
PDK是什么?
PDK,PDK是什么? 通过电子工程专辑网站专业编辑提供PDK的最新相关信息,掌握最新的PDK的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
i.MX是什么?
i.MX,i.MX是什么? 通过电子工程专辑网站专业编辑提供i.MX的最新相关信息,掌握最新的i.MX的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
pdk是什么?
pdk,pdk是什么? 通过电子工程专辑网站专业编辑提供pdk的最新相关信息,掌握最新的pdk的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
应用处理器是什么?
应用处理器,应用处理器是什么? 通过电子工程专辑网站专业编辑提供应用处理器的最新相关信息,掌握最新的应用处理器的最新行业动态资讯、技术文萃、电子资料,帮助电子工程师自我提升的电子技术平台.
新添订阅功能,提供全面快捷的资讯服务!
关注电子工程专辑微信
扫描以下二维码或添加微信号“eet-china”
访问电子工程专辑手机网站
随时把握电子产业动态,请扫描以下二维码
5G网络在提供1Gbps至10Gbps吞吐量方面具有很好的前途, 并且功耗要求比今天的网络和手机都要低,同时还能为关键应用提供严格的延时性能。本期封面故事将会与您分享5G的关键技术发展,以及在4G网络上有怎样的进步。
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。
推荐到论坛,赢取4积分PIC硬件堆栈与软件堆栈
> PIC硬件堆栈与软件堆栈
PIC硬件堆栈与软件堆栈
硬件堆栈:或许也可以称作系统堆栈,是位于片内RAM区。有人说,只要能使用PUSH,POP指令的单片机,都可以说含有硬件堆栈。这样的说法我个人觉得不是很全面。通过指令进行压栈和出栈操作只是系统堆栈中的一种操做。系统堆栈还可以被隐含调用。例如,当调用子程序时,系统会主动把断点压入堆栈,并不需要用户通过指令操作。系统堆栈可以用来保存数据,或在任务子程序间传递数据。通常,栈底设在内存的高端,也就是把内存的最高一段空间划作栈区。这些都是向下生长栈。栈指针可能是专用的寄存器,也可能借用一通用寄存器。也有单片机是在数据区里划一块作栈区,可能是向上生长,也可能是向下生长。软件栈是你自己通过编码实现的。你在内存里划一块作栈区,用一个变量作栈指针。本文引用地址:软件堆栈:也可以说是用户堆栈。可以被定义在内部或外部RAM中。它是用户为任务建立的专用数据堆栈,与系统堆栈的数据区是隔开的。它可以保存用户想保存的任何寄存器和状态字。 MPLAB C18的软件堆栈是向上生长的堆栈数据结构,编译器把函数参数和auto存储类别的局部变量放入软件堆栈中。软件堆栈与PICmicro单片机用于保存函数调用返回地址的硬件堆栈不同。栈指针(FSR1)始终指向下一个可用的堆栈地址。MPLAB C18使用FSR2作为帧指针,这样可以快速访问局部变量和参数。函数被调用时,其基于堆栈的参数以自右向左的顺序压入堆栈,然后再调用这个函数。进入函数时,最左端的函数参数位于软件堆栈的顶端。帧指针指向堆栈中把基于堆栈的参数和基于堆栈的局部变量分隔开的地址。基于堆栈的参数位于帧指针的下方,而基于堆栈的局部变量位于帧指针的上方。刚进入C函数时,被调用函数把FSR2的值压入堆栈,并把FSR1的值复制到FSR2,从而保存了调用函数的现场并初始化了当前函数的帧指针。然后函数基于堆栈的局部变量的总长度被加到栈指针,并为这些变量分配堆栈空间。基于堆栈的局部变量和基于堆栈的参数则根据其相对于帧指针的偏移量来引用。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一403 Forbidden
403 Forbidden}

我要回帖

更多关于 iphoneqq语音变成电话 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信