memory - 如何在 MPLAB 中增加内存块的大小?

标签 memory embedded pic microchip

Microchip PIC MPLAB (MCC18) 编译器将其内存分段为 256 个 block (0x100)。

如何创建大于 256 字节的数组?

char buffer[256];

为了达到 256,我需要使用 #pragma

制作一个单独的段
#pragma udata segment_name
char buffer[256];
#pragma udata

所以我可以强制 MCC18 分配更大的缓冲区吗?还是合并两个内存段?

最佳答案

粘贴答案来自:

http://forum.microchip.com/printable.aspx?m=39357

以防万一它消失。

In Three Easy Steps Step 1: Assign the variable into a named section in source code:

#pragma udata big_scn
char big_array[0x180];
#pragma udata

Step 2: Create the larger region in the linker script: Before:

DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=gpr4 START=0x400 END=0x4FF

After:

DATABANK NAME=big_scn START=0x300 END=0x47F PROTECTED
DATABANK NAME=gpr4    START=0x480 END=0x4FF
SECTION  NAME=big_scn RAM=big_scn

Step 3: Reference only through a pointer:

char *big_array_ptr = &big_array[0];
big_array_ptr[0x100] = 5;
while( big_array_ptr[x] != 20 )

注意:我相信您仍然可以直接引用数组而不是使用指针。似乎对我有用。

在以下文档中可以找到相同的信息:

MPLAB C18 C Compiler Getting Started Guide

第 104 页。

关于memory - 如何在 MPLAB 中增加内存块的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529252/

相关文章:

c++ - 让 Howard Hinnant 的 short_alloc(C++11 版本)在 Visual C++ 2015 中编译

c - NTP 将自 1900 年 1 月 1 日以来的秒数转换为当前日期

c - 结构数组中的填充

c - 在 PIC16/18 中捕获中断之前是否可以知道 PCL 的值?

c - 使用较短的延迟读取 PIC 的 ADC 模块的效果(在 PIC C 中)

java - 为什么这个java进程不释放内存?

c++ - 如何找出我的 Linux 应用程序的内存占用情况?

pointers - 戈朗 : interface func to print memory address

c - ARM Cortex-M4 : Running code from external flash

c - MikroC 中的嵌套调用限制是什么?