►
Description
Anshul Makkar presents his work on FreeRTOS dynamic Task Upload Iteration 1 Close Out
A
Well,
maybe
not!
Oh
there
we
go
okay,
all
right,
so
I'll.
Just
give
a
little
quick
introduction
about
what
this
is
all
about,
and
then
my
colleague
angel
will
be
able
to
sort
of
give
us
a
little
demo.
Take
us
through
the
open
source
this
this,
this
development
that
he's
been
working
on
for
probably
around
six
months,
part-time
in
his
in
his
in
his
spare
hours.
A
So
we
really
appreciate
what
angel's
done
and
this
kind
of
marks
the
end
of
the
first
iteration
of
the
work,
so
a
kind
of
rev
one.
If
you
like
we,
the
idea
was
to
get
to
a
kind
of
demo-able
point
and
it's
great
to
have
a
team
from
you
know
the
free
rtos
team
joining
us
as
well.
So
you
can.
A
You
know
we
very
much
invite
your
input
there
into
what
we're
doing
so
I'll
be
talking
about
what
the
problem
is
that
needed
solving
and
then
anshul's
gonna
take
us
through
the
requirements,
analysis,
design,
demo
and
then
we're
gonna
just
have
a
little
bit
of
time
to
be
able
to
discuss
the
route
to
opening
up
the
repository
to
the
the
wider
community
and
there'll.
Be
an
opportunity
for
any
questions.
A
I
think
we're
all
right
taking
questions
as
we
go
along
right,
angel,
yep,
great,
okay,
all
right
so,
first
up,
introduction
anshul
as
I
as
I've
alluded
to,
has
been
working
on
this
angel.
Do
you
want
to
say
a
little
word
about
yourself.
B
Yeah
I've
been
associated
with
this
project
since
soon
as
paul
mentioned
working
on
this
dynamic
scheduler.
Apart
from
that
I'm
employed
with
oracle.
I
have
around
15
years
of
experience
in
linux,
kernel
and
hypervisor
stuff,
and
my
in
my
other
space
project,
I
am
investigation
investigating
on
debris
mitigation.
That's
the
new
rules
that
fcc
has
framed
around
that
so
my
research
spans
about
propulsion
system
and
how
for
geo
orbit
and
how
we
can
abide
by
debris
mitigation
and
also
doing
some
fpga
development
work,
implementing
ldpc
encoder.
A
As
I
said,
I'm
a
software
engineer
with
around
20
something
years
experience
writing,
embedded
software
mostly
for
space
applications,
but
but
also
for
safety,
critical
applications
as
well
for
aircraft
and
various
different
domains,
and
I'm
kind
of
here
kind
of
organizing
the
the
open
source
satellite
software
club
collaborations
that
we're
undergoing
so
many
people
on
the
call
here
are
actively
sort
of
working
on
some
of
these
software
collaborations,
including
anshul,
and
this
particular
work
started,
as
I
said
about
july
2020,
and
it's
all
part
of
the
open
source
satellite,
which
I
mentioned
quite
a
few
times,
but
essentially
that
is
kind
of
what
it
sounds
like
it
is
it's
a
it's
a
project
that
aims
to
develop
a
next-generation
micro
satellite
platform
and
to
be
able
to
issue
those
design,
the
design
of
that
open
source,
including
electronics,
hardware,
mechanical
software,
everything
so
yeah.
A
That's
that's
what
that's
what
we're
doing,
and
so
this
particular
development
was
all
about
the
needs
that
we
had
to
be
able
to
modify
the
code
that
that
we
have
in
orbit.
So
we've
been
doing
some
requirements
analysis
and
we
identified
sort
of
three
distinct
ways
in
which
we
might
want
to
do
that.
A
Software
patching,
which
is
just
taking
a
very
you,
know,
patching
a
very,
very
small
update
into
the
code
task
replacement
which
is
is
this
is
the
subject
of
this
development,
which
is
where
we're
sort
of
taking
a
freertos
task
and
we're
replacing
it
as
it's
as
the
rest
of
the
software
is
running
and
then
there's
kind
of
full
image
replacement,
which
is
where
we're
uploading
the
entire
image
of
the
software
as
a
big
blob.
A
Now
the
problem
that
we
have
with
that
method
normally
is
that
the
bandwidth
for
the
upload
to
a
spacecraft
is
quite
slow
and
and
the
opportunities
to
have
the
spacecraft
overhead
are
quite
limited.
So
the
amount
of
time
that
you
have
in
order
to
actually
you
know,
update
software
in
orbit
is,
is
quite
limited
and
it
can
take
a
long
time
to
actually
upload.
A
You
know
a
full
image
of
the
software
now
free
rtos
is
quite
small,
but
you
know
in
terms
of
footprint,
but
you
know
regardless
there's
there's
the
need
for
us
to
be
able
to
do
something
a
little
bit
more
swiftly
so
that
we
minimize
the
amount
of
downtime
that
results
from
uploading
and
changing
software.
A
Okay,
so
we
yeah.
So,
as
I
said
we
identified,
we
love,
we
really
love
freertos,
it's
great.
It's
a
really
good
realtime
operating
system,
and
I've
worked
with
a
few
really
really
like
this
one,
because
it's
so
so
small,
and
so
you
know
it
does
what
it
says
on
the
tin
really
and
the
only
the
only
issue
we
had
with
it
is
really
that
it
doesn't
support
this
kind
of
dynamic
upload
of
code
to
upload
a
task
real
time
as
the
as
the
code
is
running.
A
But
there
are,
you
know,
there's
certainly
parts
of
it
that
do
support
it,
because
the
the
api
x
tasks
create
it
can
be
called
any
point
whether
it's
before
or
after
the
scheduler
has
been
started.
So
there
is
an
opportunity
to
do
it,
certainly,
but
there
is
no
sort
of
support
for
dynamic
linking
of
code,
and
why
is
that
a
problem?
A
Well,
if
you
take
this
example
of
three
different
tasks
running
on
the
spacecraft,
so
three
different
software
tasks,
you
might
have
an
attitude,
control
task
or
a
historical
telemetry
task.
So
these
are.
These
are
bits
of
software
that
are
running
and
they
might
rely
upon
something
that
gathers
data
or
gathers
telemetry.
A
You
know
all
the
time
one
would
be,
for
you
know:
telemetry,
that's
used
for
attitude
control
and
another
one
might
be
for
data
that
you're
collecting
to
be
downloaded
to
the
ground
later
on,
and
so
replacing
this
task
presents
a
problem,
because
these
tasks
have
an
idea
of
where
these
functions
are
that
are
invoked
in
here.
So
if
you
replace
this,
then
that
link
is
destroyed.
You
know
this
this.
B
B
A
B
So
these
all
have
been
covered
by
paul
now
requirement
just
to
briefly
go
through
the
requirements.
Again,
we
don't
want
to
go
through
the
complex
reboot
process.
There
can
be
various
complications
or
various
services
that
need
to
be
restarted,
so
the
best
alternative
is
to
patch
the
system
then,
and
there
without
need,
without
without
rebooting
system
in
linux
systems,
we
have
live,
live
patching
in
ubuntu
and
k,
supplies
in
rel
and
oracle
linux
safely,
update
or
reconfigure
part
of
the
system.
B
Some
bugs
have
bug
fixes
some
bugs
have
been
identified,
or
some
new
feature
needs
to
be
added
on
the
running
system,
so
yeah
we
should
be
able
to
do
that.
It
ensures
long
update
a
long,
uptime
and
up-to-date
software,
so
yeah
these
these
were
the
main
driving
force
and
along
with
what
paul
mentioned.
So
these
are
just
basically
adding
on
to
that.
B
While
designing
this
solution,
what
considerations
I
took,
what
what
consideration?
What
were
the
considerations
I
had
to
keep
in
mind
while
I
designed
this
so
the
footprint
has
to
be
small
because
and
memory
footprint
or
code
footprint,
because
it
will
be
used
for
embedded
devices.
B
Secondly,
the
main
binary-
or
we
will
call
it
system
binary-
has
to
be
compiled
and
loaded
separately
apart
from
application,
binaries
or
application
tasks.
That's
the
whole
purpose.
The
task
should
be
independent
of
the
system.
Binaries.
C
I'm
sorry
to
interrupt,
but
I
I
I
don't
see
the
slides.
Are
you
sharing
some
slides?
I
see
one
screen,
but
I
don't
see
the
content
you're
talking
about
so
is.
D
B
I
will
wait
for
few
minutes,
then.
Is
it
fine.
B
E
B
One
of
the
important
design
consideration
is
that
there
should
not
be
any
change
in
free,
torque,
free
rtos
and
that's
what
I've
been
able
to
achieve.
Updatable
applications
should
be
added
as
a
plug-in
component
plug-in
component.
They
should
be
inserted
on
the
fly
whatever
patch
needs
to
be
uploaded
can
be,
it
can
be
uploaded
from
the
earth
station
and
directly
to
the
memory
of
the
system
or
or
system
at
the
spacecraft
and
from
there
the
the
new
patch
can
be.
B
The
new
patch
can
replace
the
old
patch
and
system
binary
should
be
able
to
link
with
the
latest
patch
that
has
been
uploaded,
minimal
performance,
overhead
and
basically
yeah.
That's
very
important.
There
should
be
minimum
performance
overhead
if
you
want
to
replace
old
patch
with
a
new
patch.
So
that's
again
has
been
taken
into
consideration
and
I
have
how
I
have
implemented.
The
solution
is
basically,
I
have
divided
the
solution
into
various
components
like
we
use
elf
binary.
B
We
use
system
manager,
we
have
system
that
includes
task
manager
and
other
components.
I
will
go
into
details
of
all
this.
B
So,
just
to
give
a
basic
overview
of
how
the
code
flows
will
help
you
to
understand
the
solution
at
a
broad
level,
and
then
we
can
go
into
much
more
details
and
I
can
show
you
the
demo.
So,
as
I
mentioned,
there
is
a
system
binary
and
an
application
binary.
I
have
considered
them
as
in
elf
format.
It's
a
compatible
with
three
32-bit
systems,
so
elf,
binary
is
inserted
into
the
memory
from
a
given
source
system.
Binary
and
application.
Binaries
are
compiled,
converted
to
an
elf
format
and
loaded
into
the
memory.
B
The
system
system
or
the
system
binary
recognizes
all
the
tasks
and
the
entry
points,
while
inside
the
elf
binary.
I
will
give
you
the.
I
will
show
you
the
code
snippets,
how
we
can
do
that,
or
I
will
show
you
now,
so
it
will
be
good
so
that
you
get
an
idea.
What
exactly
I'm
talking
about
so
this
application.ld,
it's
the
linker
script.
Now
this
is
the
main
linker
script
qmu.ld.
This
is
the
main
linker
script
and
it's
linking
application.
B
It's
linking
to
this
another
link,
script
application.ld
now,
what's
application.ld,
it
includes
app
app
image,
dot,
ld
and
what's
app
image,
dot
ld,
it's
basically
the
elf
image
of
the
application,
and
that's
how
I
I
I
include
application
image
into
the
main
system:
binary
yeah,
so
the
system
recognizes
all
the
tasks
and
all
the
tasks
tasks
are
basically
the
applications
and
their
entry
point
inside
the
elf
binary.
B
B
I
will
go
into
the
details
of
task
manager
and
later
slides,
so
task
manager
is
another
component,
so
the
system
loads,
the
application
loads,
the
task
and
registers
into
a
task
manager
component
and
after
that's
done
system
or
the
system
binary
calls
the
free,
rtos
scheduler,
call
to
schedule
the
task,
and
then
the
task
can
execute
and
use
the
kernel
resources
and
at
that
layer
the
role
of
system,
binary
ends
and
now
freertos
is
free
to
execute
this
task.
B
The
newly
created
task
can
now
be
inserted
into
free
task,
free
rtos
scheduling
list.
That's
what
I
mentioned
now.
The
task
can
use
all
the
kernel
resources
and
behave
as
a
normal
executing
task
as
if
it
has
been
loaded
statically.
It
doesn't
make
any
difference
now
to
it.
Now,
it's
under
the
control
of
vrtos,
with
dynamic
linking
tasks
can
be
externally
compiled
inserted
into
the
running
system
from
external
sources.
B
As
I
mentioned
now
with
this
approach,
the
the
new
the
new,
the
new
is
the
new
task,
not
the
new
task,
but
the
fixes
to
the
task
can
be
uploaded
to
the
main
system
via
ftp
flash
card
from
the
earth
station,
and
it
will
replace
the
old
task.
B
Design
and
implementation
elf
binary,
as
I
mentioned,
application
binary
elf
format,
I'm
using
two
system,
it's
two
types
system,
binaries
and
application,
binaries
that
I
will
be
using
now.
When
I
talk
about
system,
it
consists
of
following
components:
it's
basically
a
layer
above
free
rtos,
so
and
it
contains
the
following
components:
memory
allocator:
before
handing
off
the
task
to
free
out
or
scheduler
one.
B
The
system
is
a
responsible
system
or
system
binary
is
responsible
to
allocate,
as
I
mentioned,
a
system
binary
will
will
pass
the
elf
application
binary
it
will
allocate.
It
will
find
out
what
all
things
needs,
allocation
stack
heap
or
any
dynamic
allocation.
It
allocates
all
these
all
these
components
of
that
elf
application
binary.
B
Once
it
has
allocated
all
these
things,
then
it
will
register
the
all
the
allocated
regions
inside
a
splay
tree
that
I'm
using
and
also
it
will
register
each
task
or
each
application
binary
or
each
application
elf
into
another
red
black
tree
that
it
maintains.
B
Then
it
links
allocated
tasks
or
the
application
binaries,
which
is
which
it
has
loaded
to
the
main
system
binary
so
that
all
the
whatever
symbol,
resolutions
or
whatever
is
needed
it.
It
does
that
and
then
it
starts.
The
task
attaches
itself
to
the
free
rtos
scheduler
by
calling
x
task
create
and
then
once
the
task
ends
it
detaches
itself.
B
So
in
overall,
in
a
nutshell,
I
can
say
that
the
system
binary
or
the
main
main
module
is
responsible
for
bookkeeping
of
all
the
bookkeeping
of
the
task
that
will
be
running
in
the
system.
What
all
memory
has
been
allocated?
Where
is
its
stack?
What
are
the?
B
What
are
the
pointers
that
the
task
will
be
using
and
once
it
has
control
of
all
these
parts
of
a
task,
then,
in
the
next
stage
it
can
replace
when,
when
a
new
task
or
a
replacement
task
comes,
it
can
replace
all
these
all
these
items
that
are
there
in
its
register
with
the
items
in
the
new
task
and
that's
the
whole
approach
of
my
solution.
B
So
here
in
the
diagram,
we
have
elf
binary,
elf,
the
first
one
is
this
elf,
then
free
rdos.
That's
the
main
system,
elf
task,
one
and
then
runtime
linking
with
elf
task,
one
prime,
so
that
will
replace
the
old
task
one.
B
Now
the
system
startup
process,
how
the
system
boots
up
at
boot
time
system
binary,
that's
free,
rtos
and
system
code
system
code
includes
task
manager
which
I
described.
It
includes
memory,
allocator,
linker
system
application,
startup,
all
those
components
are
part
of
system
code
and
free
rtos
is
also
part
of
system
codes
at
boot
time.
So
this
loads
and
execution
starts
then
at
runtime
system
loads
and
starts
all
the
application
from
the
application
binaries.
It
happens
at
the
runtime
application.
Binaries
are
linked
to
the
system,
binaries
and
other
application.
B
B
I
won't
go
into
details
of
all
this,
but
yeah
so
yeah,
now
a
small
demo
before
going
to
the
demo
I
want
to.
I
want
to
share
that.
This
is
the
work
that
has
been
done.
My
demo
covers
that,
so
it
once
I
show
you
the
demo,
there
will
be
one
task
which
is
statically
linked
to
the
main
process
and
one
task
which
is
dynamically
linked
and
both
will
be
executing
simultaneously
going
through
the
code.
B
B
B
Here
it
passes
this
simple
simple.c
is
the
application
binary?
It's
it's
the
separate
task
which
will
print
simplest,
started,
imr,
dynamic,
simple,
it's
compiled
independently
in
make
file.
I
have
two
targets:
one
is
for
the
main
system
and
one
is
for
the
application
separate
targets
independent
of
each
other.
B
B
B
B
Okay,
I
will
continue
then
yeah.
Maybe
we
can
share
the
recording.
So
this
is
the
task
start
here.
It
tries
to
find
the
simple
start
symbol.
This
is
the
symbol
that
I
have
defined
from
where
the
application
binary
will
start
its
execution.
B
B
And
here
it
prints
and
dynamic
simple,
I
am
static,
simple,
so
yeah,
dynamic,
simple
is
the
dynamic
task
that
gets
that
has
been
linked.
Dynamically
and
static
task
is
the
static
func
static
task.
That's
directly
called
from
the
main
function
both
are
executing
simultaneously
coming
back
to
the
ppt.
B
B
So
what
are
the
risks
unknown
so
right
now
I
I
don't
have
exactly
the
performance
impact
data,
but
as
per
the
research
paper
that
I
am
following
based
on
which
I
have
framed
my
solution.
Performance
impact
should
be
minimum,
but
I
will
have
better
numbers
one
once
I
have
the
complete
demo
for
task
replacement
so
how
much
time
it
takes
to
replace
the
task.
I
still
again,
I
don't
have
the
numbers
for
that
complexity,
memory
and
the
instruction
footprint
of
the
task.
B
B
If
it's
a
multi-core
system,
then
I
need
to
take
into
consideration
how
the
memory
is
shared
and
how
how
the
what's
the
state
of
caches.
So
it
will
involve
extra,
complex
complexity,
so
right
now,
that
thing
has
not
been
considered
now
so
this
up
till
this
point,
I
have
been
able
to
execute
static
and
dynamically
linked
task
now.
My
next
aim
here
is
to
simply
modify
this
dynamically
linked
task
and
replace
this
message.
I
am
dynamic,
simple
with
something
else.
B
B
One
of
them
will
be
migrator.
It
will
be
responsible
for
migration
of
task
pointer,
tracer,
a
pointer
tracer
will
be.
It
will
build
a
memory
layout
in
a
form
of
directed
graph
to
keep
track
of
what
all
pointers
and
what
are
what
all
pointers
are
pointing
to
what
all
memory
objects,
because
you'll
be
using
pointers
and
memory
variables.
Dynamically
allocated
memory
area
memory
variables
in
your
code,
so
pointer
tracer,
will
be
the
component
that
will
keep
track
of
of
where
the
pointers
lead
to
objects
in
the
memory
dwarf.
B
If
drawfift
is,
I
will
use
the
drop
if
it's
the
debug
library
that
I
will
use
to
provide
type
information
so
as
to
get
the
type
of
the
pointer
or
the
memory
object.
That's
in
the
memory,
so
these
additional
components
will
be
needed,
so
how
how
how
task
replacement
will
happen
once
I
have
this
solution,
so
same
state
application,
binary
will
load,
it
will
be
an
inconsistent
state.
B
I
will
define
a
check
pointable
state,
every
task
that
executes
it,
has
a
task
state
associated
with
it.
So
I
need
to
define
a
state
where
it
can
be
updated
and
I'm
calling
it
as
check
pointable
state
and
the
state
in
which
it
can't
be
updated.
That's
let's
call
it
as
a
dirty
state.
Suppose
a
task
is
doing
some
ipc
calls
or
interacting
with
some
hardware.
Now
that's
a
dirty
state.
B
I
I
can't
replace
the
task
at
that
point,
so
we
need
to
wait
till
the
task
reaches
a
checkpointable
state
before
it
can
be
replaced.
So
that's
that's.
This
second
point
talk
talks
about
so
wait
till
the
task
reaches
a
checkpointable
state.
B
Suspend
the
original
task
allocate
the
updated
task,
link
the
updated
task
and
then
copy
the
memory
areas
or
whatever.
It
is
basically
copy
the
task
state
from
the
new
patch
to
to
the
old
task
and
link
the
new
task
and
start
execution
of
the
new
task.
So
that's
how
the
code
flow
will
look
like
in
once.
This
task
replacement
has
been
implemented
so
in
a
simple
step:
migration
process
step
code
v1.
This
is
the
task
task
code
code,
v1
v1,
and
then
it
goes
to
v2
how
it
goes.
B
Similarly
for
task
data
task
state
wave,
one
task:
state,
v1,
then
cpos
cpu
is
a
check.
Pointable
object,
so
we
create
a
checkpointable
object
or
checkpointable.
We
create
a
checkpointable
object
from
a
checkpointable
state
and
then
from
there
we
merge
onto
the
next
v2
state
again.
This
is
this
is
the
next
step.
I
will
give
a
more
detailed
demo
once
I
have
achieved
this
task
replacement
so
that
then
I
will
go
into
much
more
details
of
how
these
steps
are
executing.
A
Are
they
continuously
being
created,
or
is
it
just
that
you
somewhere
need
to
say
maybe
via
an
api,
call
that
that
now's
a
time
as
during
the
codes
execution
where,
where
I
I
you
know,
this-
is
a
check,
pointable
point
right
here:
sort
of
thing
yeah,
so
you
sort
of
have
like
an
api
call
saying
that
we
are
I'm
check
pointable
at
this
point,
and
then
would
it
create
the
checkpoint
data
at
that
point?
B
Right
now
again,
it's
an
implementation
detail,
so
we
can
play
around
that.
I
don't
see
any
harm
in
both
the
approaches
except
from
the
memory
footprint.
But
yes,
we
can,
we
can
grow
or
we
can
go
with
the
approach
where
it
creates
data
check
pointable
object,
even
if
it
is
not
supposed
to
migrate
just
for
the
first
phase
and
then
later
on.
We
can
change
on
that,
but
yeah,
it's
just
an
implementation
detail.
Both
approaches
are
fine.
B
Okay,
all
right
so
yeah,
that's
all
from
my
side
paul.
What
and
any
questions
before
we
move
on
to
this
further
discussions,
because
this
is
somewhat
not
related
to
technical
stuff.
A
All
right,
yeah,
I
think
I
don't
see
a
great
deal
of
issue
with
that
at
the
moment.
This
is
all
in
a
in
a
private
repository,
but
certainly
this
video
we
can
publish
for
anybody
that
wants
to
see
and
and
we'll
send
it
to
yourself.
I
I
probably
need
your
email
address
actually,
but
send
it
to
yourself
and
and
richard
as
well,
so
you
you
could
have
a
look
at
what
we've
been
talking
about,
but
of
what
you
did
see.
A
I
don't
know
if
you
have
any
any
words
of
wisdom
or
you
know
you
know
because
obviously
we're
we're
sort
of
tackling
this
as
a
new
problem
to
us
and
and
and
we
just
really
appreciate
your
your
wisdom.
F
I
can
I
just
say:
I've
joined
I'm.
This
is
richard
here
extremely
late.
I
apologize
for
that
profusely.
I'm
not
sure
if
you
can
hear
me
but
yeah.
I
really
I'm
really
sorry
about
that.
Grafton
grant
says
you
were
recording
it,
so
I
can
see
the
demo
afterwards.
So
again.
Sorry
about
that.
A
Yeah,
no,
no
problem,
it's
great
great,
to
meet
you,
though,
and
yeah
very
good
to
to
have
you.
You
know.
If
you
know,
if
you
could
have
a
look
at
what
anshul's
been
doing,
then
you
know
it
would
be
really
really
helpful
to
get
your
sort
of
feedback
any
words
of
wisdom,
or
you
know
anything
that
might
help
us
along
the
way,
because
obviously,
you've
got
a
lot
more
in-depth
knowledge
of
friata's
than
than
we
do
so.
A
That
would
be
very,
very
much
appreciated,
yeah
and
I
guess
probably
just
to
say
as
well
that
we're
we're
we're
a
sort
of
space
consultancy
business
when
we're
when
we're
not
sort
of
producing
open
source
designs
for
spacecraft
and
we're
aware
of
you
know,
free
articles
being
used
various
for
various
sort
of
onboard
systems
on
spacecraft,
which
I
guess
you
might
be
aware
of,
but
given
the
open
source
nature
of
friata's,
you
might
actually
not
be
so
aware
of.
A
I
don't
know
so
be
interested
to
hear
what
you
do
know
about
it
being
used
in
in
spacecraft.
F
Oh
well
not
that
much
to
be
honest,
but
I
don't
want
to
disrupt
the
flow
of
your
presentation.
So
if
you
want
to
carry
on
and
then
we'll
chat
about
that
at
the
end.
E
If
you
don't
mind,
angela
I'd
like
to
ask
a
question,
a
more
kind
of
general
question
right
might
be
to
quite
a
technical
answer.
I
wondered
what
were
the
most
challenging
problems
you
encountered
to
get
to
this
point
and
how
do
they
feed
into
your
lessons
learned.
B
Yeah
again
in
the
challenging
problems
where,
while
I
was
designing-
and
I
was
thinking
about
all
these
points-
so
one
other
thing
was
like-
we
don't
need
to
modify
the
free
rtos
and
how
we
can
and
how
I
can
carry
out
task
replacement
without
modifying
the
the
free
autos
code.
So
I
have
to
go
through
various
research
papers
and
then
considering
reading
the
theory
and
converting
them
to
practically
practical
code.
B
That
was
the
challenge
point
and
how
how
how
I
can
structure
the
code
and
and
then
like
I,
I
said
that
there
is
a
layer
above
free
rtos
that
through
and
where
the
layer
of
a
free
rtos
is
completely
responsible
for
managing
the
application,
binaries
and
then
passing
on
once
it
has
control
of
all
the
allocations
of
that
application.
Binary
stacks
heaps,
everything
of
that
application,
binary
and
then
passing
on
to
free
rtos.
So
reaching
to
that
point,
was
the
main
challenging
point
so
designing
the
solution,
how
it
can
be
done.
B
That
was
the
main
challenging
point
richard
just
to
iterate,
so
that
you
also
get
a
feel
of
that.
So
what?
What
is
the?
What
is
the
major
design
is
that
I
have.
I
have
a.
I
have
a
layer
above
free
rtos,
so
there
is,
there
is
a
system
binary
which
consists
of
free
rtos
code
and
task
manager.
B
I
have
integrated
that
into
one
layer
and
there
are
application
binaries
which
are
compiled
independently.
So
what
my
system
does
is
that
it
it
it
loads
the
application
binary
dynamically
at
runtime
in
an
elf
format.
Parses,
it
passes
its
elf
format,
allocates
all
the
memory
area
like
all
the
dynamic
allocation,
stacks
queues
registers,
it's
and
basically
after
allocation
in
broad
level
it
it's
it's
it
executes
that
task.
B
It
calls
x
task
scheduler
will,
with
the
allocated
area
it
has
allocated
for
the
task
and
calls
x
task
scheduler
for
x
task
create
for
that
task.
So
after
that
free
rtos
has
full
control
of
the
task
and
everything
when
I
want
to
since,
since
my
main
system,
binary
has
allocated
all
the
data
for
that
application.
Binary
system
binary
is
aware
of
where
all
the
sections
reside
and
whenever
new
task
or
whenever
the
replacement
task
comes,
it's
able
to
replace
those
memory
areas
with
the
content
of
the
new
task.
F
Yeah,
it's
saying
the
fact
that
you
you
can
do
that
as
a
without
you
know
like
changing
the
colonel.
Is
you
know
that
to
me?
That's
that's
very
interesting.
I'm
not
sure.
I'm
not
sure
if
gorath
has
spoken
much
about
you
know
ways
that
we've
kind
of
considered
doing
this
before
so.
D
C
So
one
of
the
approaches
when
I,
when
I
was
trying
this
in
one
of
our
hackathons,
was
like,
I
partitioned
the
flash
for
every
component.
So
when
you
can
say
is
like
free,
our
task
kernel
itself
will
reside
in
a
partition
of
flash
and
the
ram
for
that
partition
is
fixed.
The
same
is
for
every
other
component.
What
I
was
calling
which
could
be
comprising
of
multiple
tasks
or
less
or
like
one
task
doesn't
matter.
Then
there
is
one
loader
component,
which
is
where
the
system
boots
into.
C
It
knows
all
the
locations
of
every
component,
and
then
there
is
a
specifically
designed
binary
header,
which
resides
at
the
beginning
of
the
component,
which
tells
the
functions
which
are
exported
from
that
component
and
the
inter
the
vector,
interrupt
handlers.
That
component
wants
to
install
and
basically
just
start.
It
just
fills
up
the
function,
pointers
table
and
any
component
when
wants
to
call
a
function
in
any
other
component,
will
have
to
go
through
the
the
loader,
which
knows
the
location
of
that
function
and
then
route
the
function
call.
So
that's
basically
any
function.
C
Then,
if
what
you
call
address
resolution,
something
like
get
proc
address
if
you're
familiar
with
the
dll
terminology
and
then
call
to
that
address
so
that
that's
what
I
was
trying
now,
then
you
have
that
then
you're
free
to
replace
the
component
and
reboot
the
system,
but
one
other
thing
which
you
said
is
like
you're,
not
rebooting
the
system,
yeah
and
just
patching
it
live,
and
that's
why
I
was
like
it
would
be
interesting
to
take
a
look
and,
as
you
may,
as
I
mentioned
before,
I
was
not
able
to
take
a
look
at
the
complete
thing,
so
I
will
take
a
look
at
offline
and
then
sure
I'll
reach
out
to
you.
F
A
But
the,
but
the
eventual
target
that
we're
planning
to
fly
is
a
cortex
m7
arm
core.
It's
a
single
core:
it's
not
an
fpga!
It's
just
a
just
a
straight
processor
sort
of
system
on
a
chip
type
thing
with
lots
of
peripherals.
F
F
So
that's
that's
a
an
area
of
interest
kind
of
research
interest
for
us,
if
you
like,
in
that,
how
we
can
kind
of
combine
the
dynamic
linking
with
the
memory
protection
unit
as
well,
so
a
cortex
m7
is
going
to
have
a
memory
protection
unit
on
as
well
is
that
is
that
something
you've
kind
of
thought
about,
or
is
that
I,
you
know
it's
kind
of
out
of
scope
for
your
use
case.
B
I'm
sorry
sorry
yeah,
while
doing
my
research.
Yes,
I
came
across
this
memory
protection
unit.
It's
I
have
given
it
a
thought,
but
yes
not
not
for
this
phase,
but
definitely
in
my
mind
for
future.
D
F
F
So
on
on
the
m7,
the
memory
protection
unit
is
a
little
bit
coarse.
Should
you
say
it's
the
way
that
you
can
partition
up.
The
memory
is
not
not
that
useful
should
we
say,
because,
because
of
the
restrictions
in
the
memory
section
sizes
and
the
start
addresses,
and
that
kind
of
thing,
but
move
it
on
to
an
arm
v8
and
like
a
cortex
m33,
I
think
there's
a
lot
more
flexibility
where
we
could
potentially
do
what
we
kind
of
call.
F
You
know
putting
tasks
within
padded
cells,
as
we
say,
all
kind
of
firewalling
the
tasks
from
each
other,
and
that
way
we
can
kind
of
protect
the
make
sure
that
the
kernel
remains
protected.
So
we
can
kind
of
dynamically
link
application
code.
If
you
think,
let
me
step
back
a
little
bit
the
reason
I
say
it
changes
the
threat
model.
So
much
is
that
at
the
moment,
most
of
our
applications
are
statically
linked
and
if
we
have,
you
know
a
signed
image
and
we
we
prevent
anybody
executing
from
ram.
F
As
soon
as
we
start
dynamically
linking
then
because
we
don't
have
that
signature
up
front
or
we
don't,
we
don't
know
in
advance
what
it
is
that
the
code
is
going
to
be
running.
Then
we
have
to
take
a
lot
more
precautions
with
it
and,
of
course
we
can
sign.
You
know,
sign
images
that
are
being
dynamically
linked
as
well,
but
that
then
becomes
a
little
bit
more
restrictive.
F
So
I
don't
know
if
I've-
I
don't
know
if
I've
I've
kind
of
gone
off
the
topic
a
little
bit,
but
this
is
this
is
one
of
the
the
kind
of
areas
of
interest
I
think
for
me
with
dynamic.
Linking
is
how
we,
how
we
kind
of
manage
the
security
of
the
system
as
well.
A
Yeah,
I
think,
that's
that's
quite
a
broad
area
of
interest
for
us
ourselves
as
well
and
and
what
we're
finding
out
you
know
through
the
research
that
we're
putting
in
to
gather
the
requirements
together
for
the
open
source
satellite.
Is
that
really
you
know
security
is
in
its
infancy,
particularly
in
the
space
industry.
A
F
B
And
I
think
when
I
talked
about
task
state.
B
This
from
the
from
this
security
perspective,
and
when
we
talked
about
this
checkpoint
will
state
checkpoint
table
state
is
memory
allocation
of
a
task
state
now
for
considering
from
security
perspective,
it's
quite
possible
that
the
checkpointable
object
or
the
state
that
that
we
create
we
can
create
that
can
be
only
of
sub.
That
can
be
only
that
can
be
the
subset
of
the
main
task
state
after
we
have
taken
security
into.
B
So
this
yeah-
this
is
just
a
thought
yeah,
but
we
we
can
cater
to
security.
Of
course
yeah
we
can.
We
can
dig
deep
into
it.
Yeah.
F
B
A
A
Yeah,
in
parallel
with
this
we're
trying
to
get
a
qemu
implementation
running
specifically
for
the
for
the
processor
that
we're
that
we're
choosing
so
yeah
we're
working
on
that
and
I've
started
taking
apart
the
mps2
qemu
model
in
order
to
try
and
repurpose
it
for
an
st,
an
stm32
processor.
That's
an
m7.
A
D
A
You
had
a
look
at
those
yeah
and
don't
think
they
have
an
m7.
So
that's
why
I've
had
to
kind
of
fudge.
Things
together
take
take
qemu
version.
Five,
I
think
that's
when
they
introduced
m7
and
then
taken
some
of
the
code
from
the
x-pac
and
then
try
to
port
it
in
in
so
that
I
can
use
the
m7
instruction
set
over
qmu.
F
Yeah,
so
the
the
m7
is
an
interesting
part
in
that
the
the
arm,
v7m
spec,
as
as
provided
by
arm,
was
never
really
implemented
fully.
I
mean
it
was
always
backwards
compatible,
but
the
m3
and
m4.
If
you
look
at
the
m3
and
m4
friata's
ports
historically,
there's
a
lot
fewer
kind
of
memory,
barriers
and.
F
Data
barriers
in
there
when
the
m7
came
out,
it
actually
implemented
the
spec
a
lot
more
fully.
I
mean
there's
nothing
wrong
with
the
m4
and
the
m3
one.
You
know
they
were
just
a
subset
when
it
comes
to
the
m7,
then
what
we
actually
did
was
update
the
m4
port
to
be
more
fully
compliant
with
the
spec,
because
the
m7s
were
the
first
chips
that
actually
needed
it.
So
I'm
just
wondering
how
that
would
impact
the
qemu
model
as
well,
so.
A
So
when
I
get
my
qem,
you
go
in
actually
try
it
out
on
that.
I
suppose
that's
a
good
point.
F
So
I'm
really
disappointed
that
I
joined
so
late,
I'm
interested
in
a
little
bit
about
what
you
guys
are
doing
as
well
in
the
space
world
yeah.
What
what?
What
your
well?
How?
How
are
your
code
is
going
to
be
released
eventually
and
the
kind
of
use
cases
for
it.
A
Yeah
so
yeah,
just
so
you're
aware
we're
doing
more
than
just
code
we're
we're
trying
to
basically
create
an
open
source
design
for
a
complete
spacecraft,
so
that
includes
software
electronics,
mechanical
design,
the
whole
works
really
and
the
the
intent
is
really
at
the
high
level
to
try
and
make
a
bit
of
a
shift
in
the
in
the
space
industry.
A
So
a
group
of
professionals
who've
been
involved
with
trying
to
change
the
economics
of
space
over
a
number
of
years,
and
so
this
is
kind
of
our
latest
attempt
to.
You
know
bring
about
a
shift
in
the
industry,
and
so
we
looked
at
it
and
said
well,
it
would
be
great
if
we
could
create
something,
that's
more
capable
than
what's
known
as
a
cubesat.
I
don't
know
if
you've
come
across
those
things,
particularly
yes,.
A
Yeah
yeah
cubesat,
it's
very
common
in
the
cubesat
sort
of
community
and
we're
trying
to
create
something
which
is
slightly
bigger
and
more
capable
than
the
cubesat.
But
is
it
we're
trying
to
do
that
at
a
price
that
that
is
compatible
with
the
cubesat?
A
So
that's
what
we're
trying
to
do
so
we're
trying
in
doing
that
we're
trying
to
sort
of
encompass
a
lot
of
open
source
technology,
but
also
you
know
not
only
encompass
it
as
in
use
it,
but
also
give
out
open
source
as
well.
So
all
of
our
design
would
be
put
out
open
source,
and
at
the
moment
we
have
some.
You
know,
repositories
on
on
github,
and
the
hope
is
that
this
would
be
actually
the
very
first
thing
that
we
put
out
into
to
make
a
public
repository.
A
So
I
think
at
the
moment
it
you
know
it
would
be
we've.
You
know
essentially
got
a
got
a
prototype,
but
I
think
it,
regardless
of
its
state
as
a
prototype.
It
would
be
interesting
to
sort
of
make
it
public
and
and
and
get
people's
view
on
it,
and
also,
you
know,
hopefully
pick
up
some
more
collaborators
along
the
way
as
well.
F
Yeah
yeah:
well,
definitely,
you
know,
keep
us
in
the
loop
on
what
you're
you
are
doing.
I
mean
it
would
be
good
to
you
know
once
this
once
is
kind
of
published,
perhaps
write
a
little
bit
about
it
on
on
the
friata's
website,
and
these
kind
of
interesting,
interesting
projects
that
find
out
about
accidentally.
F
You
know
it's
the
the
really.
The
only
way
I
find
out
what
people
are
doing
with
free
atos
is
when
I
go
to
conferences
and
chat
with
people,
but
at
the
moment
all
the
conferences
are
kind
of
virtual.
So
you
don't
get
the
you,
don't
get
that
chance
to
to
chat
with
people
and
see
what
they're
up
to.
E
We
were
thinking
about
maybe
running
some
kind
of
poll
over
linkedin,
because
we've
got,
I
don't
know,
maybe
800
followers.
I
think,
on
on
linkedin
running
some
kind
of
poll
with
to
ask
that
question.
You
know
who's
who's
got
any
experience
of
using
free
artists
for
space
who's
actually
implemented
it.
You
know,
what's
your
experience
and
try
and
you
know
get
a
an
understanding
of
of
where
it's,
where
it's
landing
and
who's
using
it,
and
you
know,
build
build
that
community
and
use
that
to
share
share
information
about
how
we're
making
it
robust
for
space.
F
Yeah
and
that's
that's
particularly
interesting-
there
are
the
robustness,
so
this
is
an
area
we
are
focusing
quite
a
lot
on
at
the
moment,
so
grav
graf
who's
on
the
call
he's
our
our
main
guy
on
the
arm.
V810
stuff
and
he's
he's
made
some
improvements
to
the
v7
m
code
as
well
as
far
as
more
security.
So
the
original
mpu
port
was
more
safety
focused
than
security
focus.
So
graphs
made
some
improvements
from
a
security
perspective,
but
we
are
also
doing
memory,
safety,
proofs
and
some
other
kind
of
algorithmic
proofs.
F
So
the
queue
mechanism,
for
example,
has
undergone
some
thread:
safety
and
memory
safety
proofs,
so
the
as
far
as
the
the
kind
of
robustness
goes.
Then
you
know
we're
really
kind
of
trying
to
beef
that
up
a
bit
with
some
form.
You
know
formal
methods,
so
I'd
I'd
also
be
again
interested
in
in
you
know,
looking
at
what
you
guys
were
doing,
and
maybe
even
kind
of
sharing
ideas
on
on
this
kind
of
provable
robustness
as
well.
A
Yeah,
definitely
absolutely
that
sounds
really
good
guys.
I
think
there's
probably
some
things
that
you
know.
I
think
the
plan
going
forward
for
this
development.
You
talked
about
you
know
going
to
the
next
stage,
which
is
the
migration
of
one
task
to
you
know
and
the
next
one,
which
I
guess
is
the
sort
of
natural
next
step.
It
sounds
like
we
probably
you
know,
want
to
sort
of
look
at
either
demoing
it
on
some
real
hardware
or
on
a
qemu
m7
model
or
both.
A
You
know
that
sounds
like
a
good
de-risking
exercise,
yep,
absolutely
and
then-
and
you
know,
I
guess,
there's
some
other
little
bits
and
pieces
that
we
need
to
do
to
make
it
suitable
to
to
make
the
repository
public.
A
So
you
know
just
adding
you
know,
licensing
information
to
the
repository
and
the
and
the
code
and
that
kind
of
thing,
and
then
I
think,
we're
probably
good
to
you
know,
put
it
out
there.
I'm
also
wondering
whether
we
should
maybe
use
some
of
the
the
features
on
github
to
allow
us
to
kind
of
publicize.
A
You
know
various
bits
and
pieces
that
we
might
want
developed
along
the
way
as
well.
I
don't
know
angela.
If
this
is
your
baby,
and
you
know
I
don't
want
to-
I
don't
want
to
sort
of
suggest
that
other
people
should
get
involved.
Unless
you
know
if
you've
got
the
time
and
you've
got
the
inclination
and
energy
to
sort
of
crack
on
through,
then
you
know,
you've
done
a
good
job
so
far,
so
yeah
do
you
want
to
carry
on
like
that?
Or
would
you
like
some
help?
No.
B
A
Okay,
okay,
okay!
Well,
I
I
think
that
yeah
there's,
probably
a
few
actions
which
I
won't
bore.
Everybody
with
you
know
to
sort
of
open
up
the
repository.
What
I'll
do
richard
I'll
get
that
and
the
recording
to
you?
I've
got
your
email
address,
I'm
not
sure
your
colleague,
I
don't
know
if
I
have
the
the
the
information
to
get
the
video
to
him,
but
but
we'll
we'll
get
it
to
you
somehow.
F
It
would
be
good
if,
when
you
send
it,
if
you
could
provide
everyone's
email
addresses
as
well
and
then
you've
got
mine
and
you've
got
garage,
but
I'll
reply
to
that
email
with
obviously
myself.
My
own
email
will
be
next
I'll,
be
replying,
but
with
grabs
in
there
as
well,
and
then
everybody's
got
everyone's
email
address.
A
A
Well,
I
think
I
think
that's
kind
of
that
kind
of
marks
the
end
of
this
kind
of
part
of
the
development
really-
and
I
just
want
to
say
thank
you
very,
very
much
angel
for
you
know
dedicating
your
time.
You
know
in
your
spare
time.
You
know.
Writing
this
stuff,
and
I've
been
very
impressed
with
what
you've
managed
to
achieve,
and
certainly
I
didn't
want
to
take
it
on
which
is
which
is
what
I
thought.
A
It
sounds
like
a
nasty
job
for
someone
who
is
probably
better
at
it
than
me.
So
no.
I
really
appreciate
that
and
yeah
great
to
have
you
as
involved
as
well
richard
and-
and
you
know,
people
from
friata's
really
very
much
very
much
enjoy
having
you
involved
and
found
it
very,
very
good
to
to
be
working
on
free
artists,
having
used
lots
of
different
operating
systems
and
real-time
operating
systems.
This
one's
a
good
one,
so
yeah
very
much
appreciate
your
your
efforts
over
the
years,
putting
it
together.
A
So
thank
you
very
much,
and
has
anybody
got
any
other
questions
or
anything
before
I
close
this
off.
C
Can
I
just
request
also
anshul
when
you
guys
send
us
the
presentation?
Can
you
also
link
to
the
paper
based
on
which
your
implementation
is
sure
thanks.