标签:
BAT文件语法:
@REM 这是注释标识与REM的区别就是在echo on时REM的注释也会显示出来 @REM 设置变量BSP_SMDK2416为2 set BSP_SMDK2416=2 @REM 设置另外一个变量赋值为BSP—SMDK2416 set BSP_TYPE=%BSP_SMDK2416% @REM 判断语句,/i是表示不区分大小写 if /i "%BSP_SMDK2416_CFG%"=="1" ( set BSP_NOHSMMC_CH0= set BSP_NOHSMMC_CH1= set BSP_HSMMC_CH1_8BIT= )
汇编文件语法:
; 这是注释标识 INCLUDE kxarm.h ;包含配置文件 INCLUDE s3c2416.inc ;包含配置文件 PTs EQU 0x30010000 ;定义PTs为0x30010000
TEXTAREA ;定义代码区
END ;与上面的TEXTAREA对应
IMPORT main ;引入外部函数接口
LEAF_ENTRY StartUp ;由source文件指示出函数入口,未细究,有空补上
ENTRY_END ;与上面的LEAF_ENTRY XXX对应
1 b ResetHandler b %B1 ;不带返回的跳转,%B1表示跳转至前面的标号1 ;有别于bl,bl是有带返回地址的 ;有别于%F1,%F1表示跳转到后面的标号1 mov r0, #0 ;把立即数0传给寄存器r0
[ BSP_TYPE = BSP_SMDK2416 ldr r0, =vINTBASE1 mvn r2, #0 str r2, [r0, #oINTMSK1] str r2, [r0, #oSRCPND1] str r2, [r0, #oINTPND1] ldr r0, =vINTBASE2 mvn r2, #0 str r2, [r0, #oINTMSK2] str r2, [r0, #oSRCPND2] str r2, [r0, #oINTPND2] ] ;如果BSP_TYPE=BSP_SMDK2416则执行
几个代码:
//1 #define INPORT32(x) READ_PORT_ULONG(x) // #define OUTPORT32(x, y) WRITE_PORT_ULONG(x, (ULONG)(y)) // //2 #define INREG32(x) READ_REGISTER_ULONG(x) // #define OUTREG32(x, y) WRITE_REGISTER_ULONG(x, (ULONG)(y))
//用C语言访问固定内存地址 #define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg)) //把reg强制转为unsigned long 的静态可变指针类型数据,通过*访问这一地址 #define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val) //
四字节对齐编译:
#pragma pack(4) //设定为4字节对齐 typedef struct _BatteryStatus_tag { SYSTEM_POWER_STATUS_EX2 sps; WORD wMainLevels; WORD wBackupLevels; BOOL fSupportsChange; BOOL fChanged; } BATTERY_STATUS, *PBATTERY_STATUS; #pragma pack() //恢复默认对齐方式 /*======================================================================================================================= #pragma pack(n): 每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。如果#pramga pack(n)中的n大于结构体成员中任何一个成员所占用的字节数,则该n值无效。编译器会选取结构体中最大数据成员的字节数为基准进行对其 内存字节对齐机制,就是为了最大限度的减少内存读取次数。CPU读取速度比内存读取速度快至少一个数量级,为了节省运算花费时间,就牺牲空间来换取时间了。 存放时,看下一成员能否与当前成员存放于同一对齐字节内,若不行则另开一字节对齐空间来放置。 ==========================================================================================================================*/
CE查找dll里面函数输出地址:
//get pointers to file-mapping functions载入指定的动态链接库,并将它映射到当前进程使用的地址空间。一旦载入,即可访问库内保存的资源 hiCoreDll = LoadLibrary(_T("coredll.dll")); if(hiCoreDll != NULL) { //GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址
gpfnCreateFileMappingW = (PFN_CreateFileMappingW) GetProcAddress((HMODULE) hiCoreDll, _T("CreateFileMappingW"));
gpfnMapViewOfFile = (PFN_MapViewOfFile) GetProcAddress((HMODULE) hiCoreDll, _T("MapViewOfFile"));
gpfnUnmapViewOfFile = (PFN_UnmapViewOfFile) GetProcAddress((HMODULE) hiCoreDll, _T("UnmapViewOfFile")); } FreeLibrary(hiCoreDll); // we‘re already linked to coredll
标签:
原文地址:http://www.cnblogs.com/COpener/p/4081758.html