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
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.
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