- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
项目驱动——深入理解嵌入式C
* 电子实验中心 深入理解嵌入式C 项目驱动 --单片机应用设计技术 5、深入理解嵌入式C 4、函数 3、存储器类型语言 2、开发工具与SDDC扩展 1、P89V51简介 P89V51RB2功能框图 P89V51RB引脚图 开发工具与最小系统 开发工具简介: Tkstudio软件—内置编辑器的多内核编译/调试环境。 支持80C51、ARM、AVR等内核。实验要学习使用。 SDCC (Smart Device C Compiler)是为8位微控制器开发的免费C编译器。 专门针对80C51资源做了扩展,特别是存储器类型、指针、函数方面做了扩充。 C51中数据声明的格式 [类型说明符][修饰符] 标识符[=初值]…… 例: unsigned char code Flag = 0x0f ; 类型说明符 修饰符(存储器类型) 标识符 初值 这个定义给出的内容是:定义一个无符号的字符型变量,该变量的名字是Flag,初值为0x0f,该变量存放在ROM空间中。 说明:如果在一个定义中,没有修饰符,即没有说明存放的位置,则根据编译器编译模式的不同,有所区别。见PPT11页。具体数据类型见教材22页表1.3 存储类型 DATA:直接寻址的片内数据存储器 BDATA:可位寻址的片内存储器 IDATA:间接寻址的片内数据存储器 PDATA:分页寻址的片外数据存储器 XDATA:片外数据存储器 CODE:程序存储器 具体例子见教材23页 存储模式 1、小模式:small 默认片内数据存储器。和存储类型声明为data一样。 2、中模式:medium 默认外部数据区同一页中,和用pdata声明一样。 3、大模式:large 默认外部数据区64K区域(不限定同一页),和用xdata声明一样。 一般都使用small编译。 在TKS中如何选择存储模式: 工程—配置目标—目标输出界面最右边选择 指针变量的存储 请看如下指针定义: xdata unsigned char *data p; data unsigned char *xdata p; xdata unsigned char *p; 显式指针p存放于内部RAM,指向外部RAM 显式指针p存放于外部RAM,指向内部RAM 显式指针p存放于默认存储空间,指向外部RAM code unsigned char code *p; 显式 存于code 指向 code unsigned char *xdata p; 通用 存于xdata unsigned char *p; 通用 存于默认存储空间 char(*data fp)(void); 存放于data的函数指针 通用指针和显式指针 1、通用指针 和标准C的指针声明相同 Char *str; Int *pnum; 用3个字节保存,最高字节表示数据空间信息,低两字节用来保存地址本身。 最高字节可能值如下: 0x00—外部数据存储器RAM(xdata/far) 0x40—内部数据存储器RAM(idata/near) 0x60—外部数据存储器页RAM (pdata) 0x80—代码存储器ROM(code) 通用指针可以访问所有空间(除了bit),使用方便但速度慢,很多库函数使用通用指针。 指针2 2、显式指针 定义时包括一个存储类型说明,并且总是指向次类型存储器空间。 data chat data *p xdata int *numtab code long data *powtab 由于存储类型编译时已经确定,因此最多只需要两个字节。指向idata、data、pdata(内部RAM,256单元以内)的指针只用1个字节保存。指向code和xdata的指针用2个字节保存。 显式指针效率高,速度快,但指向确定因此不太方便。 两种指针效率对照表见教材28页表1.5 函数1 1、函数参数和局部变量的存储问题 参数和局部变量可以分配(存储)在堆栈或一般数据空间(RAM)里。SDCC编译器默认分配这些变量到内部RAM中(小模式)或外部RAM(中模式或大模式)。 默认分配就导致了这些变量或参数在使用后是可以被覆盖的,因此这样的函数都不可重入。 如何分配局部变量和参数到堆栈: 1)函数声明里使用“reentrant”关键字使参数和局部变量被分配到堆栈中,从而使函数变得可重入。 2)函数定义前加上“#pragma stackauto” 3) 使用编译参数--stack-auto 但这样会占用堆栈空间,因此要尽量少用。 函数2 2、覆盖 为节省内存,编译器对未保存在堆栈中的局部变量和参数会进行覆盖(如果可能—small模式下,函数没有调用其它函数,且次函数是不可重入的)。 有时候需要避免参数被覆盖,可以在函数定义前加上“#pragma noover
您可能关注的文档
最近下载
- 四川大学数据库系统原理期末考试试题.pdf VIP
- 生猪代养承包协议:2024年新型合作模式版B版.docx VIP
- 2025年西藏自治区社区工作者招聘考试(公共基础知识)历年参考题库含答案详解(5套).docx VIP
- 工商管理本科46-14159商业伦理与企业社会责任模拟题(二).docx VIP
- 工商管理本科46-14159商业伦理与企业社会责任模拟题(一).docx VIP
- 2024宁夏理工学院教师招聘考试真题及答案.docx
- 2024-2025学年广东省广州市越秀区数学六年级第一学期期末达标检测试题含解析.doc VIP
- 52 非线性泛函分析 [郭大钧 编著] 2015年版.pdf VIP
- 01kdv8000a一代软硬件介绍及配置.pdf VIP
- 《农业企业经营与管理》课件——项目四 农业企业的经营.pptx VIP
原创力文档


文档评论(0)