Windows静态库开发及应用


开发平台:VC6.0


建立静态库:

1.VC6.0环境下新建“Win32 Static Library”工程(工程名为mystatic)
2.添加如下代码:

#include <stdio.h>
void dprintf(void)
{
    printf("Hello World.\r\n");
}

保存并编译后生成mystatic.lib文件;

3.新建头文件mystatic.h并导出函数:

extern void dprintf(void);

静态库应用:

1.新建一个应用工程;
2.将mystatic.lib以及mystatic.h复制到工程目录下;

在适当要调用的C文件中添加以下代码:

#include "mystatic.h"
#pragma comment(lib,"staticlib.lib")

在适当的位置调用dprintf

例如:

#include "mystatic.h"
#pragma comment(lib,"staticlib.lib")
int main(int argc, char* argv[])
{
    dprintf(); 
    return 0;
}

- 阅读全文 -

Keil4添加对C51的支持


Keil4添加C51支持

Keil4默认安装不支持对C51编译的支持,需要手动添加。

1.下载C51并解压在Keil安装目录下;

2.打开TOOLS配置文件,添加以下内容,其中注意PATH路径要与实际安装路径一致;

[C51]
PATH="D:\Keil\C51"
SN=K1DZP-5IUSH-A01UE
VERSION=V9.01
BOOK0=HLP\RELEASE_NOTES.HTM("Release Notes",GEN)
BOOK1=HLP\GS51.PDF("uVision2 Getting Started",GEN)
BOOK2=HLP\C51.PDF("C51 User's Guide",GEN)
BOOK3=HLP\C51LIB.CHM("C51 Library Functions",C)
BOOK4=HLP\A51.PDF("Assembler/Utilities",GEN)
BOOK5=HLP\TR51.CHM("RTX51 Tiny User's Guide",GEN)
BOOK6=HLP\DBG51.CHM("uVision2 Debug Commands",GEN)
BOOK7=HLP\ISD51.CHM("ISD51 In System Debugger",GEN)
BOOK8=HLP\FlashMon51.CHM("Flash Monitor",GEN)
BOOK9=MON390\MON390.HTM("MON390: Dallas Contiguous Mode Monitor",GEN)
TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver")
TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger")
TDRV2=BIN\MON390.DLL ("MON390: Dallas Contiguous Mode")
TDRV3=BIN\LPC2EMP.DLL ("LPC900 EPM Emulator/Programmer")
TDRV4=BIN\UL2UPSD.DLL ("ST-uPSD ULINK Driver")
RTOS1=RTXTINY.DLL ("RTX-51 Tiny")
RTOS2=RTX51.DLL ("RTX-51 Full")
LIC0=KRWQD-8HS7V-SL9CN-Y13SC-MI3FH-2X58G

3.通过License管理器,添加C51的License即可。

附件下载:
C51.rar


大小端格式
经测试,在Keil C51中,采用大端模式;


地址绝对定位

const char code  sn[10] _at_ 0xEFF0;  // Flash地址
const char idata isn[7] _at_ 0xF1;    // RAM地址

存储器类型

data - 直接访问的内部数据存储器(128B RAM);

idata - 间接访问的内部数据存储器(256B RAM);

xdata - 外部数据存储器(64KB RAM);

code - 程序存储器(64K).


数据存储模式
Small 模式
所有缺省变量参数均装入内部RAM,
优点是访问速度快,缺点是空间有限,只适用于小程序;

Compact 模式
所有缺省变量均位于外部RAM区的一页(256Bytes),
具体哪一页可由P2口指定,在STARTUP.A51文件中说明,也可用pdata指定;
优点是空间较Small为宽裕,速度较Small慢,较large要快,是一种中间状态。

large 模式
所有缺省变量可放在多达 64KB的外部RAM区,
优点是空间大,可存变量多,缺点是速度较慢。

- 阅读全文 -

HID报告描述符


文章摘要:
HID设备属于免驱动设备,操作系统自带了相关驱动程序;
该设备的核心内容就是HID设备的报告描述符,本文列举了其中一种简单的用法及说明。


//一个简单的报告描述符,定义了8个字节的输入报告和8个字节的输入报告
char report_descriptor[]=
{
    0x05,0x01,    // USAGE_PAGE (Generic Desktop)
    0x09,0x00,    // USAGE (0表示自定义用途)
    0xa1,0x01,    // COLLECTION (Application)开集合
    0x15,0x00,    // LOGICAL_MINIMUM (0) 全局条目,逻辑最小值
    0x25,0xff,    // LOGICAL_MAXIMUM (255)全局条目,逻辑最大值
    0x19,0x01,    // USAGE_MINIMUM (1) 用途最小值
    0x29,0x08,    // USAGE_MAXIMUM (8) 用途最大值
    0x95,0x08,    // REPORT_COUNT(8)数据域的个数
    0x75,0x08,    // REPORT_SIZE (8)每个数据域的长度(bit)
    0x81,0x02,    // INPUT (Data,Var,Abs)数据域做为输入
    0x19,0x01,    // USAGE_MINIMUM (1)
    0x29,0x08,    // USAGE_MAXIMUM (8)
    0x91,0x02,    // OUTPUT (Data,Var,Abs)数据域做为输入(8字节,注意前面的逻辑值全局条目)
    0xc0          // END_COLLECTION 关闭集合
};

