嵌入式C语言编程.ppt_第1页
嵌入式C语言编程.ppt_第2页
嵌入式C语言编程.ppt_第3页
嵌入式C语言编程.ppt_第4页
嵌入式C语言编程.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NanGuanEmbeddedSystemLabSchoolofInformationScienceandEngineeringNortheasternUniversity Memory 2005 10 7 Declaration 以下涉及内容未必对所有的嵌入式系统都适用 只针对共性问题进行探讨所举例子仅为示意 Memory Volatile关键字 Thevolatilekeywordisatypequalifierusedtodeclarethatanobjectcanbemodifiedintheprogrambysomethingotherthanstatements suchastheoperatingsystem thehardware oraconcurrentlyexecutingthread 定义存储器映射寄存器时 必须使用volatile关键字 defineSCI 01 volatileunsignedint 0 x5808 Memory Objectsdeclaredasvolatilearenotusedinoptimizationsbecausetheirvaluecanchangeatanytime Thesystemalwaysreadsthecurrentvalueofavolatileobjectatthepointitisrequested evenifthepreviousinstructionaskedforavaluefromthesameobject Also thevalueoftheobjectiswrittenimmediatelyonassignment While SCI 01 0 tempVarInt RXBUF Memory Oneuseofthevolatilequalifieristoprovideaccesstomemorylocationsusedbyasynchronousprocessessuchasinterrupthandlers intmain void while 1 if i dosomething Interruptserviceroutine interruptvoidISR 2 void i 1 Memory 栈和堆C语言中的存储区域 1 全局变量区 程序开始分配 程序结束释放2 常量区 程序开始分配 程序结束释放3 堆 程序员分配释放4 栈 编译器自动分配释放 Memory inta 0 全局初始化区char p1 全局未初始化区main intb 栈chars abc 栈char p2 栈char p3 123456 123456 0在常量区 p3在栈上 staticintc 0 全局 静态 初始化区p1 char malloc 10 p2 char malloc 20 分配得来得10和20字节的区域在堆区 strcpy p1 123456 123456 0放在常量区 编译器可能会将它与p3所指向的 123456 优化成一块 Memory 栈是系统提供的数据结构 是C程序运行的基础任何系统都提供栈指针寄存器通过栈实现程序跳转等基本程序操作一个未经任何初始化的程序main subFunc i 执行时会出现问题 Memory 硬件堆栈与软件堆栈硬件堆栈当CPU进入子程序或进入中断服务程序时 返回地址被自动压入硬件堆栈软件堆栈函数的参数是通过软件堆栈传递的 函数的出口地址存放在软件堆栈里 函数用到的局部变量也是在软件堆栈里分配的 都是必须的 Memory POP PUSHPUSH把累加器的内容复制到堆栈顶部POP指令把堆栈顶部的数值复制到累加器POPD PSHDPSHD把数据存储器的值压入软件堆栈顶部POPD指令把数值从软件堆栈顶部弹出至数据存储器软件压栈与弹栈SP SP Memory voidmain void unsignedinti Test 2 10 intTest inti intj inttemp temp 0 returntemp AADD 3 SPMOVT1 SP 01h MOVT0 SP 00h MOV 0 SP 02h MOVAR1 SP 02h MOVAR1 T0AADD 3 SPRET MOV 10 T1MOV 2 T0CALLTest AADD 4 SPPOPD SP 00h MOVT1 SP 02h MOVT0 SP 01h MOV 0 SP 03h MOVAR1 SP 03h MOVAR1 T0PSHD SP 00h AADD 3 SPRET MOV 10 T1MOV 2 T0CALLTest Memory voidmain void unsignedinti interruptvoidTest inttemp temp 0 return AADD 1 SPMOV 0 SP 00h AADD 1 SPRET Memory 堆是由C函数库提供的数据结构由malloc realloc 产生使用后要free 掉 堆的数据结构是怎样的 Memory defineNULL0 defineMEMSIZE 1024 8 typedefdoubleAlign typedefunionheader struct unionheader next unsignedusedsize unsignedfreesize s Aligna Header staticHeadermem mem 1 MEMSIZE 1 staticHeader memptr mem voidfree void ap Header bp p prev bp Header ap 1 for prev memptr p memptr s next p bp void malloc unsignednbytes Header p newp unsignednunits nunits nbytes sizeof Header 1 sizeof Header 1 for p memptr p s next memptr Memory 高效地使用堆Example 如何动态定义二维数组 Memory main inttemp intn m int a a int malloc sizeof int n m a i j temp return 1 Memory main inttemp inti n m int a a int malloc sizeof int n for i 0 i n i a i int malloc sizeof int m a i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论