This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BLE-STACK 1.4.2 Code size

Other Parts Discussed in Thread: CC2540

Hi all,

I'm upgrading some application firmware for the CC2540 from 1.4.0 to 1.4.2 in the hopes of solving some other lingering issues.  I just finished following all the porting instructions here:

But the code size is substantially (about 12k) larger now.  Is this consistent with others' experience?  Why is it so much larger?  Now I'm jumping through hoops trying to get the size back down... it's too large to use.  I may have to revert to 1.4.0.

Hopefully I am doing something wrong.  Thanks!

~James

  • Hello James,

    The majority of the changes are from BLE 1.4.1 which includes many bug fixes and enhancements for robustness. I would suggest you start by comparing your map files from 1.4.0 and 1.4.2 to get a more precise summary of the increase impacting your application.

    Best wishes
  • Hi JXS,

    Thanks, but my question is very simple. My question is simply: is 1.4.2 code size bigger than 1.4.0?

    Thank you
    ~James
  • Hi James,

    Yes, it is larger.

    Best wishes
  • Thanks JXS!

    I might just stick with 1.4.0 then. With the amount it's expanded I don't know if I can size reduce my application code enough to fit.
  • Does it also need more XDATA memory?
    Could you provide a before/after dump of the last lines in the memory map?
  • In hunting some other bugs I generated information on the change in BLE stack size.  Here's the summary, drawn from my .map files before (using 1.4.0) and after (using 1.4.2).  The static libraries being linked in are CC2540_BLE_peri.lib and CC254x_BLE_HCI_TL_None.lib.

    All told, the stack is about 10k larger, which is a huge change since a CC2540 product in the field with an over-the-air bootloader gives you about 140k total memory for the application image, and since the BLE stack takes 90k of that you really only have about 50k for your application specific code.  If the BLE stack grows 10k, your application specific code needs to shrink 10k (20%!).

    If anybody has some tips for reducing the code size, I'm all ears.  Hope this helps someone.  Thank you!

    ~James

    1.4.0 BLE Stack Code size (bytes) 1.4.2 BLE Stack Code size (bytes) Delta (bytes) Running delta
    att_server 526 att_server 1049 523 523
    att_util 2784 att_util 2416 -368 155
    gap 77 gap 80 3 158
    gap_configmgr 1404 gap_configmgr 1202 -202 -44
    gap_devmgr 239 gap_devmgr 229 -10 -54
    gap_linkmgr 3495 gap_linkmgr 4534 1039 985
    gap_peridevmgr 1916 gap_peridevmgr 1863 -53 932
    gap_perilinkmgr 138 gap_perilinkmgr 530 392 1324
    gap_task 964 gap_task 1049 85 1409
    gapbondmgr 5249 gapbondmgr 5708 459 1868
    gapgattserver 1459 gapgattserver 1726 267 2135
    gatt_server 4292 gatt_server 4993 701 2836
    gatt_task 771 gatt_task 1359 588 3424
    gatt_uuid 26 gatt_uuid 26 0 3424
    gattservapp 6624 gattservapp 8431 1807 5231
    gattservapp_util 596 596 5827
    hci 1426 hci 1393 -33 5794
    hci_PATCH 656 656 6450
    hci_data 287 hci_data_PATCH 282 -5 6445
    hci_event 3373 hci_event 2687 -686 5759
    hci_event_PATCH 1128 1128 6887
    hci_tl 201 hci_tl 201 0 6887
    l2cap_if 377 l2cap_if 504 127 7014
    l2cap_task 1169 l2cap_task 1236 67 7081
    l2cap_util 2267 l2cap_util 3104 837 7918
    linkdb 827 linkdb 1258 431 8349
    ll 4518 ll 5126 608 8957
    ll_advEndCauses 2461 ll_advEndCauses 2518 57 9014
    ll_common 6353 ll_common 6553 200 9214
    ll_constData 8 ll_constData 8 0 9214
    ll_enc 2658 ll_enc 2532 -126 9088
    ll_errorEndCauses 9 ll_errorEndCauses 9 0 9088
    ll_halt 7 ll_halt 7 0 9088
    ll_isr 657 ll_isr 746 89 9177
    ll_math 81 ll_math 81 0 9177
    ll_scheduler 3519 ll_scheduler 3566 47 9224
    ll_slaveEndCauses 4533 ll_slaveEndCauses 4903 370 9594
    ll_sleep 638 ll_sleep 650 12 9606
    ll_timer2 1350 ll_timer2 1412 62 9668
    ll_timerDrift 308 ll_timerDrift 293 -15 9653
    oad_target 46 oad_target 46 0 9653
    osal_bufmgr 438 osal_bufmgr 438 0 9653
    osal_cbtimer 602 osal_cbtimer 735 133 9786
    osal_snv 2104 osal_snv 2104 0 9786
    peripheral 3634 peripheral 3746 112 9898
    phy 1431 phy 1427 -4 9894
    phy_image 3582 phy_image 3582 0 9894
    process_cmd 1793 process_cmd 1810 17 9911
    sm_mgr 3761 sm_mgr 3600 -161 9750
    sm_pairing 3867 sm_pairing 3900 33 9783
    sm_rsppairing 2910 sm_rsppairing 2874 -36 9747
    sm_task 439 sm_task 456 17 9764
    smp 2052 smp 2231 179 9943
    TOTAL 93650 103593 9943
  • Hi Elias,

    XDATA usage looks about the same. Here are the maps you ask for - sorry I didn't have time to pull out all my application specific stuff (it changes very slightly between the two maps)

    ****************************** BEGIN 1.4.0 MAP DUMP **********************************
    ****************************************
    * *
    * MODULE SUMMARY *
    * *
    ****************************************

    Module CODE DATA XDATA IDATA BIT CONST
    ------ ---- ---- ----- ----- --- -----
    (Rel) (Rel) (Abs) (Rel) (Abs) (Rel) (Rel) (Rel)
    ?ADD_XSTACK_DISP8 27
    ?ALLOC_XSTACK8 22
    ?BANKED_CODE_SUPPORT 30
    ?BANKED_ENTER_XDATA 108
    ?BANKED_LEAVE_XDATA 70
    ?CALL_IND 2
    ?CHECKSUM 2
    ?DEALLOC_XSTACK8 27
    ?FILLER_BYTES 6 586
    + common 142
    ?FLT_ADD 575
    ?FLT_DIV 486
    ?FLT_EQ 44
    ?FLT_GE 79
    ?FLT_LT 76
    ?FLT_MUL 384
    ?FLT_TEST_INF 20
    ?FLT_TEST_INF_R1 20
    ?FLT_TEST_NAN 15
    ?FLT_TEST_NAN_R1 15
    ?FLT_TEST_ZERO 9
    ?FLT_TEST_ZERO_R1 9
    ?FLT_TO_L 154
    ?FUNC_ENTER_XDATA 102
    ?FUNC_LEAVE_XDATA 64
    ?INTERRUPT_ENTER_XSP 95
    ?INTERRUPT_LEAVE_XSP 88
    ?LONGJMP_XDATA 84
    ?L_ADD 19
    ?L_ADD_TO_X 19
    ?L_ADD_X 19
    ?L_AND_TO_X 19
    ?L_AND_X 19
    ?L_DIV_MOD 87
    ?L_EQ 21
    ?L_EQ_X 21
    ?L_IOR 19
    ?L_MOV_C 19
    ?L_MOV_PX 15
    ?L_MOV_TO_PX_A 21
    ?L_MOV_TO_X 15
    ?L_MOV_X 15
    ?L_MUL 128
    ?L_NEG 20
    ?L_NEG_R1 17
    ?L_NOT 16
    ?L_SHL 31
    ?L_SUB 20
    ?L_SUB_FROM_X 20
    ?L_SUB_X 24
    ?L_TO_FLT 120
    ?MOVE_LONG8_PDATA_XDATA 13
    ?MOVE_LONG8_XDATA_IDATA 13
    ?MOVE_LONG8_XDATA_XDATA 33
    ?PUSH_XSTACK8_X 49
    ?PUSH_XSTACK_I 23
    ?SC_DIV_MOD 34
    ?SETJMP_XDATA 78
    ?SL_GE_X 38
    ?SL_GT 21
    ?SL_SHR 26
    ?SS_SHR 16
    ?S_DIV_MOD 154
    ?S_SHL 19
    ?UC_JMP_IF_IN_RANGE 31
    ?UC_JMP_IF_VALUE 22
    ?UC_SWITCH_DENSE 54
    ?UC_SWITCH_SPARSE 42
    ?UL_DIV_MOD 111
    ?UL_GE_X 31
    ?UL_GT 16
    ?UL_GT_X 16
    ?UL_SHR 25
    ?US_JMP_IF_IN_RANGE 63
    ?US_JMP_IF_VALUE 43
    ?US_SHR 15
    ?US_SWITCH_DENSE 70
    ?US_SWITCH_SPARSE 76
    ?XLOAD_R0123 12
    ?XLOAD_R2345 12
    ?XLOAD_R4567 12
    ?XSTACK_DISP8 10
    ?XSTACK_DISP8_RP 24
    ?XSTORE_R0123 12
    ?XSTORE_R2345 12
    ?XSTORE_R4567 12
    ?cexit 5
    ?cmain 146
    ?errno 2
    ?frexp 103
    ?memset 50
    ?sqrt 418 16
    ?strlen 36
    ADS1292Callback 3 351 25 12
    + shared 3 8
    ADS1x9x 1 832 7 1 574 3
    + shared 70 15
    + common
    Blinker 435 5
    CSTARTUP 24
    + common 3
    CalibrationHelper 5 252 3 86
    + shared 2 4
    CommandTree 398 398
    LogController 3 302 694 175
    MooshimeterProfile 1 158 74 99
    Mooshimeter_Main 510 4 1
    + shared 142 1
    + common
    OSAL 1 566 4
    OSAL_ClockBLE 328 10
    OSAL_Memory 538 2 051
    OSAL_Mooshimeter 127 30 33
    OSAL_PwrMgr 179 7
    OSAL_Timers 1 204 6
    OnBoard 53
    RangeConsts 702 28
    Streamer 984 34
    VIRTUAL_REGISTERS 19 8
    att_server 526
    att_util 2 784 16
    conversion 1 041 32
    + shared 4
    crc_sd 885 2
    diskio 2 255 4 2 12
    + shared 2 8
    ff 12 788 2 51
    + shared 12
    gap 77
    gap_configmgr 1 404 106
    + shared 4
    gap_devmgr 239 2
    gap_linkmgr 3 945 8
    gap_peridevmgr 1 916 13 4
    gap_perilinkmgr 138
    gap_task 964 6
    gapbondmgr 5 249 193 6
    + shared 4
    gapgattserver 1 459 134 9
    gatt_server 4 292 13 48
    gatt_task 771 5
    gatt_uuid 26 26
    gattservapp 6 624 96 9
    gmtime 866 24
    + shared 20
    hal_adc
    + shared 3
    hal_aes 85
    + shared 1
    hal_crc
    + shared 2
    hal_dma 23 4 40
    hal_drivers 203 1
    hal_flash 305
    + shared 1
    hal_sleep 647 1 1 3 24
    + shared 46 2
    + common
    hal_startup 11
    hci 1 426 5
    hci_data 287
    hci_event 3 373 9
    hci_tl 201 6
    int24 162 4
    l2cap_if 377 1
    l2cap_task 1 169 37
    l2cap_util 2 267 1
    linkdb 827 59
    ll 4 518 4 464 2 4
    + shared 2 8
    ll_advEndCauses 2 461
    ll_common 6 353 10 16
    + shared 4
    ll_constData 8
    ll_enc 2 658 44 32
    ll_errorEndCauses 9
    ll_halt 7 2
    ll_isr 657
    + shared 134 9
    + common
    ll_math 81 6
    ll_scheduler 3 519 447 16
    ll_slaveEndCauses 4 533 4
    ll_sleep 638 12
    + shared 4
    ll_timer2 1 350 8
    ll_timerDrift 308 26
    mooshimeter 2 135 1 153 20
    + shared 4
    oad_target 46
    osal_bufmgr 438 2
    osal_cbtimer 602 62
    osal_snv 2 104 4 4 096 4
    + shared 4
    peripheral 3 634 152
    phy 1 431 1
    phy_image 3 582 3 582
    process_cmd 1 793 21
    sm_mgr 3 761 2 16
    sm_pairing 3 867 6 25
    sm_rsppairing 2 910 6
    sm_task 439 1
    smp 2 052
    N/A (command line) 8 1 152 192
    N/A (alignment)
    ---------- ------- -- -- ----- ----- --- - -----
    Total: 149 362 36 86 7 808 4 096 194 8 4 933
    + common 142



    ****************************** BEGIN 1.4.2 MAP DUMP **********************************

    ****************************************
    * *
    * MODULE SUMMARY *
    * *
    ****************************************

    Module CODE DATA XDATA IDATA BIT CONST
    ------ ---- ---- ----- ----- --- -----
    (Rel) (Abs) (Rel) (Abs) (Rel) (Rel) (Rel) (Rel)
    ?ADD_XSTACK_DISP8 27
    ?ALLOC_XSTACK8 22
    ?BANKED_CODE_SUPPORT 30
    ?BANKED_ENTER_XDATA 108
    ?BANKED_LEAVE_XDATA 70
    ?CALL_IND 2
    ?CHECKSUM 2
    ?DEALLOC_XSTACK8 27
    ?FILLER_BYTES 28 762
    + common 142
    ?FLT_ADD 575
    ?FLT_DIV 486
    ?FLT_EQ 44
    ?FLT_GE 79
    ?FLT_LT 76
    ?FLT_MUL 384
    ?FLT_TEST_INF 20
    ?FLT_TEST_INF_R1 20
    ?FLT_TEST_NAN 15
    ?FLT_TEST_NAN_R1 15
    ?FLT_TEST_ZERO 9
    ?FLT_TEST_ZERO_R1 9
    ?FLT_TO_L 154
    ?FUNC_ENTER_XDATA 102
    ?FUNC_LEAVE_XDATA 64
    ?INTERRUPT_ENTER_XSP 95
    ?INTERRUPT_LEAVE_XSP 88
    ?LONGJMP_XDATA 84
    ?L_ADD 19
    ?L_ADD_TO_X 19
    ?L_ADD_X 19
    ?L_AND_TO_X 19
    ?L_AND_X 19
    ?L_DIV_MOD 87
    ?L_EQ 21
    ?L_EQ_X 21
    ?L_IOR 19
    ?L_MOV_C 19
    ?L_MOV_PX 15
    ?L_MOV_TO_PX_A 21
    ?L_MOV_TO_X 15
    ?L_MOV_X 15
    ?L_MUL 128
    ?L_NEG 20
    ?L_NEG_R1 17
    ?L_NOT 16
    ?L_SHL 31
    ?L_SUB 20
    ?L_SUB_FROM_X 20
    ?L_SUB_X 24
    ?L_TO_FLT 120
    ?MOVE_LONG8_PDATA_XDATA 13
    ?MOVE_LONG8_XDATA_IDATA 13
    ?MOVE_LONG8_XDATA_XDATA 33
    ?PUSH_XSTACK8_X 49
    ?PUSH_XSTACK_I 23
    ?SC_DIV_MOD 34
    ?SETJMP_XDATA 78
    ?SL_GE_X 38
    ?SL_GT 21
    ?SL_SHR 26
    ?SS_SHR 16
    ?S_DIV_MOD 154
    ?S_SHL 19
    ?UC_JMP_IF_IN_RANGE 31
    ?UC_JMP_IF_VALUE 22
    ?UC_SWITCH_DENSE 54
    ?UC_SWITCH_SPARSE 42
    ?UL_DIV_MOD 111
    ?UL_GE_X 31
    ?UL_GT 16
    ?UL_GT_X 16
    ?UL_SHR 25
    ?US_JMP_IF_IN_RANGE 63
    ?US_JMP_IF_VALUE 43
    ?US_SHR 15
    ?US_SWITCH_DENSE 70
    ?US_SWITCH_SPARSE 76
    ?XLOAD_R0123 12
    ?XLOAD_R2345 12
    ?XSTACK_DISP8 10
    ?XSTACK_DISP8_RP 24
    ?XSTORE_R0123 12
    ?XSTORE_R2345 12
    ?cexit 5
    ?cmain 146
    ?errno 2
    ?frexp 103
    ?memset 50
    ?sqrt 418 16
    ?strlen 36
    ADS1292Callback 3 334 25 12
    + shared 3 8
    ADS1x9x 1 836 7 1 574 3
    + shared 70 15
    + common
    Blinker 423 5
    + shared 4
    CSTARTUP 24
    + common 3
    CalibrationHelper 4 885 5 86
    + shared 2 4
    CommandTree 387 387
    LogController 3 315 694 173
    MooshimeterProfile 1 185 70 99
    Mooshimeter_Main 475 4 1
    + shared 142 1
    + common
    OSAL 1 577 4
    OSAL_ClockBLE 328 10
    OSAL_Memory 538 2 051
    OSAL_Mooshimeter 131 32 31
    OSAL_PwrMgr 191 7
    OSAL_Timers 1 204 6
    OnBoard 53
    RangeConsts 702 28
    Streamer 1 218 16
    VIRTUAL_REGISTERS 19 8
    att_server 1 049 2
    att_util 2 416 16
    conversion 1 037 32
    crc_sd 885 2
    diskio 2 312 4 2 12
    + shared 2 8
    ff 9 884 51
    + shared 12
    gap 80
    gap_configmgr 1 202 106
    + shared 4
    gap_devmgr 229 2
    gap_linkmgr 4 534 20
    gap_peridevmgr 1 863 13 4
    gap_perilinkmgr 530 2
    gap_task 1 049 6
    gapbondmgr 5 708 196 6
    + shared 4
    gapgattserver 1 726 134 9
    gatt_server 4 993 7 48
    gatt_task 1 359 6
    gatt_uuid 26 26
    gattservapp 8 431 66 9
    gattservapp_util 596
    gmtime 866 24
    + shared 20
    hal_adc
    + shared 3
    hal_aes 85
    + shared 1
    hal_crc
    + shared 2
    hal_dma 23 4 40
    hal_drivers 203 1
    hal_flash 305
    + shared 1
    hal_sleep 647 1 1 3 24
    + shared 46 2
    + common
    hal_startup 11
    hci 1 393 4
    hci_PATCH 656
    hci_data_PATCH 282
    hci_event 2 687 9
    hci_event_PATCH 1 128 8
    hci_tl 201 6
    int24 162 4
    l2cap_if 504 1
    l2cap_task 1 236 43
    l2cap_util 3 104 1
    linkdb 1 258 27
    ll 5 126 4 472 2 4
    + shared 2 12
    ll_advEndCauses 2 518
    ll_common 6 553 10 16
    + shared 4
    ll_constData 8
    ll_enc 2 532 44 32
    ll_errorEndCauses 9
    ll_halt 7 2
    ll_isr 746
    + shared 134 9
    + common
    ll_math 81 6
    ll_scheduler 3 566 483 16
    ll_slaveEndCauses 4 903 4
    ll_sleep 650 12
    + shared 4
    ll_timer2 1 412 8
    ll_timerDrift 293 26
    mooshimeter 2 150 1 153 20
    + shared 4
    oad_target 46
    osal_bufmgr 438 2
    osal_cbtimer 735 62
    osal_snv 2 104 4 096 4 4
    + shared 4
    peripheral 3 746 153
    phy 1 427 1
    phy_image 3 582 3 582
    process_cmd 1 810 21
    sm_mgr 3 600 2 16
    sm_pairing 3 900 6 25
    sm_rsppairing 2 874 6
    sm_task 456 1
    smp 2 231
    N/A (command line) 8 1 152 192
    N/A (alignment)
    ---------- ------- ----- -- -- ----- --- - -----
    Total: 178 034 4 096 36 86 7 798 194 8 4 922
    + common 142