- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有 PIC18F87J11 系列,我正在使用 MPLAB C18 编译器。我可以给以下变量的最大字节数是多少。
我知道我必须修改链接器文件以达到超过 256 个字节。
#pragma udata CONNECTION_TABLE
这是我干净的链接器文件。
// File: 18f87j11_g.lkr
// Generic linker script for the PIC18F87J11 processor
#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN
LIBPATH .
#IFDEF _CRUNTIME
#IFDEF _EXTENDEDMODE
FILES c018i_e.o
FILES clib_e.lib
FILES p18f87j11_e.lib
#ELSE
FILES c018i.o
FILES clib.lib
FILES p18f87j11.lib
#FI
#FI
#IFDEF _DEBUGCODESTART
CODEPAGE NAME=page START=0x0 END=_CODEEND
CODEPAGE NAME=debug START=_DEBUGCODESTART END=_CEND PROTECTED
#ELSE
CODEPAGE NAME=page START=0x0 END=0x1FFF7
#FI
CODEPAGE NAME=config START=0x1FFF8 END=0x1FFFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
#IFDEF _EXTENDEDMODE
DATABANK NAME=gpre START=0x0 END=0x5F
#ELSE
ACCESSBANK NAME=accessram START=0x0 END=0x5F
#FI
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF
DATABANK NAME=gpr5 START=0x500 END=0x5FF
DATABANK NAME=gpr6 START=0x600 END=0x6FF
DATABANK NAME=gpr7 START=0x700 END=0x7FF
DATABANK NAME=gpr8 START=0x800 END=0x8FF
DATABANK NAME=gpr9 START=0x900 END=0x9FF
DATABANK NAME=gpr10 START=0xA00 END=0xAFF
DATABANK NAME=gpr11 START=0xB00 END=0xBFF
DATABANK NAME=gpr12 START=0xC00 END=0xCFF
DATABANK NAME=gpr13 START=0xD00 END=0xDFF
#IFDEF _DEBUGDATASTART
DATABANK NAME=gpr14 START=0xE00 END=_DATAEND
DATABANK NAME=dbgspr START=_DEBUGDATASTART END=_DEND PROTECTED
#ELSE //no debug
DATABANK NAME=gpr14 START=0xE00 END=0xEFF
#FI
DATABANK NAME=gpr15 START=0xF00 END=0xF3F
DATABANK NAME=sfr15 START=0xF5A END=0xF5F PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
#IFDEF _CRUNTIME
SECTION NAME=CONFIG ROM=config
#IFDEF _DEBUGDATASTART
STACK SIZE=0x100 RAM=gpr13
#ELSE
STACK SIZE=0x100 RAM=gpr14
#FI
#FI
这是我修改后的链接器文件,为 CONNECTION_TABLE 提供超过 256 个字节。
// File: 18f87j11_g.lkr
// Generic linker script for the PIC18F87J11 processor
#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN
LIBPATH .
#IFDEF _CRUNTIME
#IFDEF _EXTENDEDMODE
FILES c018i_e.o
FILES clib_e.lib
FILES p18f87j11_e.lib
#ELSE
FILES c018i.o
FILES clib.lib
FILES p18f87j11.lib
#FI
#FI
#IFDEF _DEBUGCODESTART
CODEPAGE NAME=page START=0x0 END=_CODEEND
CODEPAGE NAME=debug START=_DEBUGCODESTART END=_CEND PROTECTED
#ELSE
CODEPAGE NAME=page START=0x0 END=0x1FFF7
#FI
CODEPAGE NAME=config START=0x1FFF8 END=0x1FFFD PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
#IFDEF _EXTENDEDMODE
DATABANK NAME=gpre START=0x0 END=0x5F
#ELSE
ACCESSBANK NAME=accessram START=0x0 END=0x5F
#FI
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=CONNECTION_TABLE START=0x100 END=0x999 PROTECTED
SECTION NAME=CONNECTION_TABLE RAM=CONNECTION_TABLE
DATABANK NAME=gpr10 START=0xA00 END=0xAFF
DATABANK NAME=gpr11 START=0xB00 END=0xBFF
DATABANK NAME=gpr12 START=0xC00 END=0xCFF
DATABANK NAME=gpr13 START=0xD00 END=0xDFF
#IFDEF _DEBUGDATASTART
DATABANK NAME=gpr14 START=0xE00 END=_DATAEND
DATABANK NAME=dbgspr START=_DEBUGDATASTART END=_DEND PROTECTED
#ELSE //no debug
DATABANK NAME=gpr14 START=0xE00 END=0xEFF
#FI
DATABANK NAME=gpr15 START=0xF00 END=0xF3F
DATABANK NAME=sfr15 START=0xF5A END=0xF5F PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
#IFDEF _CRUNTIME
SECTION NAME=CONFIG ROM=config
#IFDEF _DEBUGDATASTART
STACK SIZE=0x100 RAM=gpr13
#ELSE
STACK SIZE=0x100 RAM=gpr14
#FI
#FI
如您所见,我的 CONNECTION_TABLE 从 0x100
开始,在 0x999
结束。如果我想给它更多的字节,我能给它的最大值是多少?
如果仔细观察,您会发现我有以下代码。
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
这是否意味着 CONNECTION_TABLE 不能超过 0xFFF
?
我非常想将我的CONNECTION_TABLE 的字节数加倍,我该怎么做?
目前我让它从 0x100
开始到 0x999
结束,我可以将结尾更改为 0x1332
吗?还是那行不通,因为我会越过边界 0xFFF
?
谢谢!
最佳答案
下载 PIC18F87J11 datasheet并仔细阅读部分:5.3 数据存储组织
图 5-7:PIC18F87J11 系列器件的数据存储器映射显示了存储器的组织方式。
关于c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17182064/
我用 PIC 汇编语言编写了一些测试代码,我无意在实际的 PIC MCU 上运行这些代码,而是打算生成跟踪文件,以便以后可以使用单独的工具对其进行分析。因此,我需要一种方法来永久停止特定代码点中的模拟
我在 Windows(XC32 v1.40 编译器)上使用带有 PIC32 的 MPLAB X (3.26)。作为审查的一部分,我正在尝试使用夹板对某人的代码进行静态代码分析。我已经对大部分编译器定义
我在 linux 上使用 MPLABX IPE 1.95。出于某种原因,程序员决定使主窗口不可调整大小。 所以不可能正确地看到内存 View 。如果内存 View 没有打开,我什至看不到输出窗口的底部
在我的代码中,我添加了带有版本号的时间戳。 const char prog_id[] = { __TIME__ " " __DATE__ "Foo project V1.3" } ; 输出: 11:0
我尝试为 PIC32 构建 Microchip USB 协议(protocol)栈文件,但 MPLAB X IDE 给出错误,提示构建失败。 以下是构建时的错误。 系统找不到指定的路径。make[2]
我正在 MikroC PRO for PIC v6.0.0 中编写代码,我想使用 PICKit3 和 MPLab 对其进行调试。我正在尝试使用 MPLab v8.92 和 MPLabX v2.05。当
Microchip PIC MPLAB (MCC18) 编译器将其内存分段为 256 个 block (0x100)。 如何创建大于 256 字节的数组? char buffer[256]; 为了达到
我收到了这个消息,这很烦人。有人能看到错误吗?并知道如何解决它吗? warning: (373) implicit signed to unsigned conversion unsigned cha
我正在解析一个用逗号分隔的字符串并打印这些值,但由于某种原因,如果我在 MPLAB C 编译器上运行该代码,则该代码仅打印第一个值。但是,如果我在 Codeblocks 上运行此代码,它会打印出所有值
以下代码在 CodeBlocks 编译器上运行良好,但在 MPLAB C18 编译器上我没有得到相同的结果。我正在使用 PIC18 微 Controller 。 代码 int d[6];
在 MPLAB IDE 中,数据类型的大小是多少(int、unsigned int、float、unsigned float, char...)? 最佳答案 如果不知道要为哪个 CPU 编译代码,这很
它似乎不像其他可识别的关键字那样突出显示,但我没有收到编译器错误。 有没有办法检查程序集?我不在 unix 环境中,所以我不能执行 objdump,但是有没有其他方法可以查看适当的文件? 谢谢! 最佳
我有主文件: #include "modbus.h" void main(void) { modbus_frame_t frame; // (...) // ERROR O
我有一个混合 C 和汇编的 PIC18F25K50 项目;我想做的大部分事情我都可以在 Assembly 中轻松管理(并且必须提高效率),但是我更关心开发的易用性的某些部分使用 C。我实际上有几个,我
我正在使用带有 PIC18 的 MPLAB C18 编译器。我的问题是,即使此代码在 CodeBlocks 上 100% 有效,我也无法打印所有值。我花了 3 个多小时在谷歌上搜索这个问题,但我不明白
我最近开始使用 MPLAB,但对于使用 Eclipse 和 VS IDE 的人来说,它非常有限。您知道任何免费的 IDE 或如何将 Ecplise 或 Netbeans 配置为 PIC 开发吗? 谢谢
我在 mplab 编译器用户指南中搜索此内容,但没有找到任何内容。我在这里问它是为了确认我不是盲人或其他什么: GCC 编译器提供了一些非常有趣和有用的内置函数,例如 __builtin_consta
我编写了一个使用 Timer0 中断的程序。 我似乎无法编译我的代码,第 14 行出现错误,声明中没有标识符。 这是完整的代码: #include #define _XTAL_FREQ 4000000
我开发了这个程序,该程序应该在 LCD 的顶行显示 1-99 之间的所有奇数,每次迭代之间有 0.5 秒的延迟。 但是,当我运行下面的代码时,我的输出只是“13”然后是“133”,我很困惑为什么会这样
我正在使用带有 PIC16F628 的 velleman K8048 pic 程序板。几年前,我在使用 .asm 与该板/芯片之前成功进行了编程。 这次,我想学习使用C语言编程。我已经安装了MPLAB
我是一名优秀的程序员,十分优秀!