科威PLC芯片组开发实例(四)
[font=宋体]到底我该怎么编写一个用户驱动呢?[/font][font=Times New Roman] [/font]
[font=宋体]上一讲我们配置了用户驱动在[/font][font=Times New Roman]KEIL3[/font][font=宋体]中的工程环境,下面我们来谈谈[/font][font=Times New Roman]PLCDR[/font][font=宋体]项目在[/font][font=Times New Roman]KEIL[/font][font=宋体]中应该设置哪些参数。[/font]
[font=Times New Roman] [/font]
[font=宋体]首先,你得找到一个名为“[/font][font=Times New Roman]Options For Target[/font][font=宋体]”的图标,就是那个“[/font][font=Times New Roman]LAOD[/font][font=宋体]”图标旁边那个象个魔法棒的图案,点击弹出“[/font][font=Times New Roman]Options For Target Target1[/font][font=宋体]”对话框。当然你也可以选择菜单的[/font][font=Times New Roman]Project[/font][font=宋体]→[/font][font=Times New Roman]Options For Target Target1[/font][font=宋体]来把此对话框调出。[/font]
[font=Times New Roman] [/font]
[font=宋体]找到[/font][font=Times New Roman]OutPut[/font][font=宋体]选项,勾上下面的“[/font][font=Times New Roman]Create HEX File [/font][font=宋体]”的单选框,前面我们曾经说过,驱动加载到科威[/font][font=Times New Roman]PLC[/font][font=宋体]芯片组中是要以[/font][font=Times New Roman]HEX[/font][font=宋体]形式的文件通过[/font][font=Times New Roman]DOWNHEX[/font][font=宋体]软件下载来实现的。所以得让[/font][font=Times New Roman]KEIL[/font][font=宋体]给你生成一个[/font][font=Times New Roman]HEX[/font][font=宋体]才行。[/font]
[font=Times New Roman] [/font]
[font=宋体]然后找到[/font][font=Times New Roman]A51[/font][font=宋体]选项,将“[/font][font=Times New Roman]Define 8051 SFR Names[/font][font=宋体]”前面的勾去掉。如果启用这个功能,[/font][font=Times New Roman]KEIL[/font][font=宋体]就会在编译你的项目的时候,自动调用[/font][font=Times New Roman]51[/font][font=宋体]默认的寄存器定义,那么就会和前面我们所提到的[/font][font=Times New Roman]c8051F040.inc[/font][font=宋体]这个头文件所定义的寄存器相冲突。结果会在你编译项目的过程中,会出现一大堆的“[/font][font=Times New Roman]redefined[/font][font=宋体]”错误。[/font]
[font=Times New Roman] [/font]
[font=宋体]除此之外,都默认就好,点击确认完成参数配置。[/font]
[font=Times New Roman] [/font]
[font=宋体]接下来,将你找到的[/font][font=Times New Roman]c8051F040.inc[/font][font=宋体],[/font][font=Times New Roman]easycore.inc[/font][font=宋体]以及[/font][font=Times New Roman]easycore.lib[/font][font=宋体]这[/font][font=Times New Roman]3[/font][font=宋体]个文件都复制到[/font][font=Times New Roman]D:\PLC_DRIVE[/font][font=宋体]路径下,并在此路径下新建一个“[/font][font=Times New Roman]USER_DATA.inc[/font][font=宋体]”的文件。[/font]
[font=Times New Roman] [/font]
[font=宋体]下面我们说说,这几个文件的含义:[/font]
[font=Times New Roman]1.
c8051F040.inc[/font][font=宋体],这个笔者前面讲过,不再重复;[/font]
[font=Times New Roman]2.
easycore.inc[/font][font=宋体],你可以打开它来看看,会发现这里面定义了用户所可以用到的寄存器组还有相关的变量地址。[/font][font=Times New Roman]F040[/font][font=宋体]{石家庄论坛}定义了[/font][font=Times New Roman]4[/font][font=宋体]个[/font][font=Times New Roman]R0~R7[/font][font=宋体]寄存器组,用户只能使用[/font][font=Times New Roman]0[/font][font=宋体]区,其他的对不起,内核(我们习惯把芯片组内的实时操作系统称之为内核,很形象,不是吗?)都给占用了[/font][font=Times New Roman]~[/font][font=宋体]然后是[/font][font=Times New Roman]BRAM_USER[/font][font=宋体],这个是用户可用的位变量寻址,采用的是直接位寻址方式,一共可以定义[/font][font=Times New Roman]32[/font][font=宋体]个位,也就是[/font][font=Times New Roman]4[/font][font=宋体]个字节。少了点,可是没办法,内核占了大头[/font][font=Times New Roman]…DRAM_USER[/font][font=宋体],这个是用户可用的字节变量寻址,采用的是直接寻址方式,可以定义[/font][font=Times New Roman]16[/font][font=宋体]个,还是少了点,但是还是没办法[/font][font=Times New Roman]…-_-![/font][font=宋体]最后是[/font][font=Times New Roman]XRAM_USER[/font][font=宋体],这个用户能用的倒是多啊,有几千个,但是可惜的是它是间接字节寻址。系统读取这个区域的数据,那效率是刷刷往下降啊!但是还是得用,要不然变量不够啊,呵呵。[/font][font=Times New Roman]F040[/font][font=宋体]要是直接寻址的存储空间再大些就好了,可是这是笔者的一相情愿,残念[/font][font=Times New Roman]……[/font][font=宋体]最后面就是有关梯形图的变量地址空间了,你可以看到[/font][font=Times New Roman]D[/font][font=宋体],[/font][font=Times New Roman]M[/font][font=宋体],[/font][font=Times New Roman]S[/font][font=宋体]等梯形图内所用的这些寄存器在内核里面所占的地址。中间的那一块暂时跳过不讲,以后找机会给大家说明,不过可能有的读者已经了解那些定义大概是什么意思了,不管了解不了解,让我们继续[/font][font=Times New Roman]GO ON[/font][font=宋体]![/font]
[font=Times New Roman]3.
easycore.lib[/font][font=宋体],这个库直接从[/font][font=Times New Roman]KEIL[/font][font=宋体]里面是看不了的,你想要看它,就从记事本里面看吧。里面是为了方便用户所定义的一些系统函数,比如双字节乘除,浮点数运算等等,如果你要调用这些函数,注意出口入口要设置对哦。[/font]
[font=Times New Roman]4.
USER_DATA.inc[/font][font=宋体],这个文件暂时是空白的,留给你自己发挥创造的,你可以在里面定义自己的位变量啦,字节变量啦,还有变量重定义等。比如你在里面写一句“[/font][font=Times New Roman]MODE_DATA
EQU
DRAM_USER
;[/font][font=宋体]模式选择”,意思就是你将直接字节寻址的第一个单元赋予了[/font][font=Times New Roman]MODE_ONOFF[/font][font=宋体]这个名字,那么你在驱动中就可以直接调用[/font][font=Times New Roman]MODE_DATA[/font][font=宋体]这个变量啦。[/font]
[font=宋体]后面那个分号以及分号以后的文字,是这条语句的注释。在[/font][font=Times New Roman]KEIL[/font][font=宋体]给[/font][font=Times New Roman]51[/font][font=宋体]汇编加注释有[/font][font=Times New Roman]2[/font][font=宋体]中方法,一个是“[/font][font=Times New Roman];[/font][font=宋体]”,相当于[/font][font=Times New Roman]C[/font][font=宋体]里面的“[/font][font=Times New Roman]//[/font][font=宋体]”,另外一个和[/font][font=Times New Roman]C[/font][font=宋体]相同,是“[/font][font=Times New Roman]/* */[/font][font=宋体]”。[/font]
[font=Times New Roman] [/font]
[font=Times New Roman] [/font]
[font=宋体]下一讲,笔者将讲述科威[/font][font=Times New Roman]PLC[/font][font=宋体]芯片组开发用户驱动的具体格式。[/font]
[font=Times New Roman] [/font]
[font=宋体]本帖首发中国工控网科威[/font][font=Times New Roman]PLC[/font][font=宋体]论坛,转载请声明![/font]
页:
[1]