Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
B
Baitboat
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
OpenSource
Baitboat
Commits
d75d97dc
Commit
d75d97dc
authored
12 years ago
by
Andrew Tridgell
Browse files
Options
Downloads
Patches
Plain Diff
AnalogSource: switch to SREG = oldSREG pattern for interrupt mask/restore
parent
0c8cef57
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp
+6
-3
6 additions, 3 deletions
libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp
with
6 additions
and
3 deletions
libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp
+
6
−
3
View file @
d75d97dc
...
@@ -99,9 +99,10 @@ void AP_AnalogSource_Arduino::init_timer(AP_PeriodicProcess * scheduler)
...
@@ -99,9 +99,10 @@ void AP_AnalogSource_Arduino::init_timer(AP_PeriodicProcess * scheduler)
uint16_t
AP_AnalogSource_Arduino
::
read_raw
(
void
)
uint16_t
AP_AnalogSource_Arduino
::
read_raw
(
void
)
{
{
uint16_t
ret
;
uint16_t
ret
;
uint8_t
oldSREG
=
SREG
;
cli
();
cli
();
ret
=
pins
[
_pin_index
].
output
;
ret
=
pins
[
_pin_index
].
output
;
sei
()
;
SREG
=
oldSREG
;
return
ret
;
return
ret
;
}
}
...
@@ -128,12 +129,13 @@ float AP_AnalogSource_Arduino::read_average(void)
...
@@ -128,12 +129,13 @@ float AP_AnalogSource_Arduino::read_average(void)
// you call read_average() very frequently
// you call read_average() very frequently
while
(
pins
[
_pin_index
].
sum_count
==
0
)
;
while
(
pins
[
_pin_index
].
sum_count
==
0
)
;
uint8_t
oldSREG
=
SREG
;
cli
();
cli
();
sum
=
pins
[
_pin_index
].
sum
;
sum
=
pins
[
_pin_index
].
sum
;
sum_count
=
pins
[
_pin_index
].
sum_count
;
sum_count
=
pins
[
_pin_index
].
sum_count
;
pins
[
_pin_index
].
sum
=
0
;
pins
[
_pin_index
].
sum
=
0
;
pins
[
_pin_index
].
sum_count
=
0
;
pins
[
_pin_index
].
sum_count
=
0
;
sei
()
;
SREG
=
oldSREG
;
return
sum
/
(
float
)
sum_count
;
return
sum
/
(
float
)
sum_count
;
}
}
...
@@ -191,10 +193,11 @@ void AP_AnalogSource_Arduino::set_pin(uint8_t pin)
...
@@ -191,10 +193,11 @@ void AP_AnalogSource_Arduino::set_pin(uint8_t pin)
{
{
pin
=
_remap_pin
(
pin
);
pin
=
_remap_pin
(
pin
);
if
(
pins
[
_pin_index
].
pin
!=
pin
)
{
if
(
pins
[
_pin_index
].
pin
!=
pin
)
{
uint8_t
oldSREG
=
SREG
;
cli
();
cli
();
pins
[
_pin_index
].
pin
=
pin
;
pins
[
_pin_index
].
pin
=
pin
;
pins
[
_pin_index
].
sum
=
0
;
pins
[
_pin_index
].
sum
=
0
;
pins
[
_pin_index
].
sum_count
=
0
;
pins
[
_pin_index
].
sum_count
=
0
;
sei
();
SREG
=
oldSREG
;
}
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment