rpicsim 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd4ff6f54bf53d46e52ab338f4cf495a099e2de5
4
- data.tar.gz: 5f5dc6b5693fbaca9e88699a1e340fe9c36b11b1
3
+ metadata.gz: a7dd67ae71f9052d9fa174cace952aa468a0001d
4
+ data.tar.gz: 72a07a6240931d85054651627a017677924d1a9e
5
5
  SHA512:
6
- metadata.gz: 8effea68fe1786bf5d6517eaa6284827ff85867343de19ffd424ea81e1875175e92d8cd23ea4e0fa0504a890f0dacce649fa766e4e391bd0e8097393a2f40705
7
- data.tar.gz: b9be314ea31c1885fa570386ab6e59ab94d0e9c7364d6a89bd4026891087d2722e9125c23aef5843445dd9c285da1014762c1f32facd6ec9ee0e4d1b0effafbb
6
+ metadata.gz: 94d406a34b8dc47900a487a306a3071ec2a441b039e6696c4f3c422cb2d92c27c0b200d13ea80e537df9b73dab4657db9edcf102d94fa3a7b516d39aa5128c55
7
+ data.tar.gz: 7c332af37e3563c1b12249c1fa690ca07f297dbb56175403b7b2d3c333fc3fdddd95825919ce40cafe90c1f1eb533a11842e61276a0b5652d765d26431637d73
@@ -1,6 +1,27 @@
1
1
  Change log
2
2
  ====
3
3
 
