I have try this project port to embedded RT-linux(1ms).
BACnet/IP do not matter, It operate very well.
but MS/TP seem to do not process token/passing because embedded linux can not guarantee sufficient time.
If I use select() function with 500us wait time, it make delay over 100ms.
so, I try just do read() every time with no wait. and I do not excute any other processes except required. then process(with dlmstp_master_fsm_task) use cpu usage upto over 90%.
It work very well. but if i excute other process(cpu usage < 10%), dlmstp's process cpu usage down to approx. 80% then somtime it make loss token because of irregular time delay.
I think that cause is linux's scheduling can not guarantee sufficient time for process MS/TP.
If it receive token from any other master device, it must use token and pass it to other master device. but my device can not response within reasonable time,
because embedded-linux os do not return frame data to application process form serial device driver.
anybody resolve this problem?
Must I make new serial device driver include token/pass processing? Is it possible?
I use linux kernal 2.6.21, AT91SAM9260 processor(400Mhz).
Help me please~~~~~
Last edit: Manseung Yoo 2014-07-10
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Some have written a Linux serial driver for their hardware to overcome the latency issue to support BACnet MS/TP on Linux. Some also use hardware GPIO to bypass the serial port signalling. Using much faster hardware (> 1GHz) seems to have less problems.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have try this project port to embedded RT-linux(1ms).
BACnet/IP do not matter, It operate very well.
but MS/TP seem to do not process token/passing because embedded linux can not guarantee sufficient time.
If I use select() function with 500us wait time, it make delay over 100ms.
so, I try just do read() every time with no wait. and I do not excute any other processes except required. then process(with dlmstp_master_fsm_task) use cpu usage upto over 90%.
It work very well. but if i excute other process(cpu usage < 10%), dlmstp's process cpu usage down to approx. 80% then somtime it make loss token because of irregular time delay.
I think that cause is linux's scheduling can not guarantee sufficient time for process MS/TP.
If it receive token from any other master device, it must use token and pass it to other master device. but my device can not response within reasonable time,
because embedded-linux os do not return frame data to application process form serial device driver.
anybody resolve this problem?
Must I make new serial device driver include token/pass processing? Is it possible?
I use linux kernal 2.6.21, AT91SAM9260 processor(400Mhz).
Help me please~~~~~
Last edit: Manseung Yoo 2014-07-10
Some have written a Linux serial driver for their hardware to overcome the latency issue to support BACnet MS/TP on Linux. Some also use hardware GPIO to bypass the serial port signalling. Using much faster hardware (> 1GHz) seems to have less problems.
BACnet/IP examples are built by default with the open source BACnet Protocol Stack library hosted here on bacnet.sourceforge.net site.