DeviationTX / deviation

Custom firmware for RC Transmitters
http://www.deviationtx.com
GNU General Public License v3.0
248 stars 155 forks source link

[TODO] opportunity to optimize ROM&RAM usage #509

Open howard0su opened 5 years ago

howard0su commented 5 years ago

By checking the map file, there are many objects sharing the same name and also one function. It is opportunity to optimize this as we discussed in issue #502.

There is a feature in linker if we declare a variable as global variables. The linker allocate only one piece of RAM with the largest size among all the same name variables. For protocol we can add a macro to declare the variables with a prefix to indicate it is shared among the protocols.

200004ec l O .bss 00000001 bind_count 200004ee l O .bss 00000002 bind_counter.8607 200004f0 l O .bss 00000002 bind_counter.lto_priv.622 200004f2 l O .bss 00000002 bind_counter.lto_priv.623 200004f4 l O .bss 00000001 bind_counter.lto_priv.624 200004f6 l O .bss 00000002 bind_counter.lto_priv.625 200004f8 l O .bss 00000002 bind_counter.lto_priv.626

20000608 l O .bss 00000002 counter.lto_priv.483 2000060a l O .bss 00000002 counter.lto_priv.484 2000060c l O .bss 00000001 counter.lto_priv.485 20000610 l O .bss 00000004 counter.lto_priv.486 20000614 l O .bss 00000002 counter.lto_priv.487 20000618 l O .bss 00000004 counter.lto_priv.488 2000061c l O .bss 00000002 counter.lto_priv.489 2000061e l O .bss 00000001 counter.lto_priv.490

20000696 l O .bss 00000010 hopping_frequency.lto_priv.615 200006a6 l O .bss 00000010 hopping_frequency.lto_priv.616 200006b6 l O .bss 00000004 hopping_frequency.lto_priv.618 200006ba l O .bss 00000014 hopping_frequency.lto_priv.619 200006ce l O .bss 00000014 hopping_frequency.lto_priv.620 200006e2 l O .bss 00000032 hopping_frequency.lto_priv.621 20000714 l O .bss 00000001 hopping_frequency_no.lto_priv.629 20000715 l O .bss 00000001 hopping_frequency_no.lto_priv.630 20000716 l O .bss 00000001 hopping_frequency_no.lto_priv.631 20000717 l O .bss 00000001 hopping_frequency_no.lto_priv.632 20000718 l O .bss 00000001 hopping_frequency_no.lto_priv.633 20000719 l O .bss 00000001 hopping_frequency_no.lto_priv.634

20000b21 l O .bss 00000020 packet.lto_priv.704 20000b41 l O .bss 0000000f packet.lto_priv.705 20000b50 l O .bss 00000016 packet.lto_priv.706 20000b66 l O .bss 00000018 packet.lto_priv.707 20000b7e l O .bss 0000000f packet.lto_priv.708 20000b8d l O .bss 00000028 packet.lto_priv.709 20000bb5 l O .bss 0000001a packet.lto_priv.710 20000bcf l O .bss 00000015 packet.lto_priv.711 20000be4 l O .bss 00000010 packet.lto_priv.712 20000bf4 l O .bss 0000000c packet.lto_priv.713 20000c00 l O .bss 00000010 packet.lto_priv.714 20000c10 l O .bss 0000000f packet.lto_priv.715 20000c1f l O .bss 0000000a packet.lto_priv.716

20000c2c l O .bss 00000004 packet_count.lto_priv.794 20000c30 l O .bss 00000001 packet_count.lto_priv.795 20000c31 l O .bss 00000001 packet_count.lto_priv.796 20000c34 l O .bss 00000004 packet_counter 20000c38 l O .bss 00000004 packet_period.lto_priv.811 20000c3c l O .bss 00000002 packet_period.lto_priv.812 20000c3e l O .bss 00000002 packet_period.lto_priv.813 20000c40 l O .bss 00000001 packet_size

20000c4d l O .bss 00000001 phase.lto_priv.761 20000c4e l O .bss 00000001 phase.lto_priv.762 20000c4f l O .bss 00000001 phase.lto_priv.763 20000c50 l O .bss 00000001 phase.lto_priv.764 20000c51 l O .bss 00000001 phase.lto_priv.765 20000c52 l O .bss 00000001 phase.lto_priv.766 20000c53 l O .bss 00000001 phase.lto_priv.767

20000c89 l O .bss 00000001 rf_chan.lto_priv.824 20000c8a l O .bss 00000001 rf_chan.lto_priv.825 20000c8b l O .bss 00000001 rf_channel 20000c8c l O .bss 00000004 rf_channels 20000c90 l O .bss 0000000f rf_chans.lto_priv.774 20000c9f l O .bss 00000004 rf_chans.lto_priv.775 20000ca3 l O .bss 00000004 rf_chans.lto_priv.776

20000ca8 l O .bss 00000020 rx_packet 20000cc8 l O .bss 00000001 rx_payload_len

20000cc9 l O .bss 00000005 rx_tx_addr.lto_priv.804 20000cce l O .bss 00000005 rx_tx_addr.lto_priv.805 20000cd3 l O .bss 00000005 rx_tx_addr.lto_priv.806 20000cd8 l O .bss 00000004 rx_tx_addr.lto_priv.808 20000cdc l O .bss 00000005 rx_tx_addr.lto_priv.810

20000ce2 l O .bss 00000001 state.lto_priv.787 20000ce3 l O .bss 00000001 state.lto_priv.788 20000ce4 l O .bss 00000002 state.lto_priv.789 20000ce6 l O .bss 00000001 state.lto_priv.790 20000ce8 l O .bss 00000002 state.lto_priv.791

20000d17 l O .bss 00000001 tx_power.lto_priv.745 20000d18 l O .bss 00000001 tx_power.lto_priv.746 20000d19 l O .bss 00000001 tx_power.lto_priv.747 20000d1a l O .bss 00000001 tx_power.lto_priv.748 20000d1b l O .bss 00000001 tx_power.lto_priv.749 20000d1c l O .bss 00000001 tx_power.lto_priv.750 20000d1d l O .bss 00000001 tx_power.lto_priv.751 20000d1e l O .bss 00000001 tx_power.lto_priv.752

20000d1f l O .bss 00000003 txid.lto_priv.814 20000d22 l O .bss 00000003 txid.lto_priv.815 20000d25 l O .bss 00000002 txid.lto_priv.816 20000d27 l O .bss 00000004 txid.lto_priv.817

20003c4a l O .bss 00000002 current_selected.lto_priv.874 20003c4c l O .bss 00000006 current_selected.lto_priv.875 20003c52 l O .bss 00000002 current_selected.lto_priv.876 20003c54 l O .bss 00000002 current_selected.lto_priv.877 20003c56 l O .bss 00000002 current_selected.lto_priv.878 20003c58 l O .bss 00000002 current_selected.lto_priv.879 20003c5a l O .bss 00000002 current_selected.lto_priv.880 20003c5c l O .bss 00000002 current_selected.lto_priv.881 20004f74 l O .bss 00000002 current_selected.lto_priv.243 20004f76 l O .bss 00000002 current_selected.lto_priv.244

08014628 l F .text 00000050 get_tx_id.lto_priv.638 08014628 l F .text 00000050 get_tx_id.lto_priv.639 08014628 l F .text 00000050 get_tx_id.lto_priv.640

howard0su commented 5 years ago

a simple solution is declare those variable as global instead of static. Linker is smart enough to pick the largest allocation for all the variables with the same name. This is same only for protocol.