MCC18使用技巧.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MCC18使用技巧

MCC18使用技巧 MCC18 FAQ4 如何在数据存储器中创建一个大对象( 256 字节)? 默认情况下, MPLAB C18 假设对象不超过存储区边界。要安全使用大于256 字节的 对象,需要执行下列步骤: 1. 必须使用#pragma idata 或#pragma udata 伪指令将对象分配到恰当的段 中: #pragma udata buffer_scn static char buffer[0x180]; #pragma udata 2. 必须通过指针访问对象: char * buf_ptr = buffer[0]; ... // examples of use buf_ptr[5] = 10; if (buf_ptr[275] 127) ... 3. 必须在链接描述文件中创建一个跨越多个存储区的区域: - 修改前的链接描述文件: DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF - 修改后的链接描述文件: DATABANK NAME=big START=0x200 END=0x37F PROTECTED DATABANK NAME=gpr3 START=0x380 END=0x3FF 4. 必须通过在链接描述文件中添加SECTION 伪指令,将对象所在的段(在第1 步 中创建)分配到新的区域(在第3 步中创建): SECTION NAME=buffer_scn RAM=big MCC18 FAQ3 如何修复数据存储器段的“unable to fit section”(不能分配到段)错误? MPLAB C18 提供了两种不同的数据存储器段类型: ? udata——包含静态分配的未初始化用户变量 ? idata——包含静态分配的已初始化用户变量 在MPLAB C18 中每种段类型都有默认的段(如.udata_foobar.o)。 例如,给出以下位于foobar.c 中的源代码: ? ? ? ? unsigned char foo[255]; ? ? ? ? int bar; ? ? ? ? void main (void) ? ? ? ? while (1) ? ? ? ? ; ? ? ? ? } 该代码会导致下列错误: Error - section ‘.udata_foobar.o’ can not fit the section. Section ‘.udata_foobar.o’ length = 0 有两种方法可解决这个错误: 1. 将foobar.c 分成多个文件: ? ? ? ? foo.c ? ? ? ? unsigned char foo[255]; ? ? ? ? void main (void) ? ? ? ? { ? ? ? ? while (1) ? ? ? ? ; ? ? ? ? } ? ? ? ? bar.c ? ? ? ? int bar; 2. 使用#pragma udata 伪指令创建一个独立的段,包含foo 和bar 变量: ? ? ? ? foobar.c ? ? ? ? #pragma udata foo ? ? ? ? unsigned char foo[255]; ? ? ? ? #pragma udata bar ? ? ? ? int bar; ? ? ? ? void main (void) ? ? ? ? { ? ? ? ? while (1) ? ? ? ? ; ? ? ? ? } 或者参照FAQ4 FAQ1 在MCC18里,怎样将浮点数转成ASCII 以便可以用诸如printf之类的库函数显示? FAQ1: 在MCC18里,怎样将浮点数转成ASCII 以便可以用诸如printf之类的库函数显示? 方法:为了不使printf库函数代码过大,MCC18 printf不支持浮点(%f %g以及%h类型)输出。如果要printf支持 浮点输出,库函数代码大小将可能会加倍。那么,如何用printf来显示浮点数呢?我们知道printf支持定点数显示 ,这样我们就可以用如下示例演示代码来用printf显示浮点数。仅供参考。 /*************************************************** * 以下代码用来演示用printf在USART上显示浮点数。? ?? ?? ?*? ?? ?? ?? ?? ?? ?? ?? ? *注意:将要显示的浮点数转成两个变量,分别表示? ?? ?? ?? ?* *浮点数小数点左边部分和右边部分。小数点右边不? ?? ?? ?? ?* *需要的数据可按需要用适当的

文档评论(0)

cuotian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档