Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Embedded C

8,284 views

Published on

Embedded C for Bare Metal Programming

Published in: Technology
  • plz send me copy this gst.engineer@gmail.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Embedded C

  1. 1. © 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Fun with 'Embedded' C
  2. 2. 2© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? What is in Embedded? De-jargonified Pointers Hardware Programming Compiler Optimizations Register Programming Techniques Playful Bit Operations
  3. 3. 3© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What is in Embedded? Typically for a cross architecture Needs cross compilation Needing architecture specific options like -mcpu No-frills Programming Typically no library code usage No init setup code Have a specific / custom memory map Needs specific code placement Programming a Bare Metal No code support framework like stack, ... No execution support framework like loader
  4. 4. 4© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Pointers: De-jargonification through 7 rules
  5. 5. 5© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #0: Foundation Memory Locations & its Address CPU RAM DB Integer i; Pointer p; i = 6; p = 6; i p AB 0 4 8 12 16 20 24 28 32 36 6 6
  6. 6. 6© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #1: Pointer as an Integer “Pointer is an Integer” Exceptions: May not be of same size Rule #2
  7. 7. 7© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #2: Pointer not an Integer Variable Address Referencing (&) De-referencing (*)
  8. 8. 8© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #3: Pointer Type Why do we need types attached to pointers? Only for 'dereferencing' “Pointer of type t = t Pointer = (t *)” It is a variable Which contains an address Which when dereferenced returns a variable of type t Starting from that address Defining a Pointer, indirectly
  9. 9. 9© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #4: Pointer Value “Pointer pointing to a Variable = Pointer contains the Address of the Variable” “Pointing means Containing Address”
  10. 10. 10© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #5: NULL Pointer Need for Pointing to 'Nothing' Evolution of NULL, typically 0 “Pointer value of NULL = Null Addr = Null Pointer = Pointing to Nothing”
  11. 11. 11© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Array Interpretations Original Big Variable Consisting of Smaller Variables Of Same Type Placed consecutively Constant Pointer to the 1st Small Variable In the Big Variable
  12. 12. 12© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #6: Array vs Pointer arr + i = &arr[i] Value(arr + i) = Value(arr) + i * sizeof(*arr) “Value(p + i) = Value(p) + i * sizeof(*p)” Corollaries: p + i = &p[i] *(p + i) = p[i] sizeof(void) = 1
  13. 13. 13© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Rule #7: Allocation Types “Static Allocation vs Dynamic Allocation” Named vs Unnamed Allocation Managed by Compiler vs User Done internally by Compiler vs Using malloc/free Dynamic corresponding of a 1-D Static Array Can be treated same once allocated Except their sizes
  14. 14. 14© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. 2-D Arrays Each Dimension could be Static, or Dynamic Various Forms for 2-D Arrays (2x2 = 4) Both Static (Rectangular) - arr[r][c] First Static, Second Dynamic - *arr[r] First Dynamic, Second Static - (*arr)[c] Both Dynamic - **arr 2-D Arrays using a Single Level Pointer
  15. 15. 15© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Hardware Programming
  16. 16. 16© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Compiler Optimizations Using -O0, -O1, -O2, -O3, -Os, -Ofast, -Og May eliminate seemingly redundant code But important from embedded C perspective Examples Seemingly meaningless reads/writes NOP loop for delay Functions not called from C code Ways to avoid Use -O0 or no optimization Use volatile for hardware mapped variables Use __attribute__((optimize("O0"))) for specific functions Use asmlinkage for functions called from assembly
  17. 17. 17© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Register Programming Techniques Direct using the (Bus) Address Indirect through some Direct Register Multiplexed using some Config Registers / Bits Example: UART Registers, ... Clear On Set Example: Status Registers, ... Protected Access using Lock / Unlock Registers Example: MAC Id Registers, ...
  18. 18. 18© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Bit Operations Using the C operators &, |, ^, ~, <<, >> Assignment equivalents of those Clearing using &, ~ Setting using | Toggling using ^ Shifting, Multiplication using << Shifting, Division using >>
  19. 19. 19© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? Specifics of Embedded C Architecture Specifics, Linker Scripts, Bare Metal Pointers Simplified 7 Rules, Arrays Hardware Programming Compiler Optimizations Register Programming Techniques Playful Bit Operations
  20. 20. 20© 2015 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?

×