Math lib inclusion in BSP not required if CAN drivers are considered

sudarshan.rajagopalan sudarshan.rajagopalan at vecna.com
Thu Oct 1 15:15:42 UTC 2015


  +1.

  - Sudarshan

On 2015-10-01 11:06, Isaac Gutekunst wrote:
> Hi Pavel,
> 
> Thanks for the detailed reply. I guess you aren't as "horribly out of
> time" as you said, or perhaps are no even more out of time :)
> 
> We will definitely take a good look at the LinCAN source for baud rate
> calculations.
> 
> The more I think about it, the more I think it's worth to port LinCAN
> to RTEMS, even though it wouldn't be the most trivial. Then we
> wouldn't have yet another CAN implementation that is subtly different
> than LinCAN.
> 
> Here is the file in question:
> 
> https://github.com/vecnatechnologies/rtems/blob/stm32-bsp-rebase-fixes/c/src/lib/libbsp/arm/shared/stm32fxxxx/can/hal-can.c
> 
> Since I wrote it, I think it makes a lot of sense. However, I'll take
> a look at the LinCAN code some more and see if I can understand it.
> 
> 
> Again, thanks for the email.
> 
> Isaac
> 
> 
> 
> On 09/30/2015 06:08 PM, Pavel Pisa wrote:
>> Hello Sudarshan,
>> 
>> On Friday 25 of September 2015 19:13:53 sudarshan.rajagopalan wrote:
>>> On 2015-09-25 12:21, Daniel Gutson wrote:
>>>> El 25/9/2015 13:17, "sudarshan.rajagopalan"
>>>> 
>>>> <sudarshan.rajagopalan at vecna.com> escribió:
>>>>   > On 2015-09-25 11:06, Daniel Gutson wrote:
>>>>   >> On Thu, Sep 24, 2015 at 4:49 PM, sudarshan.rajagopalan
>>>>   >>
>>>>   >> <sudarshan.rajagopalan at vecna.com> wrote:
>>>>   >>> Hey all,
>>>>   >>>
>>>>   >>> We are developing a new BSP that uses math.h in few of the BSP
>>>> 
>>>> files. I do
>>>> 
>>>>   >> May I ask why do you need floating point operations in a 
>>>> kernel?
>>>> 
>>>> At
>>>> 
>>>>   >> least, what sort of operations and why not move them upwards.
>>>>   >
>>>>   > We are doing floating point operations in one of the device 
>>>> drivers
>>>> 
>>>> as part of the BSP - to perform buadrate calculation, to be 
>>>> specific,
>>>> which involes inverse operations and using roundf().
>> 
>> If this is part of CAN driver baudrate calculation then floating point
>> is usually not required and can be sometimes harmfull because you need
>> to find best matching ratio of integer numbers which are send to 
>> controller
>> registers. See Linux SocketCAN implementation
>> 
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/net/can/dev.c?id=refs/tags/v4.3-rc3#n74
>> 
>> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/can/netlink.h?id=refs/tags/v4.3-rc3#n46
>> 
>> I have proposed it with structures defining CAN controller
>> parameters many years ago and it seems that it has been enough
>> for all controllers supported by Linux drivers.
>> 
>> I suggest to not reinvent the wheel and use solution compatible
>> with this one because you can use values already tested in the
>> Linux kernel.
>> 
>> As for the License, actual Linux code has been updated and enhanced
>> by more people and is strict GPLv2 only. The main change is movement
>> of sample point computation to the separate function can_update_spt()
>> and change of sample point specification from 1/100 (%) to 1/1000
>> fractions.
>> 
>> You can find simpler version in LinCAN driver code
>> 
>> http://sourceforge.net/p/ortcan/lincan/ci/can-usb1/tree/embedded/app/usbcan/lpc17xx_can.c#l90
>> 
>> http://sourceforge.net/p/ortcan/lincan/ci/can-usb1/tree/embedded/app/usbcan/can/can_bittiming.h
>> 
>> where LinCAN is released under license crated specially to be 
>> compatible
>> with RTEMS as well.
>> 
>> Generally, Volkswagen SocketCAN is intended to be available under BSD 
>> license
>> in these parts where it does not directly interact with Linux kernel
>> structures so I expect that there is no problem when some of Linux
>> specific enhancements for bitrate calculation are reintroduced in
>> our code. I check that directly with Linux CAN maintainers
>> (Oliver Hartkopp, etc.).
>> 
>> I have even userspace test code for these computations and some 
>> examples.
>> I am horribly out of time this and next week but I can clean a dust 
>> from
>> my memory and prepared files after this time and send the utility 
>> sources.
>> 
>> But please, if you intend to have generic RTEMS CAN infrastructure,
>> do not introduce floating point computation to CAN drivers and try
>> to check if computations introduced by us initially for embedded 
>> system
>> less applications and then selected by Linux kernel community can be 
>> used
>> in RTEMS. It would really simplify new drivers and CAN HW introduction
>> because you can use already elaborated values instead to reading 
>> complex
>> chip manuals.
>> 
>> Unfortuantelly, I cannot allocate time to RTEMS CAN as I would like.
>> We have no project at university or company which would backup
>> the work and there are still even higher priority "hobby" projects
>> investments on my list - i.e. move forward (with my student) TMS570
>> BSP networking, QEMU CAN support and some motion control experimental
>> stuff on RPi, Linux and our conceptually new solution for motor
>> control current sensing, FPGA D-Q vector control and its combination
>> with predictive control algorithms.
>> 
>> Best wishes,
>> 
>>                 Pavel
>> _______________________________________________
>> devel mailing list
>> devel at rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel
>> 
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel




More information about the devel mailing list