That's not what I've been taught over the last 20 years. In C variable[0] is essentially a pointer to the start of variable. Which if you want to get technical is not the "adddress of" variable. Regardless &variable should give the starting address of variable. So at minimum &variable[0] is a bit superfluous which makes the code harder to read through . . . and is something I'd never do personally.
Is that nick picky enough ? ;) Also to nickpick even more. memset() expects type unsigned character, and uint8_t *, and unsigned char * are not really equivalent . . . which is a source of even more errors ;) *This* I've had personal hands on with ;) On Tue, Mar 8, 2016 at 7:07 PM, <[email protected]> wrote: > *Because it's not calling malloc() over and over...* >>> >> >> Yeap, you're right it's calling memset() every loop. Not sure why I was >> thinking it was calling malloc() every loop. But the point is, it does not >> matter what is being called in the loop. any system / API call in the loop, >> without some form of a sleep() will eat up a lot of CPU cycles. Again, as >> much as the system will allow it to, which is usually in the mid to high >> 90%'s . . . >> > > Yes it's definitely not nice to call memset() in such a tight loop, but > the program is just for demonstration purposes. As mentioned at least one > gstreamer 1.6 audio decoder plugins will call memset() consecutively fast > enough to cause issues with the lcdc dma. And thus screen flicker. > > > So, &variable <- beginning of an array, equivalent to variable[0], but >> what is &variable[0] ? A multi dimensional array ? that's not what was >> defined . . . to be 100% honest I'm not sure what it does, but the first >> thing that comes to mind is "undefined behavior". >> > I won't go into details, but "&variable" is not the same as "variable[0]". > (You might be able construct some special/silly case tho where the content > of variable[0] is equivalent to &variable). > > And "&variable[0]" is equivalent to "variable". The latter might have been > more readable in the context of the code, but both version are valid C. > Basically you are getting the address of the first element of the memory > block, which is the starting address of the memory block itself, which is > what memset expects. > > >> On Tue, Mar 8, 2016 at 5:39 PM, <[email protected]> wrote: >> >>> I'm surprised that code would compile at all without a compiler error. >>>> As &variable[0] probably is not what you think it is. >>>> >>> I see no issue here. Can you elaborate? >>> >>> >>>> Also, for the record, infinitely allocating an arbitrary amount of >>>> dynamic memory, in a loop, without any kind of a pause is going to eat up >>>> an incredible amount of CPU cycles. As in that code will very likely use as >>>> close to 100% CPU as the system will allow it. Which again, is no wonder >>>> you're "flickering" . . . >>>> >>> The code is not allocating anything in a loop. >>> >>> >>>> You lucky your program does not randomly crash for using malloc() on >>>> the same dynamic memory over, and over, without using free(), or instead >>>> using realloc() . . . >>>> >>> Because it's not calling malloc() over and over... >>> >>> >>> The issue here is that if you run memset() in a tight loop (which at >>> least one gstreamer1.6 audio decoder plugins does), it seems to clog up the >>> data bus enough for the DMA to fail. >>> >>> >>> >>>> On Tue, Mar 8, 2016 at 10:16 AM, Radek Dostál <[email protected]> wrote: >>>> >>>>> Hi Michael, >>>>> >>>>> we had very similar issue, which we encountered when updating to >>>>> gstreamer 1.6. Using git bisect we were able to find a root cause and >>>>> prepare simple test program, which reliably reproduces the issue: >>>>> >>>>> #include <string.h> >>>>> #include <stdint.h> >>>>> #include <stdlib.h> >>>>> >>>>> int main(int argc, char **argv) >>>>> { >>>>> int size; >>>>> uint8_t *memblock; >>>>> >>>>> if (argc < 2) >>>>> return -1; >>>>> >>>>> size = atoi(argv[1]); >>>>> >>>>> memblock = malloc(size); >>>>> >>>>> while (1) >>>>> { >>>>> memset(&memblock[0], 0, size); >>>>> } >>>>> >>>>> free(memblock); >>>>> >>>>> return 0; >>>>> } >>>>> >>>>> starting this program will cause crazy flickering, ... >>>>> >>>>> We were able to reproduce the issue with >>>>> >>>>> 1) debian originally provided on beaglebone using memtest utility for >>>>> carlos. Kernel version was: >>>>> >>>>> Linux version 3.8.13-bone70 (root@a5-imx6q-wandboard-2gb) (gcc >>>>> version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Fri Jan 23 02:15:42 UTC 2015 >>>>> >>>>> 2) latest version of debian from beaglebone website Kernel version >>>>> was: >>>>> >>>>> Linux version 4.1.15-ti-rt-r43 (root@a4-imx6q-wandboard-2gb) (gcc >>>>> version 4.9.2 (Debian 4.9.2-10) ) #1 SMP PREEMPT RT Thu Jan 21 20:13:58 >>>>> UTC >>>>> 2016 >>>>> >>>>> so it seems to be existing for ages. >>>>> >>>>> Did you in the mean time managed to find a solution for your problem? >>>>> >>>>> Thanks, >>>>> Radek >>>>> >>>>> On Monday, February 8, 2016 at 1:18:50 PM UTC+1, Michael Liesenberg >>>>> wrote: >>>>>> >>>>>> Hi there, >>>>>> >>>>>> >>>>>> i was able to get my 10.1 custom Display to work with the RGB Pins on >>>>>> the beaglebone black. >>>>>> >>>>>> I am using the latest Debian Jessie image from beagleboard.org and >>>>>> the X11 Desktop has the right colors and the right size. >>>>>> >>>>>> So i assume that the Timings from my display are correct. >>>>>> >>>>>> >>>>>> panel { >>>>>> >>>>>> status = "okay"; >>>>>> >>>>>> compatible = "ti,tilcdc,panel"; >>>>>> >>>>>> pinctrl-names = "default"; >>>>>> >>>>>> pinctrl-0 = <&bb_lcd_lcd_pins>; >>>>>> >>>>>> panel-info { >>>>>> >>>>>> ac-bias = <255>; >>>>>> >>>>>> ac-bias-intrpt = <0>; >>>>>> >>>>>> dma-burst-sz = <16>; >>>>>> >>>>>> bpp = <32>; >>>>>> >>>>>> fdd = <0x80>; >>>>>> >>>>>> tft-alt-mode = <0>; >>>>>> >>>>>> stn-565-mode = <0>; >>>>>> >>>>>> mono-8bit-mode = <0>; >>>>>> >>>>>> sync-edge = <0>; >>>>>> >>>>>> sync-ctrl = <1>; >>>>>> >>>>>> raster-order = <0>; >>>>>> >>>>>> fifo-th = <0>; >>>>>> >>>>>> }; >>>>>> >>>>>> display-timings { >>>>>> >>>>>> native-mode = <&timing0>; >>>>>> >>>>>> timing0: 1280x800 { >>>>>> >>>>>> clock-frequency = >>>>>> <70000000>; >>>>>> >>>>>> hactive = <1280>; >>>>>> >>>>>> vactive = <800>; >>>>>> >>>>>> hfront-porch = <80>; >>>>>> >>>>>> hback-porch = <60>; >>>>>> >>>>>> hsync-len = <20>; >>>>>> >>>>>> vback-porch = <12>; >>>>>> >>>>>> vfront-porch = <8>; >>>>>> >>>>>> vsync-len = <3>; >>>>>> >>>>>> hsync-active = <0>; >>>>>> >>>>>> vsync-active = <0>; >>>>>> >>>>>> }; >>>>>> >>>>>> }; >>>>>> >>>>>> }; >>>>>> >>>>>> >>>>>> But when i play a video or when i have many frames on the display i >>>>>> get some screen flickers. >>>>>> >>>>>> >>>>>> On the log via UART i see the following: >>>>>> >>>>>> >>>>>> 1- When booting up: of_graph_get_next_endpoint(): no port node found >>>>>> in /ocp/lcdc@4830e000 >>>>>> >>>>>> 2- When video or many frames are displayed: >>>>>> >>>>>> tilcdc 4830e000.lcdc: tilcdc_crtc_irq(0x00000020): FIFO underflow >>>>>> >>>>>> tilcdc 4830e000.lcdc: tilcdc_crtc_irq(0x00000004): Sync lost >>>>>> >>>>>> >>>>>> Any idea? >>>>>> >>>>>> >>>>>> Is the DDR flash rate to slow? Or the DMA buffer not big enougth? >>>>>> >>>>>> >>>>>> -- >>>>> For more options, visit http://beagleboard.org/discuss >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "BeagleBoard" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >>> For more options, visit http://beagleboard.org/discuss >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "BeagleBoard" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > For more options, visit http://beagleboard.org/discuss > --- > You received this message because you are subscribed to the Google Groups > "BeagleBoard" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
