微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > DS80C400的Keil C语言编程

DS80C400的Keil C语言编程

时间:02-01 来源:互联网 点击:

一次,HTML页time.html使用这个数值来报告自上次更新以来的时间间隔。最后,关闭套接字,SNTP客户端在下面的60秒内进入休眠。

有关同步的说明
在LARGE存储模式下,Keil编译器将通过在进程交换中非安全的存储器传递有限数量的参数。这就意味着有些函数不能由多个程序同时调用。尽管已专为 400开发了C库,其中的所有变量都通过在进程交换中安全的直接存储器传递,有些函数仍然是危险的。例如,Berkeley式的套接字header要求一些较长的方法签名,它会涉及到一些通过非安全存储器传递的数据。因此,针对套接字有两个库:

一个库(rom_sock.lib)遵循Berkeley式的header。但是,两个进程同时用这个库调用某个函数是不安全的。不过,如果一个进程正在使用UDP函数而另一个正在使用TCP函数就不会有问题。为了对并发访问非安全存储器提供真正的保护,开发了另外一个套接字库(rom_sock.lib)。该库中的函数类似于Berkeley型函数,但具有更少或重新安排的变量,以使Keil编译器通过安全存储区传递参数。无论何种情况,请参考相关文档,以确认函数是否为多进程安全的。

有关指针传递的说明
Keil文档提供了用8051汇编自己编写可从你的C程序中调用的方法的途径。如果你选择这样做,请注意,由C程序传递到8051汇编的指针在 DS80C390和DS80C400中不是立即可用的。因为传统的8051架构是16位的,Keil指针由两字节的指针和一字节的存储类型组成。当采用 Dallas的24位8051微控制器时,存储类型字节为指针高字节所用,但采用一种变化的形式。在当前版本的Keil编译器中,高指针字节有其高位设置并被递增1。以下来自rom_offsets.inc的宏在Dallas Semiconductor库中被用于纠正被更改的指针。

      FIXKEILPOINTER  MACRO DIRECT_DPXLOCAL  must_be_nullmov    a, DIRECT_DPXjz     must_be_nulldec    aanl    a, #7Fhmov    DIRECT_DPX, amust_be_null:ENDM
Keil编译器通过寄存器r3:r2:r1 (r3是存储类型字节) 或XDATA存储区传递指针。该宏将工作于任何寄存器或其他直接存储器值,传给它存储类型字节,它会在同一位置返回高指针字节。以下代码演示了它的用法:
      ;; Keil passes pointers as r3:r2:r1...;---- Variable 'buffer1?972' assigned to Register 'R1/R2/R3' ----;FIXKEILPOINTER r3;; r3:r2:r1 is now usable as a pointer value.;;; ...or in XDATA.;---- use dpx1:dph1:dpl1 for buffer pointer ----;mov     dptr, #buffer2?1078GETXmov     dpx1, ainc     dptrGETXmov     dph1, ainc     dptrGETXmov     dpl1, aFIXKEILPOINTER   dpx1;; Data pointer 1 is now usable as a pointer.;
注意,还有一种与FIXKEILPOINTER宏相反的情况,可以使函数将其所需的指针转换为Keil编译器生成代码可以理解的形式。在此情况下,可以用UNFIXKEILPOINTER宏。这个宏的用法和FIXKEILPOINTER宏相同。一点不同是,当你从一个用汇编写的方法中返回一个指针时,指针必须保存在寄存器r3, r2和r1中,高指针字节在r3中。因此,在退出一个需要返回指针的函数前,它必须调用宏:
      UNFIXKEILPOINTER r3ret; End of the assembly function
保持你的Keil为最新版本
Keil会随时发布对其uVision2工具套件的更新版本。网站http://www.keil.com/update/上有关于最新版本的C51编译器和uVision2 IDE的信息。从该网页你可以选择你需要的下载,并看到所发生的变化。

更新应该是一个可执行的InstallShield。应用将显示一个标题为Setup uVision2的窗口。选择Update Current Installation选项执行更新。程序可以检测你当前的安装目录,点击Next继续。在下一屏上选择是否要保留原来的uVision2配置,并再次点击Next。最后,确认你选择的选项并开始安装。

结论
Keil C编译器和Dallas Semiconductor提供的库允许用C编写的应用也可方便地使用以前只能通过TINI的Java环境访问的功能和函数。C语言程序现在可以访问网栈、存储管理器、进程调度器、文件系统,以及DS80C400网络微控制器的许多其他特性。另外,与TINI运行环境相比,用C语言编写的应用程序为用户代码和数据提供了更多的空间。使用C语言的DS80C400开发者可轻易编写出极为精简的应用,有充裕的速度速度、能力、代码空间来应付各种问题。

参考文献
1 App Note 609: Internet Speaker with the DS80C400 Silicon Software

2 Download at http://java.sun.com/j2se/downloads.html

3 Download at http://java.sun.com/products/javacomm/

4 The High-Speed Micro User's Gu

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top