rpicsim 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/docs/ChangeLog.md +6 -0
- data/docs/KnownIssues.md +44 -3
- data/docs/RSpecIntegration.md +4 -1
- data/lib/rpicsim/flaws.rb +29 -4
- data/lib/rpicsim/mplab/mplab_loader.rb +9 -3
- data/lib/rpicsim/mplab/mplab_program_file.rb +1 -1
- data/lib/rpicsim/version.rb +1 -1
- metadata +46 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffc22a3d36cfe7fe55d2bd971e0e01410e639dcc
|
4
|
+
data.tar.gz: a8589f0756b0cb3fd7fbd9af22727945318414e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d5209c814cf043635c779466ba9687246228644a368f6d7bea5d53d4a5944b8f7dbe04f83ee548db9c77b3ec3d1151323350146bf6639105bd6c992a7656195
|
7
|
+
data.tar.gz: c106a56ba5c1ac8932b0563d91f9d38eb03bc3fcfc29349ab90fadc02ffdfd0c837a9ab0e27c59c57a95ef22b01996a598feb6abdc3b0d9eefc5158426db2388
|
data/docs/ChangeLog.md
CHANGED
data/docs/KnownIssues.md
CHANGED
@@ -57,6 +57,29 @@ _MPLAB X versions affected: all tested versions_
|
|
57
57
|
This issue is tested in `spec/mplab/program_file_spec.rb`.
|
58
58
|
|
59
59
|
|
60
|
+
MPLAB X writes log files to the current directory
|
61
|
+
----
|
62
|
+
_Type: MPLAB X issue_
|
63
|
+
|
64
|
+
_MPLAB X versions affected: 2.20 and later_
|
65
|
+
|
66
|
+
Starting with MPLAB X v2.20, the MPLAB X code writes log files to the current working directory.
|
67
|
+
These files have names that start with "MPLABXLog.xml".
|
68
|
+
Unfortunately, these files cannot be deleted from the same Ruby process that runs RPicSim, because MPLAB X keeps handles open to the files and we have not found a way to close those handles.
|
69
|
+
|
70
|
+
If you are using Rake to run your specs, you can enhance the spec task so that it removes the files after running the specs:
|
71
|
+
|
72
|
+
# After running specs, clean up the log files that MPLAB X makes.
|
73
|
+
Rake::Task['spec'].enhance do
|
74
|
+
FileUtils.rm Dir.glob 'MPLABXLog.xml*'
|
75
|
+
end
|
76
|
+
|
77
|
+
These files are created as soon as the com.microchip.mplab.logger.Logger class is loaded by the JVM.
|
78
|
+
It might be possible to replace the implementation of that class in order to avoid creating the files.
|
79
|
+
|
80
|
+
This issue is tested in `spec/mplab/log_file_spec.rb`.
|
81
|
+
|
82
|
+
|
60
83
|
Cannot detect PIC model from COF file
|
61
84
|
----
|
62
85
|
_Type: RPicSim missing feature_
|
@@ -179,17 +202,18 @@ Midrange ADC gives incorrect readings
|
|
179
202
|
----
|
180
203
|
_Type: MPLAB X bug_
|
181
204
|
|
182
|
-
_MPLAB X versions affected:
|
205
|
+
_MPLAB X versions affected: 1.85, 1.90, 1.95, 2.00, 2.05, 2.10, 2.15, 2.20_
|
183
206
|
|
184
207
|
The simulated ADC for midrange PIC microcontrollers has various issues in different versions of MPLAB X that make it give incorrect readings.
|
185
208
|
These issues might affect other PIC architectures as well.
|
186
209
|
|
187
|
-
* **Bad modulus:** In MPLAB X 1.90
|
210
|
+
* **Bad modulus:** In MPLAB X 1.90 through 2.20, simply setting a pin to high with `pin.set(true)` will result in an ADC reading of 0.
|
188
211
|
The workaround is to use `pin.set(4.9)`.
|
189
212
|
The ADC acts like it is using a modulus operator incorrectly as a way of limiting the ADC result to be between 0 and 255.
|
190
213
|
* **No intermediate values:** In MPLAB X 1.85, setting a pin to any voltage other than 0 V will result in an ADC reading of 255.
|
191
214
|
|
192
215
|
These issues are tested in `spec/integration/adc_midrange_spec.rb`. The bad modulus issue was {http://www.microchip.com/forums/m760886.aspx reported to Microchip} in November 2013.
|
216
|
+
The midrange ADC seems to work correctly in MPLAB X 3.05.
|
193
217
|
|
194
218
|
|
195
219
|
Variables from XC8 are not correctly identified
|
@@ -208,4 +232,21 @@ _MPLAB X versions affected: all tested verions_
|
|
208
232
|
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
233
|
For example, you cannot use `program_memory.read_byte(0x7FFF)` on a PIC18F25K50 simulation.
|
210
234
|
One workaround is to use `read_word` instead.
|
211
|
-
This seems to only affect PIC18 devices.
|
235
|
+
This seems to only affect PIC18 devices.
|
236
|
+
|
237
|
+
Older versions of MPLAB X do not work with later Java SE Runtime Environments
|
238
|
+
----
|
239
|
+
|
240
|
+
MPLAB X is based on NetBeans, so older versions of it suffer from [Netbeans bug 229191](https://netbeans.org/bugzilla/show_bug.cgi?id=229191) and will not run properly on the Java SE Runtime Environment 8 or later. If you try to use an older version of MPLAB X with a newer version of Java, you might get this error:
|
241
|
+
|
242
|
+
java.lang.IllegalStateException: java.lang.IllegalAccessException:
|
243
|
+
Class org.openide.util.WeakListenerImpl$ProxyListener can not access
|
244
|
+
a member of class org.openide.filesystems.$Proxy20 with modifiers "public"
|
245
|
+
at org.openide.util.WeakListenerImpl$ProxyListener.<init>(WeakListenerImpl.java:423)
|
246
|
+
...
|
247
|
+
|
248
|
+
A solution is to download and install the "Java SE Runtime Environment 7u80" from [Oracle](http://www.oracle.com/).
|
249
|
+
JRuby uses the JAVA_HOME environment variable to figure out which version of Java to use, so you would set the JAVA_HOME environment variable to point to version 7 for the purposes of running your tests.
|
250
|
+
If you are using a shell like Bash, a command like the one below can be used to temporarily set the environment variable for the duration of one command instead of changing it globally for your whole system:
|
251
|
+
|
252
|
+
JAVA_HOME="C:\Program Files\Java\jre7" rspec
|
data/docs/RSpecIntegration.md
CHANGED
@@ -8,7 +8,7 @@ Most of the example code in this manual assumes that you have the RSpec integrat
|
|
8
8
|
Turning on RSpec integration
|
9
9
|
----
|
10
10
|
|
11
|
-
To enable
|
11
|
+
To load RPicSim and enable its RSpec integration, simply put this line in your `spec_helper.rb`:
|
12
12
|
|
13
13
|
!!!ruby
|
14
14
|
require 'rpicsim/rspec'
|
@@ -38,6 +38,9 @@ Alternatively, if you just want a subset of the features described here, you can
|
|
38
38
|
# Better error messages for RSpec 2.x
|
39
39
|
require 'rpicsim/rspec/be_predicate'
|
40
40
|
|
41
|
+
You will also need to load RPicSim itself by writing:
|
42
|
+
|
43
|
+
require 'rpicsim'
|
41
44
|
|
42
45
|
Helper methods
|
43
46
|
----
|
data/lib/rpicsim/flaws.rb
CHANGED
@@ -49,9 +49,14 @@ module RPicSim
|
|
49
49
|
|
50
50
|
@flaw_hash = {}
|
51
51
|
|
52
|
-
# Returns the
|
53
|
-
#
|
54
|
-
#
|
52
|
+
# Returns the effect of the flaw with the specified name for the currently
|
53
|
+
# loaded version of MPLAB X.
|
54
|
+
#
|
55
|
+
# The names and effects are listed in +flaws.rb+.
|
56
|
+
#
|
57
|
+
# The returned value will usually be a boolean, but sometimes a Symbol.
|
58
|
+
#
|
59
|
+
# @param name [Symbol] The name of the flaw.
|
55
60
|
def self.[](name)
|
56
61
|
@flaw_hash[name].effect Mplab.version
|
57
62
|
end
|
@@ -62,6 +67,18 @@ module RPicSim
|
|
62
67
|
yield flaw
|
63
68
|
end
|
64
69
|
|
70
|
+
add(:creates_log_files) do |flaw|
|
71
|
+
flaw.affects_version '1.85', false
|
72
|
+
flaw.affects_version '1.90', false
|
73
|
+
flaw.affects_version '1.95', false
|
74
|
+
flaw.affects_version '2.00', false
|
75
|
+
flaw.affects_version '2.05', false
|
76
|
+
flaw.affects_version '2.10', false
|
77
|
+
flaw.affects_version '2.15', false
|
78
|
+
flaw.affects_version '2.20', true
|
79
|
+
flaw.probably_affects_other_versions true
|
80
|
+
end
|
81
|
+
|
65
82
|
add(:writing_tris_affects_output) do |flaw|
|
66
83
|
flaw.affects_version '1.85', true
|
67
84
|
flaw.affects_version '1.90', true
|
@@ -86,7 +103,15 @@ module RPicSim
|
|
86
103
|
|
87
104
|
add(:adc_midrange) do |flaw|
|
88
105
|
flaw.affects_version '1.85', :no_middle_values
|
89
|
-
flaw.
|
106
|
+
flaw.affects_version '1.90', :bad_modulus
|
107
|
+
flaw.affects_version '1.95', :bad_modulus
|
108
|
+
flaw.affects_version '2.00', :bad_modulus
|
109
|
+
flaw.affects_version '2.05', :bad_modulus
|
110
|
+
flaw.affects_version '2.10', :bad_modulus
|
111
|
+
flaw.affects_version '2.15', :bad_modulus
|
112
|
+
flaw.affects_version '2.20', :bad_modulus
|
113
|
+
flaw.affects_version '3.05', false
|
114
|
+
flaw.probably_affects_other_versions false
|
90
115
|
end
|
91
116
|
|
92
117
|
add(:instruction_inc_is_in_byte_units) do |flaw|
|
@@ -19,7 +19,6 @@ module RPicSim::Mplab
|
|
19
19
|
mplablibs/modules/*.jar
|
20
20
|
mplablibs/modules/ext/*.jar
|
21
21
|
platform/lib/org-openide-util*.jar
|
22
|
-
platform/lib/org-openide-util.jar
|
23
22
|
mdbcore/modules/ext/org-openide-filesystems.jar
|
24
23
|
}.each do |pattern|
|
25
24
|
Dir.glob(jar_dir + pattern).each do |jar_file|
|
@@ -31,8 +30,10 @@ module RPicSim::Mplab
|
|
31
30
|
# In case MPLAB X was uninstalled and its directory remains, this can provide
|
32
31
|
# a useful error message to the user.
|
33
32
|
begin
|
33
|
+
org.openide.filesystems.FileObject
|
34
34
|
org.openide.util.Lookup
|
35
35
|
com.microchip.mplab.mdbcore.simulator.Simulator
|
36
|
+
com.microchip.mplab.mdbcore.platformtool.PlatformToolMetaManager
|
36
37
|
rescue NameError
|
37
38
|
$stderr.puts "Failed to load MPLAB X classes.\n" +
|
38
39
|
"MPLAB X dir: #{dir}\nMPLAB X jar dir: #{jar_dir}\nClass path:\n" + $CLASSPATH.to_a.join("\n") + "\n\n"
|
@@ -77,7 +78,6 @@ module RPicSim::Mplab
|
|
77
78
|
end
|
78
79
|
|
79
80
|
def auto_detect_mplab_dir
|
80
|
-
# Default installation directories for MPLAB X:
|
81
81
|
candidates = [
|
82
82
|
'C:/Program Files (x86)/Microchip/MPLABX/', # 64-bit Windows
|
83
83
|
'C:/Program Files/Microchip/MPLABX/', # 32-bit Windows
|
@@ -86,7 +86,13 @@ module RPicSim::Mplab
|
|
86
86
|
]
|
87
87
|
dir = candidates.find { |d| File.directory?(d) }
|
88
88
|
raise cannot_find_mplab_error if !dir
|
89
|
-
|
89
|
+
|
90
|
+
# Some time between 2.20 and 3.05, MPLABX started installing itself into
|
91
|
+
# a subdirectory named after the version, for example "v3.05". Here we
|
92
|
+
# check for the existence of such subdirectories and use the highest
|
93
|
+
# version of MPLAB X that is available. If it is not available, we'll
|
94
|
+
# use dir anyway because it might contain an older version of MPLAB X.
|
95
|
+
Dir.glob(dir + 'v?.??').sort.last or dir
|
90
96
|
end
|
91
97
|
|
92
98
|
def cannot_find_mplab_error
|
@@ -6,7 +6,7 @@ module RPicSim::Mplab
|
|
6
6
|
def initialize(filename, device)
|
7
7
|
raise "File does not exist: #{filename}" if !File.exist?(filename) # Avoid a Java exception.
|
8
8
|
|
9
|
-
if !File.realdirpath(filename).split(
|
9
|
+
if !File.realdirpath(filename).split(%r{/|\\}).include?('dist')
|
10
10
|
raise 'The file must be inside a directory named dist or else the MCLoader ' \
|
11
11
|
'class will throw an exception saying that it cannot find the COF file.'
|
12
12
|
end
|
data/lib/rpicsim/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pololu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -16,48 +16,11 @@ executables: []
|
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
-
-
|
20
|
-
-
|
21
|
-
- lib/rpicsim/flaws.rb
|
22
|
-
- lib/rpicsim/label.rb
|
23
|
-
- lib/rpicsim/memory.rb
|
24
|
-
- lib/rpicsim/memory_watcher.rb
|
25
|
-
- lib/rpicsim/mplab.rb
|
26
|
-
- lib/rpicsim/pin.rb
|
27
|
-
- lib/rpicsim/program_counter.rb
|
28
|
-
- lib/rpicsim/program_file.rb
|
29
|
-
- lib/rpicsim/rspec.rb
|
30
|
-
- lib/rpicsim/sim.rb
|
31
|
-
- lib/rpicsim/stack_pointer.rb
|
32
|
-
- lib/rpicsim/stack_trace.rb
|
33
|
-
- lib/rpicsim/symbol_set.rb
|
34
|
-
- lib/rpicsim/variable.rb
|
35
|
-
- lib/rpicsim/variable_set.rb
|
36
|
-
- lib/rpicsim/version.rb
|
37
|
-
- lib/rpicsim/xc8_sym_file.rb
|
38
|
-
- lib/rpicsim/mplab/mplab_assembly.rb
|
39
|
-
- lib/rpicsim/mplab/mplab_device_info.rb
|
40
|
-
- lib/rpicsim/mplab/mplab_instruction.rb
|
41
|
-
- lib/rpicsim/mplab/mplab_loader.rb
|
42
|
-
- lib/rpicsim/mplab/mplab_memory.rb
|
43
|
-
- lib/rpicsim/mplab/mplab_nmmr_info.rb
|
44
|
-
- lib/rpicsim/mplab/mplab_observer.rb
|
45
|
-
- lib/rpicsim/mplab/mplab_pin.rb
|
46
|
-
- lib/rpicsim/mplab/mplab_processor.rb
|
47
|
-
- lib/rpicsim/mplab/mplab_program_file.rb
|
48
|
-
- lib/rpicsim/mplab/mplab_register.rb
|
49
|
-
- lib/rpicsim/mplab/mplab_sfr_info.rb
|
50
|
-
- lib/rpicsim/mplab/mplab_simulator.rb
|
51
|
-
- lib/rpicsim/rspec/be_predicate.rb
|
52
|
-
- lib/rpicsim/rspec/helpers.rb
|
53
|
-
- lib/rpicsim/rspec/persistent_expectations.rb
|
54
|
-
- lib/rpicsim/rspec/sim_diagnostics.rb
|
55
|
-
- lib/rpicsim/storage/memory_integer.rb
|
56
|
-
- lib/rpicsim/storage/register.rb
|
19
|
+
- ".yardopts"
|
20
|
+
- Gemfile
|
57
21
|
- Introduction.md
|
58
22
|
- LICENSE.txt
|
59
23
|
- README.md
|
60
|
-
- Gemfile
|
61
24
|
- docs/ChangeLog.md
|
62
25
|
- docs/Contributing.md
|
63
26
|
- docs/Debugging.md
|
@@ -75,8 +38,8 @@ files:
|
|
75
38
|
- docs/PersistentExpectations.md
|
76
39
|
- docs/Pins.md
|
77
40
|
- docs/QuickStartGuide.md
|
78
|
-
- docs/RamWatcher.md
|
79
41
|
- docs/RSpecIntegration.md
|
42
|
+
- docs/RamWatcher.md
|
80
43
|
- docs/Running.md
|
81
44
|
- docs/Stubbing.md
|
82
45
|
- docs/SupportedCompilers.md
|
@@ -85,7 +48,44 @@ files:
|
|
85
48
|
- docs/SupportedOperatingSystems.md
|
86
49
|
- docs/UnitTesting.md
|
87
50
|
- docs/Variables.md
|
88
|
-
- .
|
51
|
+
- lib/rpicsim.rb
|
52
|
+
- lib/rpicsim/composite_memory.rb
|
53
|
+
- lib/rpicsim/flaws.rb
|
54
|
+
- lib/rpicsim/label.rb
|
55
|
+
- lib/rpicsim/memory.rb
|
56
|
+
- lib/rpicsim/memory_watcher.rb
|
57
|
+
- lib/rpicsim/mplab.rb
|
58
|
+
- lib/rpicsim/mplab/mplab_assembly.rb
|
59
|
+
- lib/rpicsim/mplab/mplab_device_info.rb
|
60
|
+
- lib/rpicsim/mplab/mplab_instruction.rb
|
61
|
+
- lib/rpicsim/mplab/mplab_loader.rb
|
62
|
+
- lib/rpicsim/mplab/mplab_memory.rb
|
63
|
+
- lib/rpicsim/mplab/mplab_nmmr_info.rb
|
64
|
+
- lib/rpicsim/mplab/mplab_observer.rb
|
65
|
+
- lib/rpicsim/mplab/mplab_pin.rb
|
66
|
+
- lib/rpicsim/mplab/mplab_processor.rb
|
67
|
+
- lib/rpicsim/mplab/mplab_program_file.rb
|
68
|
+
- lib/rpicsim/mplab/mplab_register.rb
|
69
|
+
- lib/rpicsim/mplab/mplab_sfr_info.rb
|
70
|
+
- lib/rpicsim/mplab/mplab_simulator.rb
|
71
|
+
- lib/rpicsim/pin.rb
|
72
|
+
- lib/rpicsim/program_counter.rb
|
73
|
+
- lib/rpicsim/program_file.rb
|
74
|
+
- lib/rpicsim/rspec.rb
|
75
|
+
- lib/rpicsim/rspec/be_predicate.rb
|
76
|
+
- lib/rpicsim/rspec/helpers.rb
|
77
|
+
- lib/rpicsim/rspec/persistent_expectations.rb
|
78
|
+
- lib/rpicsim/rspec/sim_diagnostics.rb
|
79
|
+
- lib/rpicsim/sim.rb
|
80
|
+
- lib/rpicsim/stack_pointer.rb
|
81
|
+
- lib/rpicsim/stack_trace.rb
|
82
|
+
- lib/rpicsim/storage/memory_integer.rb
|
83
|
+
- lib/rpicsim/storage/register.rb
|
84
|
+
- lib/rpicsim/symbol_set.rb
|
85
|
+
- lib/rpicsim/variable.rb
|
86
|
+
- lib/rpicsim/variable_set.rb
|
87
|
+
- lib/rpicsim/version.rb
|
88
|
+
- lib/rpicsim/xc8_sym_file.rb
|
89
89
|
homepage: https://github.com/pololu/rpicsim
|
90
90
|
licenses:
|
91
91
|
- MIT
|
@@ -96,19 +96,19 @@ require_paths:
|
|
96
96
|
- lib
|
97
97
|
required_ruby_version: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ">="
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '2'
|
107
107
|
requirements:
|
108
108
|
- JRuby
|
109
109
|
- MPLAB X
|
110
110
|
rubyforge_project:
|
111
|
-
rubygems_version: 2.
|
111
|
+
rubygems_version: 2.4.8
|
112
112
|
signing_key:
|
113
113
|
specification_version: 4
|
114
114
|
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.
|