This is to solicit practical advice on professional growth in the
embedded system engineer area.
My background
After got my B.S. of Computer engineering, I worked in telecom
industry and part-time developed application software for 7 years. I
programmed in Visual C++ and Visual FoxPro (for some database
software) on PC.
Then I want back to University and got my M.S. on computer
engineering. After that I came to my current employer. Now it?s 4
years.
My job
My job is to develop some IDE software for embedded system
development. It is still an application software, but since its
purpose is to help user construct the hardware and software of the
embedded system, I am fully exposed to embedded world since then.
My work is like this, each development cycle we add some new
functionality, and in testing the software we construct some system
and verify them on the board. For example, my latest work is to list
what memories are in the system and ask user to select how to
configure the data/text/interrupt section of the final ELF file, then
based on user selection, I generate the linker script.
My request
After 4 years work in embedded system, I am more and more interested
in this area. I feel more challenge and more fun than pure PC C++
programming.
In a self assessment, it seems I know a lot in embedded than before.
On software side, I know how a processor boots, from power on to print
?Hello World.?; I know there is a CRT setup before a jump to main(); I
know there are processor memory layout and liner script setup for the
sections like text, data, bss; I know the same C code might function
differently under different processor compiler; I know I should use
?volatile? in C.
On hardware side, I am familiar with the specification of some
industrial products like UARTns550, IIC, PCI and memory controllers
like SDRAM and DDR; I can launch logic analyzer to track some simple
hardware problem; I can normally identify the system problem is from
hardware functionality problem or from system timing problem; I can
check out the design source file, VHDL or Verilog, to understand how
my hardware colleagues do the work.
It seems pretty good, compared to what I knew 4 year ago. But somehow
I feel very uncomfortable.
I feel that I only know very little on each piece.
For example, I know the flow of booting the processor. But I am not
familiar with assembly, so I am not able to write the bootup code
myself; I generate the linker script according to some template and
specification, but not sure how on earth the linker and loader work
under the hood; my test code are pretty much poll mode since interrupt
service routine usually makes me wondering; to me, device driver is
pretty much register access in that all the others are similar to
application level software, but it seems not correct; even though HDL
is not strange to me, I am not sure I appreciate what hardware
designer explain to me about some electrical signal integrity stuff.
It is a long list, it upsets me.
Recently the company decided to include embedded linux support and
there are some training on linux and advanced processor technique. I
attended, it is fascinating. It is also vexing when the instructor
went further into MMU, cache coherency and deep pipeline. I was lost
in those deep discussion on processor and OS.
Sometimes I wish I could go back to university, but that is not
realistic. Now I am seriously thinking to switch my career gear to go
to be an embedded system engineer, not application engineer. And I
want to be really good in this new area.
I think my boss would agree to pay me some training within US as long
as it is a week or two. I think I can have the time to practice some
self-education projects, I think I really need some hands-on. But I am
not so sure how to start, where to find such good project and where is
the training targeting people like me.
Maybe I am thinking too much, I do not know. In a training I asked the
instructor that sometimes my bootup code hangs on some particular
address and he immediatelly pointed that address is on MMU setup, so
that might come from my memory controller. That is really admiring
since I originally spent 2 days in identifying the problem. I wish I
could have his knowledge.
Hopefully you get the picture who I am and what I am desperate for.
Your suggestion is highly appreciated! |