4
+ 0.4.0
5
+ ----
6
+ Released on 2014-07-30.
7
+
8
+ - Adds {RPicSim::Memory#read_bytes} and {RPicSim::Memory#write_bytes}.
9
+ - Adds {RPicSim::Sim#stack_memory}.
10
+ - Fixes a bug in the RSpec 3.x support that was breaking the informative error messages when an example fails.
11
+ - Adds the ability to define symbols used in your simulation from sources other than a the COF file.
12
+ - Adds {RPicSim::Sim::ClassDefinitionMethods#import_symbols}, which calls {RPicSim::ProgramFile#import_symbols}
13
+ - Adds {RPicSim::Sim::ClassDefinitionMethods#def_symbol}, which calls {RPicSim::ProgramFile#def_symbol}
14
+ - Adds {RPicSim::ProgramFile#symbols} so you can more easily debug symbol-related problems and get access to symbols even if RPicSim does not recognize what type they are.
15
+ - Adds the {RPicSim::Xc8SymFile} class, which can load symbols from a SYM file produced by the XC8 compiler and then be passed to {RPicSim::Sim::ClassDefinitionMethods#import_symbols import_symbols}. This was necessary because the COF files produced by XC8 are difficult to interpret and do not always allow us to tell what memory space a given symbol is for.
16
+ - {RPicSim::Sim::ClassMethods#label #label} and {RPicSim::Sim::ClassMethods#labels #labels} methods are now available on both instances of a simulation class or on a simulation class itself.
17
+
18
+ 0.3.0
19
+ ----
20
+ Released on 2014-06-20.
21
+
22
+ - Adds support for RSpec 3.x. This release was tested with RSpec 2.14.1, 2.99.0, and 3.0.0.
23
+ - Adds support for MPLAB X 2.10.
24
+
4
25
  0.2.5
5
26
  ----
6
27
  Released on 2014-05-02.
@@ -40,4 +61,4 @@ Released on 2014-03-07.
40
61
  Released on 2014-02-12.
41
62
  This is the initial release.
42
63
  There are still some major things missing from this version that need to be added before we release 1.0.0.
43
- Until 1.0.0 is released, we will not worry about backwards compatibility or writing complete change logs.
64
+ Until 1.0.0 is released, we will not worry about backwards compatibility or writing complete change logs.
@@ -197,3 +197,15 @@ Variables from XC8 are not correctly identified
197
197
 
198
198
  RAM variables in programs using the XC8 compiler are often misidentified as being in program memory, and you need to get their address using {RPicSim::ProgramFile#symbols_in_program_memory}.
199
199
  Some variables are not be identified at all, and you would have to write code to get their addresses from the SYM file.
200
+
201
+ Cannot read the top byte of PIC18 flash memory
202
+ ----
203
+
204
+ _Type: MPLAB X bug_
205
+
206
+ _MPLAB X versions affected: all tested verions_
207
+
208
+ Attempting to read from the top (last) byte of program memory will cause an exception because the top address is not considered to be valid.
209
+ For example, you cannot use `program_memory.read_byte(0x7FFF)` on a PIC18F25K50 simulation.
210
+ One workaround is to use `read_word` instead.
211
+ This seems to only affect PIC18 devices.
@@ -27,7 +27,7 @@ Therefore, to get the address of a C function named `foo`, you might have to acc
27
27
  If RPicSim cannot find the label you want to use, you might troubleshoot it by printing out a list of all the known labels:
28
28
 
29
29
  !!!ruby
30
- p sim.program_file.labels.keys
30
+ p sim.labels.keys
31
31
 
32
32
 
33
33
  Using a Label object
@@ -1,3 +1,4 @@
1
1
  require_relative 'rpicsim/version'
2
2
  require_relative 'rpicsim/sim'
3
3
  require_relative 'rpicsim/call_stack_info'
4
+ require_relative 'rpicsim/xc8_sym_file'
@@ -7,7 +7,7 @@ module RPicSim
7
7
  # The behavior of +read_word+ and +write_word+ differs depending on
8
8
  # what kind of Memory is being used, as shown in the table below:
9
9
  #
10
- # Memory type Address type Read/write chunk
10
+ # Memory type Address type Read/write chunk for word methods
11
11
  # RAM and EEPROM: Byte address 1 byte (8 bits)
12
12
  # PIC18 program memory: Byte address 1 word (16 bits)
13
13
  # Non-PIC18 program memory: Word address 1 word (12 or 14 bits)
@@ -26,24 +26,61 @@ module RPicSim
26
26
  @mplab_memory = mplab_memory
27
27
  end
28
28
 
29
+ # Reads the byte in memory at the specified address.
30
+ #
31
+ # @param address [Integer]
32
+ # @return [Integer]
29
33
  def read_byte(address)
30
34
  @mplab_memory.read_byte(address)
31
35
  end
32
36
 
37
+ # Writes the given integer to the byte in memory at the specified address.
38
+ #
39
+ # @param address [Integer]
40
+ # @param value [Integer]
33
41
  def write_byte(address, value)
34
42
  @mplab_memory.write_byte(address, value)
35
43
  end
36
44
 
45
+ # Reads the word in memory at the specified address.
46
+ # @param address [Integer]
47
+ # @return [Integer]
37
48
  def read_word(address)
38
49
  @mplab_memory.read_word(address)
39
50
  end
40
51
 
52
+ # Writes the given integer to the word in memory at the specified address.
53
+ # @param address [Integer]
54
+ # @param value [Integer]
41
55
  def write_word(address, value)
42
56
  @mplab_memory.write_word(address, value)
43
57
  end
44
58
 
59
+ # Returns true if the specified address is valid.
60
+ # @param address [Integer]
61
+ # @return true or false
45
62
  def valid_address?(address)
46
63
  @mplab_memory.valid_address?(address)
47
64
  end
65
+
66
+ # Reads a series of bytes from the simulated memory using +read_byte+ and
67
+ # returns them as an array.
68
+ #
69
+ # @param address [Integer] The address of the first byte to read.
70
+ # @param size [Integer] The number of bytes to read.
71
+ # @return [Array(Integer)]
72
+ def read_bytes(address, size)
73
+ size.times.map { |i| read_byte(address + i) }
74
+ end
75
+
76
+ # Writes a series of bytes to the simulated memory.
77
+ #
78
+ # @param address [Integer]
79
+ # @param bytes Array of integers or a string.
80
+ def write_bytes(address, bytes)
81
+ bytes = bytes.bytes if bytes.is_a?(String)
82
+ bytes.each_with_index { |b, i| write_byte(address + i, b) }
83
+ nil
84
+ end
48
85
  end
49
86
  end
@@ -16,6 +16,10 @@ module RPicSim::Mplab
16
16
  @program_file.Load
17
17
  end
18
18
 
19
+ def symbols
20
+ @symbols ||= Hash[raw_symbols.map { |s| [s.m_Symbol.to_sym, s.address] }]
21
+ end
22
+
19
23
  def symbols_in_ram
20
24
  @symbols_in_ram ||= Hash[
21
25
  grouped_symbols[:ram]
@@ -41,7 +45,7 @@ module RPicSim::Mplab
41
45
 
42
46
  def grouped_symbols
43
47
  @grouped_symbols ||= begin
44
- hash = symbols.group_by(&method(:memory_type))
48
+ hash = raw_symbols.group_by(&method(:memory_type))
45
49
  hash.default = []
46
50
  hash
47
51
  end
@@ -71,7 +75,9 @@ module RPicSim::Mplab
71
75
  # 111 XC8 program memory variable (array of uint32_t) (but sometimes it is in RAM instead)
72
76
  # 366 XC8 program memory variable (array of pointers)
73
77
  #
74
- # TODO: make a test for each of these cases; TestXC8.c and program_file_spec.rb only only has a few
78
+ # The numbers above are not very well tested and probably incomplete. This
79
+ # is OK because for XC8 programs people should use the HEX and SYM file
80
+ # instead of the COF file.
75
81
  def memory_type(symbol)
76
82
  case symbol.m_lType
77
83
  when 0, 2, 8, 12, 40, 44, 108
@@ -89,10 +95,10 @@ module RPicSim::Mplab
89
95
  # Just put this line in your simulation class definition temporarily:
90
96
  # pp program_file.instance_variable_get(:@mplab_program_file).send(:symbol_dump).sort
91
97
  def symbol_dump
92
- symbols.map { |s| [s.m_Symbol, s.m_lType, s.address, memory_type(s)] }
98
+ raw_symbols.map { |s| [s.m_Symbol, s.m_lType, s.address, memory_type(s)] }
93
99
  end
94
100
 
95
- def symbols
101
+ def raw_symbols
96
102
  @program_file.getSymbolTable.getSymbols(0, 0)
97
103
  end
98
104
  end
@@ -1,13 +1,15 @@
1
1
  require_relative 'mplab'
2
2
  require_relative 'label'
3
3
  require_relative 'instruction'
4
+ require_relative 'symbol_set'
4
5
 
5
- # TODO: interface for adding labels and/or symbols from other sources because
6
- # sometimes the COF file is inadequate. When symbols have the same address,
7
- # think about how to choose the more interesting one in a stack trace (fewer underscores?)
6
+ # TODO: When symbols have the same address, think about how to choose the more
7
+ # interesting one in a stack trace (fewer underscores?)
8
8
 
9
9
  module RPicSim
10
10
  # Represents a PIC program file (e.g. COF or HEX).
11
+ # Keeps track of all the symbols loaded from that file and also allows you
12
+ # to add symbols in various ways.
11
13
  class ProgramFile
12
14
  attr_reader :filename
13
15
  attr_reader :device
@@ -27,39 +29,104 @@ module RPicSim
27
29
  @address_increment = @assembly.device_info.code_address_increment
28
30
 
29
31
  @instructions = []
32
+
33
+ @labels = {}
34
+
35
+ @symbol_set = SymbolSet.new
36
+ @symbol_set.def_memory_type :ram
37
+ @symbol_set.def_memory_type :program_memory
38
+ @symbol_set.def_memory_type :eeprom
39
+
40
+ @symbol_set.on_symbol_definition do |name, address, memory_type|
41
+ if memory_type == :program_memory
42
+ labels[name] = Label.new(name, address)
43
+ end
44
+ end
45
+
46
+ import_symbols @mplab_program_file
30
47
  end
31
48
 
32
- # Returns a hash associating RAM variable names (as symbols) to their addresses.
33
- # @return (Hash)
49
+ # Imports symbols from an additional symbol source.
50
+ #
51
+ # The +symbol_source+ parameter should be an object that responds to some
52
+ # subset of these methods: +#symbols+, +#symbols_in_ram+,
53
+ # +#symbols_in_program_memory+, +#symbols_in_eeprom+. The methods should
54
+ # take no arguments and return a hash where the keys are symbol names
55
+ # (represented as Ruby symbols) and the values are addresses (as
56
+ # integers).
57
+ def import_symbols(symbol_source)
58
+ if symbol_source.respond_to?(:symbols)
59
+ @symbol_set.def_symbols symbol_source.symbols
60
+ end
61
+
62
+ if symbol_source.respond_to?(:symbols_in_ram)
63
+ @symbol_set.def_symbols symbol_source.symbols_in_ram, :ram
64
+ end
65
+
66
+ if symbol_source.respond_to?(:symbols_in_program_memory)
67
+ @symbol_set.def_symbols symbol_source.symbols_in_program_memory, :program_memory
68
+ end
69
+
70
+ if symbol_source.respond_to?(:symbols_in_eeprom)
71
+ @symbol_set.def_symbols symbol_source.symbols_in_eeprom, :eeprom
72
+ end
73
+ end
74
+
75
+ # Defines a new symbol.
76
+ #
77
+ # @param name [Symbol] The name of the symbol.
78
+ # @param address [Integer] The address of the symbol.
79
+ # @param memory_type [Symbol] (optional) The type of memory the symbol
80
+ # belongs to. This should either by +:ram+, +:program_memory+, or
81
+ # +:eeprom+.
82
+ def def_symbol(name, address, memory_type = nil)
83
+ @symbol_set.def_symbol name, address, memory_type
84
+ end
85
+
86
+ # Returns all the symbols known to the simulation.
87
+ #
88
+ # The return value is a hash where the keys are the names of the symbols
89
+ # (represented as Ruby symbols) and the values are the addresses of the symbols.
90
+ #
91
+ # Warning: This is a persistent hash that will automatically be updated when
92
+ # new symbols are defined.
93
+ def symbols
94
+ @symbol_set.symbols
95
+ end
96
+
97
+ # Returns all the symbols in RAM.
98
+ # The return value is a hash where the keys are the names of the symbols
99
+ # (represented as Ruby symbols) and the values are the addresses of the symbols.
100
+ #
101
+ # Warning: This is a persistent hash that will automatically be updated when
102
+ # new symbols are defined.
34
103
  def symbols_in_ram
35
- @mplab_program_file.symbols_in_ram
104
+ @symbol_set.symbols_in_memory(:ram)
36
105
  end
37
106
 
38
- # Returns a hash associating program memory symbol names (as Ruby symbols)
39
- # to their addresses.
40
- # @return (Hash)
107
+ # Returns all the symbols in program memory.
108
+ # The return value is a hash where the keys are the names of the symbols
109
+ # (represented as Ruby symbols) and the values are the addresses of the symbols.
110
+ #
111
+ # Warning: This is a persistent hash that will automatically be updated when
112
+ # new symbols are defined.
41
113
  def symbols_in_program_memory
42
- @mplab_program_file.symbols_in_program_memory
114
+ @symbol_set.symbols_in_memory(:program_memory)
43
115
  end
44
116
 
45
- # Returns a hash associating EEPROM memory symbol names (as Ruby symbols)
46
- # to their addresses.
47
- # @return (Hash)
117
+ # Returns all the symbols in EEPROM.
118
+ # The return value is a hash where the keys are the names of the symbols
119
+ # (represented as Ruby symbols) and the values are the addresses of the symbols.
120
+ #
121
+ # Warning: This is a persistent hash that will automatically be updated when
122
+ # new symbols are defined.
48
123
  def symbols_in_eeprom
49
- @mplab_program_file.symbols_in_eeprom
124
+ @symbol_set.symbols_in_memory(:eeprom)
50
125
  end
51
126
 
52
127
  # Returns a hash associating program memory label names (as symbols) to their addresses.
53
128
  # @return (Hash)
54
- def labels
55
- @labels ||= begin
56
- hash = {}
57
- symbols_in_program_memory.each do |name, address|
58
- hash[name] = Label.new(name, address)
59
- end
60
- hash
61
- end
62
- end
129
+ attr_reader :labels
63
130
 
64
131
  # Returns a {Label} object if a program label by that name is found.
65
132
  # The name is specified in the code that defined the label. If you are using a C compiler,
@@ -41,7 +41,7 @@ RSpec.configure do |config|
41
41
  example # RSpec 2.x
42
42
  end
43
43
  if @sim && ex.exception
44
- RPicSim::RSpec::SimDiagnostics.store_diagnostics(example, @sim)
44
+ RPicSim::RSpec::SimDiagnostics.store_diagnostics(ex, @sim)
45
45
  end
46
46
  end
47
47
  end
@@ -29,7 +29,8 @@ module RPicSim
29
29
  end
30
30
 
31
31
  # Specifies the path to the firmware file. The file can be a HEX or COF file, but
32
- # COF is recommended so that you can access label addresses and other debugging information.
32
+ # COF is recommended so that you can access symbol/label addresses and other
33
+ # debugging information.
33
34
  # You must call {#use_device} before calling this.
34
35
  def use_file(filename)
35
36
  raise "The device needs to be specified before filename (e.g. 'use_device \"PIC10F322\"')" unless @device
@@ -37,6 +38,27 @@ module RPicSim
37
38
  load_program_file
38
39
  end
39
40
 
41
+ # Specifies additional symbols to use in the simulation. Symbols might be
42
+ # loaded from the program file when you call {#use_file}, but if those
43
+ # symbols are not sufficient then you can call this method to incorporate
44
+ # another source of symbols.
45
+ #
46
+ # See {RPicSim::ProgramFile#import_symbols} for details on what the parameter
47
+ # should be.
48
+ def import_symbols(symbol_source)
49
+ program_file.import_symbols(symbol_source)
50
+ end
51
+
52
+ # Define a symbol.
53
+ # Normally symbols are loaded by {#use_file} or {#import_symbols}, but you can
54
+ # this method allows for adding additional symbols one at a time.
55
+ #
56
+ # See {RPicSim::ProgramFile#def_symbol} for details about the parameters
57
+ # this method takes.
58
+ def def_symbol(name, address, memory_type = nil)
59
+ program_file.def_symbol name, address, memory_type
60
+ end
61
+
40
62
  # Define a pin alias.
41
63
  #
42
64
  # @param our_name [Symbol] Specifies what you would like to
@@ -98,12 +120,22 @@ module RPicSim
98
120
  # with {ClassDefinitionMethods#def_var def_var}.
99
121
  attr_reader :variable_set
100
122
 
101
- # A hash that associates label names as symbols to {Label} objects.
102
- attr_reader :labels
103
-
104
123
  # The {ProgramFile} object representing the firmware.
105
124
  attr_reader :program_file
106
125
 
126
+ # Returns a hash that associates label names as Ruby symbols to {Label} objects.
127
+ def labels
128
+ program_file.labels
129
+ end
130
+
131
+ # Returns a {Label} object if a program label by that name is found.
132
+ # The name is specified in the code that defined the label. If you are using a C compiler,
133
+ # you will probably need to prefix the name with an underscore.
134
+ # @return [Label]
135
+ def label(name)
136
+ program_file.label(name)
137
+ end
138
+
107
139
  private
108
140
 
109
141
  # This gets called when a new subclass of PicSim is created.
@@ -117,7 +149,6 @@ module RPicSim
117
149
 
118
150
  def load_program_file
119
151
  @program_file = ProgramFile.new(@filename, @device)
120
- @labels = program_file.labels
121
152
 
122
153
  @variable_set = VariableSet.new
123
154
  @variable_set.address_increment = program_file.address_increment
@@ -143,6 +174,7 @@ module RPicSim
143
174
  :every_step,
144
175
  :goto,
145
176
  :label,
177
+ :labels,
146
178
  :location_address,
147
179
  :new_ram_watcher,
148
180
  :pc,
@@ -158,6 +190,7 @@ module RPicSim
158
190
  :run_to_cycle_count,
159
191
  :reg,
160
192
  :stack_contents,
193
+ :stack_memory,
161
194
  :stack_push,
162
195
  :stack_trace,
163
196
  :step,
@@ -212,6 +245,11 @@ module RPicSim
212
245
  # @return [Memory]
213
246
  attr_reader :eeprom
214
247
 
248
+ # Returns a {Memory} object that allows direct reading and writing of the
249
+ # bytes in the simulated hardware call stack.
250
+ # @return [Memory]
251
+ attr_reader :stack_memory
252
+
215
253
  # Returns a string like "PIC10F322" specifying the PIC device number.
216
254
  # @return [String]
217
255
  def device
@@ -336,6 +374,11 @@ module RPicSim
336
374
  program_file.label(name)
337
375
  end
338
376
 
377
+ # Returns a hash that associates label names as Ruby symbols to {Label} objects.
378
+ def labels
379
+ program_file.labels
380
+ end
381
+
339
382
  # Returns the number of instruction cycles simulated in this simulation.
340
383
  # @return [Integer]
341
384
  def cycle_count
@@ -0,0 +1,51 @@
1
+ module RPicSim
2
+ # This class is used internally by {Sim} to manage the symbols from the
3
+ # simulated firmware's symbol table..
4
+ class SymbolSet
5
+ def initialize
6
+ @memory_types = []
7
+ @symbols = {}
8
+ @symbols_for_memory = {}
9
+ @callbacks = []
10
+ end
11
+
12
+ def def_memory_type(name)
13
+ name = name.to_sym
14
+ @memory_types << name
15
+ @symbols_for_memory[name] = {}
16
+ end
17
+
18
+ def def_symbol(name, address, memory_type = nil)
19
+ name = name.to_sym
20
+ address = address.to_i
21
+ if memory_type
22
+ hash = @symbols_for_memory[memory_type.to_sym]
23
+ raise "Invalid memory type: #{memory_type}." if !hash
24
+ hash[name] = address
25
+ end
26
+
27
+ @symbols[name] = address
28
+
29
+ @callbacks.each do |callback|
30
+ callback.call name, address, memory_type
31
+ end
32
+ end
33
+
34
+ def def_symbols(symbols, memory_type = nil)
35
+ symbols.each do |name, address|
36
+ def_symbol name, address, memory_type
37
+ end
38
+ end
39
+
40
+ attr_reader :symbols
41
+
42
+ def symbols_in_memory(memory_type)
43
+ @symbols_for_memory[memory_type.to_sym]
44
+ end
45
+
46
+ def on_symbol_definition(&proc)
47
+ raise 'Block required' if !proc
48
+ @callbacks << proc
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module RPicSim
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -0,0 +1,79 @@
1
+ require 'scanf'
2
+
3
+ module RPicSim
4
+ class Xc8SymFile
5
+ attr_reader :symbols
6
+ attr_reader :symbols_in_ram
7
+ attr_reader :symbols_in_eeprom
8
+ attr_reader :symbols_in_program_memory
9
+
10
+ attr_reader :symbol_raw_data
11
+
12
+ def initialize(filename, opts = {})
13
+ @symbols = {}
14
+ @symbols_in_ram = {}
15
+ @symbols_in_eeprom = {}
16
+ @symbols_in_program_memory = {}
17
+
18
+ @filename = filename
19
+ @sections_in_ram = %w{ABS BIGRAM COMRAM RAM SFR FARRAM
20
+ BANK0 BANK1 BANK2 BANK3 BANK4 BANK5 BANK6 BANK7}
21
+ @sections_in_code = %w{CODE CONST IDLOC MEDIUMCONST SMALLCONST}
22
+ @sections_in_eeprom = %w{EEDATA}
23
+
24
+ allowed_keys = [:custom_ram_sections,
25
+ :custom_code_sections,
26
+ :custom_eeprom_sections]
27
+ invalid_keys = opts.keys - allowed_keys
28
+ if !invalid_keys.empty?
29
+ raise "Invalid options: #{invalid_keys.inspect}"
30
+ end
31
+
32
+ if opts[:custom_ram_sections]
33
+ @sections_in_ram += opts[:custom_ram_sections]
34
+ end
35
+
36
+ if opts[:custom_code_sections]
37
+ @sections_in_code += opts[:custom_code_sections]
38
+ end
39
+
40
+ if opts[:custom_eeprom_sections]
41
+ @sections_in_eeprom += opts[:custom_eeprom_sections]
42
+ end
43
+
44
+ read_data
45
+ sort_data
46
+ end
47
+
48
+ private
49
+
50
+ def read_data
51
+ @symbol_raw_data = {}
52
+ File.foreach(@filename) do |line|
53
+ entry = line.scanf('%s %x %x %s %x')
54
+ break if entry[0].start_with? '%'
55
+ key = entry[0].to_sym
56
+ entry[0] = key
57
+ @symbol_raw_data[key] = entry
58
+ end
59
+ end
60
+
61
+ def sort_data
62
+ @symbol_raw_data.values.each do |name, address, _, section, _|
63
+ @symbols[name] = address
64
+
65
+ if @sections_in_ram.include?(section)
66
+ @symbols_in_ram[name] = address
67
+ end
68
+
69
+ if @sections_in_code.include?(section)
70
+ @symbols_in_program_memory[name] = address
71
+ end
72
+
73
+ if @sections_in_eeprom.include?(section)
74
+ @symbols_in_eeprom[name] = address
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpicsim
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pololu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-20 00:00:00.000000000 Z
11
+ date: 2014-07-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -16,11 +16,52 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
- - .yardopts
20
- - Gemfile
19
+ - lib/rpicsim.rb
20
+ - lib/rpicsim/call_stack_info.rb
21
+ - lib/rpicsim/composite_memory.rb
22
+ - lib/rpicsim/flaws.rb
23
+ - lib/rpicsim/instruction.rb
24
+ - lib/rpicsim/label.rb
25
+ - lib/rpicsim/memory.rb
26
+ - lib/rpicsim/memory_watcher.rb
27
+ - lib/rpicsim/mplab.rb
28
+ - lib/rpicsim/pin.rb
29
+ - lib/rpicsim/program_counter.rb
30
+ - lib/rpicsim/program_file.rb
31
+ - lib/rpicsim/rspec.rb
32
+ - lib/rpicsim/search.rb
33
+ - lib/rpicsim/sim.rb
34
+ - lib/rpicsim/stack_pointer.rb
35
+ - lib/rpicsim/stack_trace.rb
36
+ - lib/rpicsim/symbol_set.rb
37
+ - lib/rpicsim/variable.rb
38
+ - lib/rpicsim/variable_set.rb
39
+ - lib/rpicsim/version.rb
40
+ - lib/rpicsim/xc8_sym_file.rb
41
+ - lib/rpicsim/mplab/mplab_assembly.rb
42
+ - lib/rpicsim/mplab/mplab_device_info.rb
43
+ - lib/rpicsim/mplab/mplab_disassembler.rb
44
+ - lib/rpicsim/mplab/mplab_instruction.rb
45
+ - lib/rpicsim/mplab/mplab_loader.rb
46
+ - lib/rpicsim/mplab/mplab_memory.rb
47
+ - lib/rpicsim/mplab/mplab_nmmr_info.rb
48
+ - lib/rpicsim/mplab/mplab_observer.rb
49
+ - lib/rpicsim/mplab/mplab_pin.rb
50
+ - lib/rpicsim/mplab/mplab_processor.rb
51
+ - lib/rpicsim/mplab/mplab_program_file.rb
52
+ - lib/rpicsim/mplab/mplab_register.rb
53
+ - lib/rpicsim/mplab/mplab_sfr_info.rb
54
+ - lib/rpicsim/mplab/mplab_simulator.rb
55
+ - lib/rpicsim/rspec/be_predicate.rb
56
+ - lib/rpicsim/rspec/helpers.rb
57
+ - lib/rpicsim/rspec/persistent_expectations.rb
58
+ - lib/rpicsim/rspec/sim_diagnostics.rb
59
+ - lib/rpicsim/storage/memory_integer.rb
60
+ - lib/rpicsim/storage/register.rb
21
61
  - Introduction.md
22
62
  - LICENSE.txt
23
63
  - README.md
64
+ - Gemfile
24
65
  - docs/ChangeLog.md
25
66
  - docs/Contributing.md
26
67
  - docs/Debugging.md
@@ -39,8 +80,8 @@ files:
39
80
  - docs/Pins.md
40
81
  - docs/PreventingCallStackOverflow.md
41
82
  - docs/QuickStartGuide.md
42
- - docs/RSpecIntegration.md
43
83
  - docs/RamWatcher.md
84
+ - docs/RSpecIntegration.md
44
85
  - docs/Running.md
45
86
  - docs/Stubbing.md
46
87
  - docs/SupportedCompilers.md
@@ -49,46 +90,7 @@ files:
49
90
  - docs/SupportedOperatingSystems.md
50
91
  - docs/UnitTesting.md
51
92
  - docs/Variables.md
52
- - lib/rpicsim.rb
53
- - lib/rpicsim/call_stack_info.rb
54
- - lib/rpicsim/composite_memory.rb
55
- - lib/rpicsim/flaws.rb
56
- - lib/rpicsim/instruction.rb
57
- - lib/rpicsim/label.rb
58
- - lib/rpicsim/memory.rb
59
- - lib/rpicsim/memory_watcher.rb
60
- - lib/rpicsim/mplab.rb
61
- - lib/rpicsim/mplab/mplab_assembly.rb
62
- - lib/rpicsim/mplab/mplab_device_info.rb
63
- - lib/rpicsim/mplab/mplab_disassembler.rb
64
- - lib/rpicsim/mplab/mplab_instruction.rb
65
- - lib/rpicsim/mplab/mplab_loader.rb
66
- - lib/rpicsim/mplab/mplab_memory.rb
67
- - lib/rpicsim/mplab/mplab_nmmr_info.rb
68
- - lib/rpicsim/mplab/mplab_observer.rb
69
- - lib/rpicsim/mplab/mplab_pin.rb
70
- - lib/rpicsim/mplab/mplab_processor.rb
71
- - lib/rpicsim/mplab/mplab_program_file.rb
72
- - lib/rpicsim/mplab/mplab_register.rb
73
- - lib/rpicsim/mplab/mplab_sfr_info.rb
74
- - lib/rpicsim/mplab/mplab_simulator.rb
75
- - lib/rpicsim/pin.rb
76
- - lib/rpicsim/program_counter.rb
77
- - lib/rpicsim/program_file.rb
78
- - lib/rpicsim/rspec.rb
79
- - lib/rpicsim/rspec/be_predicate.rb
80
- - lib/rpicsim/rspec/helpers.rb
81
- - lib/rpicsim/rspec/persistent_expectations.rb
82
- - lib/rpicsim/rspec/sim_diagnostics.rb
83
- - lib/rpicsim/search.rb
84
- - lib/rpicsim/sim.rb
85
- - lib/rpicsim/stack_pointer.rb
86
- - lib/rpicsim/stack_trace.rb
87
- - lib/rpicsim/storage/memory_integer.rb
88
- - lib/rpicsim/storage/register.rb
89
- - lib/rpicsim/variable.rb
90
- - lib/rpicsim/variable_set.rb
91
- - lib/rpicsim/version.rb
93
+ - .yardopts
92
94
  homepage: https://github.com/pololu/rpicsim
93
95
  licenses:
94
96
  - MIT
@@ -111,7 +113,7 @@ requirements:
111
113
  - JRuby
112
114
  - MPLAB X
113
115
  rubyforge_project:
114
- rubygems_version: 2.3.0
116
+ rubygems_version: 2.1.9
115
117
  signing_key:
116
118
  specification_version: 4
117
119
  summary: RPicSim provides an interface to the MPLAB X PIC simulator that allows you to write simulator-based automated tests of PIC firmware with Ruby and RSpec.