打印

PIC新手,请大家帮忙看看,谢谢!

[复制链接]
1199|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reverse_L0111|  楼主 | 2016-5-16 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译的时候错误提示如下:
Error - section '.idata_CRC16.o' can not fit the section. Section '.idata_CRC16.o' length=0x00000200
请问这是什么原因,搞了好久都没搞出来,急的很。。。。
沙发
JY-DX-JY| | 2016-5-16 09:48 | 只看该作者
idata-CRC16怎么定义的?

使用特权

评论回复
板凳
reverse_L0111|  楼主 | 2016-5-16 10:03 | 只看该作者
JY-DX-JY 发表于 2016-5-16 09:48
idata-CRC16怎么定义的?

#include  "CRC16.h"


const U16 CRCtbl[256] = {                                 
   0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,   
   0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,   
   0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,   
   0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,   
   0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,   
   0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,   
   0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,   
   0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,   
   0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,   
   0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,   
   0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,   
   0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,   
   0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,   
   0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,   
   0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,   
   0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,   
   0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,   
   0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,   
   0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,   
   0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,   
   0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,   
   0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,   
   0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,   
   0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,   
   0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,   
   0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,   
   0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,   
   0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,   
   0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,   
   0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,   
   0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,   
   0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 };


U16 CalCRC( U16 CRC, U8 databyte )           // first CRC crcdata=0xffff; ->CRC16-2
{                                                                     // first CRC crcdata=0x0000; ->CRC16-1
    return (CRC>>8)^CRCtbl[(CRC&0xFF)^databyte];               
}

这是.c文件,下面是.h文件,帮忙看看多谢


#ifndef  __CRC16_H
#define   __CRC16_H

typedef unsigned  char U8;
typedef unsigned  int  U16;

extern U16 CalCRC( U16 CRC, U8 databyte ) ;      //cal one byte CRC
#endif


使用特权

评论回复
地板
reverse_L0111|  楼主 | 2016-5-16 10:04 | 只看该作者
JY-DX-JY 发表于 2016-5-16 09:48
idata-CRC16怎么定义的?

#include  "CRC16.h"


const U16 CRCtbl[256] = {                                 
   0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,   
   0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,   
   0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,   
   0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,   
   0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,   
   0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,   
   0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,   
   0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,   
   0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,   
   0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,   
   0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,   
   0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,   
   0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,   
   0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,   
   0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,   
   0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,   
   0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,   
   0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,   
   0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,   
   0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,   
   0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,   
   0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,   
   0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,   
   0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,   
   0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,   
   0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,   
   0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,   
   0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,   
   0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,   
   0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,   
   0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,   
   0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 };


U16 CalCRC( U16 CRC, U8 databyte )           // first CRC crcdata=0xffff; ->CRC16-2
{                                                                     // first CRC crcdata=0x0000; ->CRC16-1
    return (CRC>>8)^CRCtbl[(CRC&0xFF)^databyte];               
}

这是.c文件,下面是.h文件,帮忙看看多谢


#ifndef  __CRC16_H
#define   __CRC16_H

typedef unsigned  char U8;
typedef unsigned  int  U16;

extern U16 CalCRC( U16 CRC, U8 databyte ) ;      //cal one byte CRC
#endif


使用特权

评论回复
5
JY-DX-JY| | 2016-5-16 10:36 | 只看该作者
你用的哪个片子?是不是空间不够了?

使用特权

评论回复
6
Latin_newday| | 2016-5-16 10:39 | 只看该作者
你用的是哪个型号?
感觉是片子空间不够了!
CRC校验不用查表法,改用计算法估计会省不少空间!

使用特权

评论回复
7
reverse_L0111|  楼主 | 2016-5-16 12:02 | 只看该作者
JY-DX-JY 发表于 2016-5-16 10:36
你用的哪个片子?是不是空间不够了?

PIC18F46K80,应该够用吧,程序没多大 啊

使用特权

评论回复
8
reverse_L0111|  楼主 | 2016-5-16 12:11 | 只看该作者
Latin_newday 发表于 2016-5-16 10:39
你用的是哪个型号?
感觉是片子空间不够了!
CRC校验不用查表法,改用计算法估计会省不少空间! ...

我把CRC16的定义直接写在main.c里面,编译后提示下面的错误
Error - symbol 'CRCtbl' has multiple definitions.
是说我重复定义了吗?
我查了没有重复定义啊

使用特权

评论回复
9
JY-DX-JY| | 2016-5-16 12:36 | 只看该作者
PIC单片机是分页的,是不是跨页了?

使用特权

评论回复
10
dongshan| | 2016-5-16 13:59 | 只看该作者
idata段是ram段, 提示是说放不下你定义一个数据, 你定义的数据长度为0x200字节(即512字节)

所以你应找原因,为什么你用了const u16 crctabl....,  数据却仍放到了idata段。

使用特权

评论回复
11
huarana| | 2016-5-16 14:28 | 只看该作者
啥编译环境也不说 - -

使用特权

评论回复
12
reverse_L0111|  楼主 | 2016-5-16 14:48 | 只看该作者
JY-DX-JY 发表于 2016-5-16 12:36
PIC单片机是分页的,是不是跨页了?

新手对分页跨页的概念都不清楚

使用特权

评论回复
13
reverse_L0111|  楼主 | 2016-5-16 14:52 | 只看该作者
dongshan 发表于 2016-5-16 13:59
idata段是ram段, 提示是说放不下你定义一个数据, 你定义的数据长度为0x200字节(即512字节)

所以你应找 ...

正常的话应该是放rom里面吧
U16是这样的
typedef unsigned  int  U16;

使用特权

评论回复
14
reverse_L0111|  楼主 | 2016-5-16 14:53 | 只看该作者
Latin_newday 发表于 2016-5-16 14:02
在下面是不是你要的答案!
http://www.51hei.com/bbs/dpj-21051-1.html

按照这个里面的第二种方法果然成功了,感激涕零

使用特权

评论回复
15
JY-DX-JY| | 2016-5-16 15:45 | 只看该作者
reverse_L0111 发表于 2016-5-16 14:53
按照这个里面的第二种方法果然成功了,感激涕零

看了一下那个链接,学习了。PIC18没用过

使用特权

评论回复
16
reverse_L0111|  楼主 | 2016-5-16 15:46 | 只看该作者
huarana 发表于 2016-5-16 14:28
啥编译环境也不说 - -

编译器PIC18

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

76

帖子

0

粉丝