[Mspgcc-users] variable reusing
hello guys, while coding (embedded devices) i got an idea. void uart_send_param(uint8_t before, uint8_t after, uint8_t default_value) { uint8_t i = 0; uart_send(ASCII_ESCAPE); uart_send(before); while(before vt100_param_getcount()) { if(vt100_param_get(i) != default_value) { uart_send_int(vt100_param_get(i)); } if(++i vt100_param_getcount()) uart_send(VT100_PARAM_DELIMITER); } uart_send(after); } in the above code, after sending uart_send(before) , before is no more useful to me. but for while loop i have to get a new variable i for iteration. in this case the compiler allocates the memory in stack. since in embedded system, everything is scare , reusing things come handy and efficient. but if i try to reuse before in loop as replacement of i , it looks odd + bad coding practise, right? but if their is something like __reuse__(before, i) ( like __attribute__() or sizeof() ) or uart_send_param(uint8_t before|i, uint8_t after, uint8_t default_value) after that i could use before as i. if i is just finished up with register indexing and no stack allocation, then that good but still the problem of reuse might arise in some other case. in some case union can be used but i think it cannot solve the above problem. it can help alot to reduce push and pop operations, making thing efficient. more or like saving 4 bytes flash and 2(or 1 byte, i dont know :) ) byte of stack.( msp are 16bit MCU's, msp430G2552 only have 8K flash and 256Byte Ram , so that comparable). and when the flash get full or ram overflows it really hurts :) note: rejected by mail demon of g...@gcc.gnu.org so im trying here. -- *Kuldeep Singh Dhaka* Sakul +91-8791676237 kuldeepdha...@gmail.com Programmer, Open Source, Web Developer, Entrepreneur, Animal Lover, Student, Blogger, Reverse Engineer, Embedded System. Bitcoins Accepted. My GnuPG Public Keyhttp://pgp.mit.edu:11371/pks/lookup?op=getfingerprint=onsearch=0x23816C5609DC7E26 Fork Me https://github.com/kuldeepdhaka -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] variable reusing
On 14.05.2013 20:01, kuldeep dhaka wrote: : while coding (embedded devices) i got an idea. void uart_send_param(uint8_t before, uint8_t after, uint8_t default_value) { uint8_t i = 0; uart_send(ASCII_ESCAPE); uart_send(before); while(before vt100_param_getcount()) { if(vt100_param_get(i) != default_value) { uart_send_int(vt100_param_get(i)); } if(++i vt100_param_getcount()) uart_send(VT100_PARAM_DELIMITER); } uart_send(after); } in the above code, after sending uart_send(before) , before is no more useful to me. Perhaps I'm mistaken, bit what about the before usage one statement later? Do I understand correctly, that you want recycle variable space? If so: don't care, let the compiler handle such situations. If you are in doubt, generate assember output of your differently optimized sources and compare them. Hardy -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] variable reusing
Hello, On Tue, 14 May 2013 23:31:03 +0530 kuldeep dhaka kuldeepdha...@gmail.com wrote: hello guys, while coding (embedded devices) i got an idea. [] in the above code, after sending uart_send(before) , before is no more useful to me. but for while loop i have to get a new variable i for iteration. in this case the compiler allocates the memory in stack. since in embedded system, everything is scare , reusing things come handy and efficient. but if i try to reuse before in loop as replacement of i , it looks odd + bad coding practise, right? but if their is something like __reuse__(before, i) ( like __attribute__() or sizeof() ) or uart_send_param(uint8_t before|i, uint8_t after, uint8_t default_value) after that i could use before as i. You don't need to do anything for this to work as you describe for *local variables* - compiler is supposed to do this for you (at relevant optimization levels, like -O2). Google for live range analysis for more info, http://en.wikipedia.org/wiki/Register_allocation and http://en.wikipedia.org/wiki/Live_variable_analysis are a good start. More interesting question is such support for static (if not global) variables. When trying to do Elliptic Curve Cryptography on MSP430 value line devices which top up at 0.5K RAM, you really wish that compiler could pack together static buffers of functions which cannot be active at the same time ;-). If anyone know of that to be done by gcc, would be nice to get some pointers. -- Best regards, Paul mailto:pmis...@gmail.com -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] variable reusing
On Tue, May 14, 2013 at 09:26:46PM +0300, Paul Sokolovsky wrote: More interesting question is such support for static (if not global) variables. When trying to do Elliptic Curve Cryptography on MSP430 value line devices which top up at 0.5K RAM, you really wish that compiler could pack together static buffers of functions which cannot be active at the same time ;-). If anyone know of that to be done by gcc, would be nice to get some pointers. If you have static buffers which are never in use simultaneously, why not keep them together in a union { }? - Daniel -- Daniel Beer dlb...@gmail.comwww.dlbeer.co.nz IRC: inittab (Freenode)PGP key: 2048D/160A553B -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] variable reusing
Hello, On Wed, 15 May 2013 09:35:14 +1200 Daniel Beer dlb...@gmail.com wrote: On Tue, May 14, 2013 at 09:26:46PM +0300, Paul Sokolovsky wrote: More interesting question is such support for static (if not global) variables. When trying to do Elliptic Curve Cryptography on MSP430 value line devices which top up at 0.5K RAM, you really wish that compiler could pack together static buffers of functions which cannot be active at the same time ;-). If anyone know of that to be done by gcc, would be nice to get some pointers. If you have static buffers which are never in use simultaneously, why not keep them together in a union { }? Yes, the talk was about offloading the work of proving non-simultaneous access constraints and creation of that union to the compiler ;-). Shouldn't be hard for the case of scalar static variables (function-local dataflow analysis and interprocedural control flow analysis), so I wondered if someone knows it to be implemented. To be really useful this should be applied to structural/array vars though, and that's much harder. - Daniel -- Best regards, Paul mailto:pmis...@gmail.com -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users
Re: [Mspgcc-users] variable reusing
Would either of these solutions work?: - use a scheme like Malloc/free to allocate the buffers when you need them - allocate the buffers on the stack (is there a practical limit to doing this?) and that way they can be recycled when not in use The terrible downside with stack based allocation is the potential for silent and deadly stack overflow. At least a scheme like Malloc/free would give you an error, but you wouldn't be able to do anything useful with it at runtime! It's an interesting idea and would be very useful for embedded development, How would the static analysis know when a certain buffer is no longer needed, would you need to insert some kind of static release statement/attribute somewhere? - Wayne On 15/05/2013, at 8:31, Paul Sokolovsky pmis...@gmail.com wrote: Hello, On Wed, 15 May 2013 09:35:14 +1200 Daniel Beer dlb...@gmail.com wrote: On Tue, May 14, 2013 at 09:26:46PM +0300, Paul Sokolovsky wrote: More interesting question is such support for static (if not global) variables. When trying to do Elliptic Curve Cryptography on MSP430 value line devices which top up at 0.5K RAM, you really wish that compiler could pack together static buffers of functions which cannot be active at the same time ;-). If anyone know of that to be done by gcc, would be nice to get some pointers. If you have static buffers which are never in use simultaneously, why not keep them together in a union { }? Yes, the talk was about offloading the work of proving non-simultaneous access constraints and creation of that union to the compiler ;-). Shouldn't be hard for the case of scalar static variables (function-local dataflow analysis and interprocedural control flow analysis), so I wondered if someone knows it to be implemented. To be really useful this should be applied to structural/array vars though, and that's much harder. - Daniel -- Best regards, Paul mailto:pmis...@gmail.com -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d ___ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users