当前位置: 代码迷 >> VxWorks >> 关于使用GPIO和CPLD通信的一个奇怪有关问题
  详细解决方案

关于使用GPIO和CPLD通信的一个奇怪有关问题

热度:285   发布时间:2016-04-28 11:25:42.0
关于使用GPIO和CPLD通信的一个奇怪问题
本帖最后由 jackydi 于 2014-06-30 16:02:40 编辑
这段时间遇到一个奇怪的问题,如下:

我使用GPIO与CPLD之间通信,软件通过GPIO接口向CPLD写入命令后,CPLD执行。

有的命令是单板自身程序运行时就定时写入,比如点灯,有的命令是通过服务器端下达到子卡,子卡程序解析后,再向cpld中写入命令,比如复位命令或者其他命令,问题就是出在这里。

同一个命令,如果在telnet上直接输入这个命令,每次都可以执行成功,但是如果是在服务器上下达命令,然后在程序中解析并执行这个命令,就不一定能执行成功,而函数接口都是同一个。

还有一个现象,就是如果这个命令中包含有打印函数,比如我在命令函数中,执行具体写入GPIO之前先打印一条语句,在服务器上下达命令就可以每次都执行成功了。当然包含其他操作也可能可以,不过我没有测试。

第三个现象,如果在一个CPLD命令中,CPLD同时执行两个操作,比如点灯和复位。在telnet上输入命令时可以都正确执行,但是如果从服务器上下达命令,就只是点灯,复位就不执行。看起来好像是CPLD中的问题,但是为什么会受到软件打印函数的影响呢?

谁能帮我分析一下这个问题是怎么回事?谢谢了
------解决方案--------------------
时序问题?也许只是需要加一点点延时?打印程序起到延时作用
------解决方案--------------------
在shell下直接输入命令,命令运行在优先级是1的shell任务中。程序解析执行时,优先级可能比较低,命令可能会被打断,影响时序?

命令中有没有加关中断,开中断的保护啊?