USAGE_MINIMUM/USAGE_MAXIMUM 用途最小值/用途最大值
由于输入/输出定义为Var(独立)格式,
所以用途最大值与最小值后的个数必须与数据域个数相同,每个数据域代表一个用途;
如果定义为Ary格式,则不受此限制,只需定义一个用途即可;

Logical Minimum/LOGICAL_MAXIMUM 逻辑最小值/逻辑最大值
用来描述数据域的取值范围
为了方便管理,将用途(USAGE)分成了很多页(USAGE_PAGE)每页的用途有相似的功能;
HID报告描述符条目说明:
bTag: 表示条目的功能,具体查看HID用途表;
bType:表示条目的类型,0=主条目,1=全局条目,2=局部条目,3=保留;
bSize: 表示后边所跟数据的字节数(大部分情况一下0x01);


主条目
共有5个:
Input输入: 0x81(100000 01)
Output输出: 0x91(100100 01)
Feature特性: 尚未明白用途
Collection开集合: 0xA1(101000 01);
EndCollection关集合: 0xC0(110000 00),无后缀数据;

Output/Input/Feature后缀数据:
bit0: 变量Dat(0)/常量Cnst(1);
bit1: 数组Ary(0)/独立Var(1);
bit2: 绝对值Abs(0)/相对值Rel(1);
bit3/4/5/6:暂时不用管,保留为0即可;
bit7: 易变Vol/非易变Nv;
bit8: 位域0/字节域1(一般选择位域,如果选择字节域则需要2个字节参数);

Var表示数据为独立的变量;
Ary表示可以为1个或多个元素,每个元素有相同的用途;

Collection开集合后缀数据:
0x00: 物理集合;
0x01: 应用集合;
0x02: 逻辑集合;


注意事项

HID报告的长度必须与报告描述符中定义的相同;
如果实际发送的数据长度小于报告描述符中定义的长度,通过BusHound查看时,
“USB人体学输入设备”可以监测到数据,
“HID-compliant device”需要等数据包数据凑够一帧时,才能收到错帧;
如果报告描述符中定义了报告ID,则发送报告时,必须多发送1个字节的报告ID;
如果报告描述符中未定义报告ID,则发送报告时,不发送报告ID

- 阅读全文 -

Linux文件系统(一)--最小文件系统


文章摘要:
本文主要在于搭建一个最小的文件系统,使Linux能正常工作,后续再根据需要进一步完善文件系统。


根文件系统目录说明:

/bin 系统常用命令
/sbin 管理员常用命令
/usr/bin 不常用命令
/usr/sbin 管理员不常用的命令

/dev 设备文件
/etc 系统参数配置
/lib 库文件
/proc proc文件系统,内核与用户的接口
/sys sys文件系统,动态产生,设备,驱动,总线的信息
/mnt 手动挂载约定目录
/tmp 系统临时文件目录(该目录下的文件由系统生成,可手工清除)
/var 系统运行时要改变的数据.(由系统
/opt 一般约定用于安装第三方的软件的目录


制作根文件系统

1.新建所需目录:

#mkdir bin dev etc lib proc sbin sys usr mnt tmp var
#mkdir /usr/bin  /usr/lib /usr/sbin /lib/modules

2.在dev目录下创建必须的两个设备文件

#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3

3.安装busybox命令集
配置busybox安装路径

Busybox Settings  --->
    Installation Options ("make install" behavior)  --->
        () BusyBox installation prefix 
        (根文件系统路径)

编译安装busybox

#make 
#make install

4.完成etc目录下文件创建
创建inittab文件
inittab分开来看就是init table,由若干命令组成,init进程在不同的情况下执行不同的命令:

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

注意事项:
sysinit:指定初始化时要运行的脚本;
respawn:不管何时终止都重新启动进程;
稍后专门分析inittab文件。

创建fstab文件
系统启动时mount -a命令挂载列表.

proc    /proc   proc    defaults    0   0
sysfs   /sys    sysfs   defaults    0   0

创建init.d/rcS文件
系统初始化运行的脚本.

#!/bin/sh
/bin/mount -a

注意事项:
此处的运行权限最高,可以完成系统级配置
/bin/mount -a 挂载fstab文件中定义的列表项

创建profile文件
全局配置文件

echo
echo -n "Processing /etc/profile... "
# add shell here
echo "Done"
echo

注意事项:
这里暂时只做运行时的提示,后续可根据需要配置全局参数;
每个用户登陆时都会调用一次(本地登陆和远程登陆),所以要注意权限问题。


构建完以上文件,即成为最小文件系统所需要的文件,系统可以正常工作。

- 阅读全文 -

PHP时间格式


Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"

F - 月,英文全名; 如: "January"
M - 月,三个英文字母; 如: "Jan"
m - 月,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月,二位数字,若不足二位则不补零; 如: "1" 至 "12"

d - 日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
j - 日,二位数字,若不足二位不补零; 如: "1" 至 "31"

h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"

i - 分, 如: "00" 至 "59"

s - 秒, 如: "00" 至 "59"
S - 秒, 字尾加英文序数,二个英文字母; 如: "1st","2nd"

D - 星期,三个英文字母; 如: "Fri"
l - 星期,英文全名; 如: "Friday"
w - 星期,数字型,如: "0" (星期日) 至 "6" (星期六)

a - "am" 或是 "pm"
A - "AM" 或是 "PM"

U - UNIX时间戳
z - 一年中的第几天; 如: "0" 至 "365"
t - 指定月份的天数; 如: "28" 至 "31"

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com