共2条
1/1 1 跳转至页
44B0,44BLIB 求助,向各位大哥请教 44B0 的 44BLIB.C 中一段代码?

问
/************************************************
* NAME : 44BLIB.C *
************************************************/
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "option.h"
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#define STACKSIZE 0xa00 //SVC satck size(do not use user stack)
#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x500) // = 0xc7ff000
//SVC Stack Area:0xc(e)7ff000-0xc(e)7ffaff
extern char Image$$RW$$Limit[];
void *mallocPt=Image$$RW$$Limit;
#define STACKSIZE 0xa00 //SVC stack size(do not use user stack )
#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x55) //=0xc7ff000
//SVC Stack Area:0xc(e) 7ff000-0xc(e)7ffaff
extern char Image$$RW$$Limit[];
void *macllocPt=Image$$RW$$Limit;
void Port_Init(void)
{
rPCONA=0x1ff;
rPDATB=0x3ff;
rPCONB=0x3ff;
rPDATC=0xffff;
rPCONC=0x0f05ff55;
rPUPC=0x30f0;
rPDATD=0xff;
rPCOND= 0x0;
rPUPD = 0x0;
rPDATE=0x1ff;
rPCONE=0x25568;
rPUPE=0x0ff;
rPDATF=0x1ff;
rPCONF=0x20900a;
rPUPF=0x163;
rPDATG=0xff;
rPCONG=0x00ff;
rPUPG=0x0;
rSPUCR=0x7;
rEXTINT=0x0;
rNCACHBE0=(((Non_Cache_End)>>12)<<16)|((Non_Cache_Start)>>12);
}
这是 44B0 的测试代码中一段小程序: 44BLIB.C
请教:
问题1:
STACKSIZE 是不是表示堆栈的大小?
问题2:
为什么定义:#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x500) // = 0xc7ff000
问题3:
extern char Image$$RW$$Limit[]; 是什么意思?
问题4:
void *macllocPt=Image$$RW$$Limit; 是什么意思?
问题5:
rNCACHBE0=(((Non_Cache_End)>>12)<<16)|((Non_Cache_Start)>>12);
为什么要写成这样啊?
主要是为了实现什么啊?
谢谢各位大哥!
答 1: 各位大侠请帮我鼎鼎啊!各位大侠请帮我鼎鼎啊!
谢谢!
答 2: 高手啊~~高手啊!
是不是非常难啊?
谢谢! 答 3: 盼高人!有没有哪位大哥知道这个问题啊!
在此多谢了! 答 4: 这个东西确实看不懂啊!这个东西确实看不懂啊! 答 5: 俺来随便说说问题1:STACKSIZE 如果没有意外的话,当然是制堆栈大小拉,除非你改成别的了,呵呵
问题2:一般来说,堆都和栈放在相邻的内存区,便于管理。个人看法
问题3和问题4:Image$$RW$$Limit是ADS里CodeWarrior编译器指定的一个地址。
意思是指RW区的结束地址+1,也是ZI地址的开始地址。理解了这个,
这两个问题自然就明白什么意思了。
问题5:你可以结合这个寄存器看看,就什么都明白了,这么写是为了增强可读性。
在配置CPU的寄存器时经常这样通过移位写,而寄存器相关位的定义放在一
个头文件里。这样需要修改的时候只要修改头文件里的内容就可以了
* NAME : 44BLIB.C *
************************************************/
#include "44b.h"
#include "44blib.h"
#include "def.h"
#include "option.h"
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#define STACKSIZE 0xa00 //SVC satck size(do not use user stack)
#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x500) // = 0xc7ff000
//SVC Stack Area:0xc(e)7ff000-0xc(e)7ffaff
extern char Image$$RW$$Limit[];
void *mallocPt=Image$$RW$$Limit;
#define STACKSIZE 0xa00 //SVC stack size(do not use user stack )
#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x55) //=0xc7ff000
//SVC Stack Area:0xc(e) 7ff000-0xc(e)7ffaff
extern char Image$$RW$$Limit[];
void *macllocPt=Image$$RW$$Limit;
void Port_Init(void)
{
rPCONA=0x1ff;
rPDATB=0x3ff;
rPCONB=0x3ff;
rPDATC=0xffff;
rPCONC=0x0f05ff55;
rPUPC=0x30f0;
rPDATD=0xff;
rPCOND= 0x0;
rPUPD = 0x0;
rPDATE=0x1ff;
rPCONE=0x25568;
rPUPE=0x0ff;
rPDATF=0x1ff;
rPCONF=0x20900a;
rPUPF=0x163;
rPDATG=0xff;
rPCONG=0x00ff;
rPUPG=0x0;
rSPUCR=0x7;
rEXTINT=0x0;
rNCACHBE0=(((Non_Cache_End)>>12)<<16)|((Non_Cache_Start)>>12);
}
这是 44B0 的测试代码中一段小程序: 44BLIB.C
请教:
问题1:
STACKSIZE 是不是表示堆栈的大小?
问题2:
为什么定义:#define HEAPEND (_ISR_STARTADDRESS-STACKSIZE-0x500) // = 0xc7ff000
问题3:
extern char Image$$RW$$Limit[]; 是什么意思?
问题4:
void *macllocPt=Image$$RW$$Limit; 是什么意思?
问题5:
rNCACHBE0=(((Non_Cache_End)>>12)<<16)|((Non_Cache_Start)>>12);
为什么要写成这样啊?
主要是为了实现什么啊?
谢谢各位大哥!
答 1: 各位大侠请帮我鼎鼎啊!各位大侠请帮我鼎鼎啊!
谢谢!
答 2: 高手啊~~高手啊!
是不是非常难啊?
谢谢! 答 3: 盼高人!有没有哪位大哥知道这个问题啊!
在此多谢了! 答 4: 这个东西确实看不懂啊!这个东西确实看不懂啊! 答 5: 俺来随便说说问题1:STACKSIZE 如果没有意外的话,当然是制堆栈大小拉,除非你改成别的了,呵呵
问题2:一般来说,堆都和栈放在相邻的内存区,便于管理。个人看法
问题3和问题4:Image$$RW$$Limit是ADS里CodeWarrior编译器指定的一个地址。
意思是指RW区的结束地址+1,也是ZI地址的开始地址。理解了这个,
这两个问题自然就明白什么意思了。
问题5:你可以结合这个寄存器看看,就什么都明白了,这么写是为了增强可读性。
在配置CPU的寄存器时经常这样通过移位写,而寄存器相关位的定义放在一
个头文件里。这样需要修改的时候只要修改头文件里的内容就可以了
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 | |
【换取手持数字示波器】树莓派PICO调试器官方固件本地化部署实践被打赏24分 | |
【换取手持数字示波器】分享一个KEIL无法识别CMSIS-DAP调试器的解决办法被打赏20分 | |
【换取手持数字示波器】分享一个自制的ArduinoNano扩展板底板被打赏23分 | |
【换取手持示波器】树莓派PICOW网页烟花被打赏18分 |