微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > μClinux下SDRAM数据交换区的生成和使用

μClinux下SDRAM数据交换区的生成和使用

时间:06-04 来源: 点击:

ColdFire5307可以支持二个Bank的SDRAM,在本系统中只使用了第一个Bank,另外一个Bank的控制信号悬空不使用。其中,SDRAM和FlashRom以及其他外设一同使用32位数据总线D0-D31;SDRAM映射到内部物理地址,但是因为SDRAM的特殊性,并不需要所有的地址线信号A0-A31,而是使用其中一部分信号线,这个地址映射的工作由DRAM控制器来完成;RAS0-RAS1是Bank片选信号,本设计中只使用RAS0来片选所使用的SDRAMBank;CAS0-CAS3是SDRAM 32位数据线中4个8位数据线(Byte)独立的片选信号;SCAS和SRAS分别是SDRAM的行、列地址锁存信号;DRAMW是DRAM写信号;BCLK0是系统时钟输出,连接到SDRAM的时钟输入引脚CLK端;SCKE是SDRAM时钟使能信号,来使能输入给SDRAM的时钟信号,高电平时SDRAM自动进入休眠状态。

3数据交换区软件实现

服务器依据数据交换区配置文件生成设备数据交换区。服务器进入运行模式之后,首先检查生成数据交换区与底层缓冲区的配置文件是否存在。如果不存在则打印错误信息,存在则依据配置文件在系统SDRAM区开辟数据交换区与底层缓冲区。接着系统检查PLC通信协议交换是否存在,不存在则打印错误信息,存在则将COM2口置为PLC通信端口。一切就绪之后,系统启动任务调度完成各种任务。数据交换区生成及使用流程图如图2所示,数据缓冲区生成子程序流程如图3所示。



在2.4片μClinux内核中,内核引导时,通过访问系统所有的物理内存,然后调用各个子系统的初始化函数进行初始化,允许初始化代码分配私有的缓冲区,并减少了留给常规系统操作的RAM数量。在2.4版μClinux内核中,这种分配通过调用下列函数之一进行:

分配内存空间所使用的函数调用如下:

(1)函数malloc和calloc都用于分配动态内存空间的函数。

(2)函数malloc的参考size表示申请分配的内存空间的大小,以字节计算;

(3)函数calloc的参数nmemb表示分配的内存空间占的数据项数目。参数size表示每一个数据项的大小,以字节计算。也就是说,calloc函数分配大小为nmemb*size大小的内存空间。

Calloc函数与malloc函数最大的区别是calloc函数被初始化所分配的内存空间,把所有位置为0。调用成功时,malloc函数为calloc函数的返回值都为被分配的内存空间的指针;调用失败时,返回值为NULL。动态内存被释放。

在C语言中,指针是处理许多数据结构的关键。没有指针,也许根据不能使用动态内存的诸多特性。在编写程序的时候,它允许程序员建立复杂的内存系统。提高了处理未知内容或者类型数据的灵活性。在C中还有一点对字符串处理和数据的输入输出很重要。对指针的彻底了解有助于我们写出更好、更高效的代码。

如果使用一种算法不够,链表可以解决这个问题。当从未知大小的数据块中读入数据时,用户不得不把数据读到内存中。这是因为处理读入数据的函数必须把数据读到一块一定大小的内存中。在读入以后,必须找到一种接合分离数据的办法。一般使用fgets()把数据读到n个字节大小的内存中。缓冲区是n+1个字节大,但是请注意必须使用1个字节放结束标记。然后使用了一简单的链表保存数据。这个链表中一个特殊项:一个名为iscontinuing的整型变量。如果这个变量有值,表示当前结构中的数据不是字符串最后的部分,最后的部分将包含在以后的结构后。这个变量再把数据从内存中调出来,重新组装的时候使用。

还有一种更明智的保存数据的方法。逐步处理数据直到达到数据末尾。首先要修改的是结构的定义。在结构中包含字符串。在结构中定义一个指针,指向动态申请的内存区域。这样做的好处是,字符串可以很长。现在产生输出的代码更简单了。它做的所有的事情就是计算和显示。不再需要合并字符串。因为已经被合并。

4结束语

数据交换区的生成和使用对嵌入式工业网络服务器项目尤为重要,它是WEB服务器正常运行的先决条件,起到承上启下的枢纽作用。向上负责对客户端交互现场设备数据,向下负责与接口缓冲区交互设备实时数据。目前,该部分设计工作已经完成,并在试运行期间情况良好,达到预期效果。

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

网站地图

Top