因此、在我设置的代码中、我担心的部分是容纳两个128字节数组。 为了将它们放置在特定的 RAM 部分(称作".ram_data")中、我使用了`#pragma 位置`并使用`memset`设置它们的内容。 接下来、我要将数据从一个数组复制到另一个数组、这可以通过`memcpy`来完成、但随后将初始数据数组移动到`.ram_data`段中的新位置。 当程序中已使用 LOCATION pragma 时、是否可以执行此操作? 我`的另一个选项是使用`` pragma DATA_SECTION`、但随后我遇到了一些问题、其中`.bss`段的大小不够大、即使我没有将数组放置在`.bss`段中、而是我创建的.ram_data 段中。
通过使用#pragma 指令设置数据数组后如何更改其存储器地址、可以总结我的问题。 下面列出了我的代码的一部分。 谢谢!
#include #include #include #include "ram_data_ccs_mem.h" #define INTERRUPT_VALUE 0x0A //中断计数器(计算请见上面) #define array_step 0x80 //增加/减少数据移动(128字节) #define array_size 0x80 //数据大小(128字节) //函数声明*/ void configWDT (void); //停止看门狗计时 器 void configClocks(void); //选择 ACLK/8作为频率 空 CONFIGGPIO (空); //禁用/启用 GPIO 引脚 void configTimerA (void); //为中断计数器 uint32_t * memory_copy (uint32_t *、uint32_t *、char)配置 TimerA;//在 RAM 周围移动数据并清除以前的位置 //全局变量*/ 静态易失性 unsigned char toggle_LED; //切换红色 LED (用于调试) 静态易失性无符号短整型 intr_flg; //计数 TimerA 的中断数 //强制处理器将数据数组放置在 RAM 中*// #pragma DATA_SECTION (dest_loc、".ram_data") //curch_loc[128]; // RAM 中数组的当前位置 // char dest_loc[128]; // RAM 中针对数组 #pragma LOCATION (cur_loc、0x220) char cur_loc[128]的下一个内存位置; #pragma LOCATION (dest_loc、0x2A0) char dest_loc[128]; int main (void) { /*初始化全局变量*/ TOGGLE_LED = 0; INP_Flg = 0; //static char reverse_dataaflow = 0; /*配置处理器的看门狗计时器、时钟、GPIO 引脚和 TimerA */ configWDT(); configClocks(); configGPIO(); configTimerA(); /*初始化要在整个 RAM 中移动的数据数组*/ int dest = RAM_DATA_START_ADDR + array_step; //起始位置是可用 RAM 的起始位置 memset (cur_loc、'#'、array_size); //用任意数据填充存储器(用于调试) memset (dest_loc、'\0'、RAM_DATA_END_ADDR - RAM_DATA_START_ADDR + array_step);//清除剩余的 RAM_DATA sapce __no_operation(); //(用于调试) 。}