title: Bootloader and Firmware Common Usage and Firmware Upgrade
body: <p>There are two case when working on an embedded system. 
  Embedded system have limited resources like as ARM Cortex M0 Microcontroller with 12 K Flash. </p>
  
  <p><strong>Case 1 :</strong> 
  Common function/module usage for Bootloader and Firmware : 
  Bootloader and Firmware may need to use same module and function to prevent code duplication. Otherwise, same code will be included both Firmware and Bootloader twice. 
  We can prevent this by specify the function address and call this function by calling functions by addresses. This is one of the solutions. </p>
  
  <p><strong>Is there any smart method to provide common function usage?</strong></p>
  
  <p><strong>Case 2 :</strong> 
  Sometimes, we need to upgrade firmware. One of the duties of bootloader is firmware upgrades. We can easily upgrade the firmware by overwrite the old one. </p>
  
  <p>As we saw, two case can be implemented separately. But when we merge they, some problems are appeared. </p>
  
  <p><strong>Question :</strong> 
  Bootloader's are generally static objects but firmware's are can be modified. Therefore, common functions are generally located at Bootloaders. But when we need update a common module/function, how can we do? </p>
  
  <p><strong>What are the general or smart approaches</strong> which bootloader, firmware structured embedded systems? In Addition, for limited resources.</p>
  
  <p>To discrete common modules/functions, Can one or more additional areas solve this problems. 
  Firmware, Bootloader and Library(New Area)? </p>
  
  <p>I want to learn general approaches. Is there any paper, book and source about advanced Firmware management? </p>
  
  <p>Thanks</p>