This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Be kind - i'm very new!

Note: This was originally posted on 15th July 2011 at http://forums.arm.com

Hi all,

I'm a uni student, and one of my major modules involves embedded computer programming on a Keil MCB2370 development board - I believe this has the ARM7TDMI processor built onto it..

A bit of research shows me that this processor (although VERY popular ) is similar to that used in older devices such as iPod Classic first to third generations and iPod fourth and fifth generations, iPod Mini, iPod Nano first generation (according to wikipedia anyway).

My real question is this - how far off am i (hard work and tireless dedication notwithstanding) from working on the latest A4 and A5 chips in use at the moment - i get the feeling we're being prepared for a more general role in embedded computing by programming at this level, when much more superior and current technology is out there...

Any thoughts, pieces of advice, pointers?

Who is employing engineers capable of programming well on the ARM7TDMI and similar processors?
  • Note: This was originally posted on 16th July 2011 at http://forums.arm.com

    Bump


    Hi all,

    I'm a uni student, and one of my major modules involves embedded computer programming on a Keil MCB2370 development board - I believe this has the ARM7TDMI processor built onto it..

    A bit of research shows me that this processor (although VERY popular ) is similar to that used in older devices such as iPod Classic first to third generations and iPod fourth and fifth generations, iPod Mini, iPod Nano first generation (according to wikipedia anyway).

    My real question is this - how far off am i (hard work and tireless dedication notwithstanding) from working on the latest A4 and A5 chips in use at the moment - i get the feeling we're being prepared for a more general role in embedded computing by programming at this level, when much more superior and current technology is out there...

    Any thoughts, pieces of advice, pointers?

    Who is employing engineers capable of programming well on the ARM7TDMI and similar processors?
  • Note: This was originally posted on 18th July 2011 at http://forums.arm.com

    Good afternoon Ziso,
    Here are a few thoughts. However, being an ARM employee I might not be considered as totally objective...

    The ARM7TDMI is far from being a new product. However, it is still a widely used one.
    The principles would stay the same with the newer products from the ARM Cortex families, even if the instruction set has evolved significantly. The roadmap on the Processor page does give a good overview.

    In order to find a job working on ARM products, you could simply look for the following keywords in job adverts: ARM, ARM11, Cortex-A, Cortex-R, Cortex-M.
    You can find many companies in the ARM Connected Community list. However, I would recommend you NOT to send job enquiries through the link as they don't go to Technical staff, nor do they go to Human Resources, but rather to use it as a list of people working with ARM products... You can then use Linkedin to identify hiring companies: http://arm.com/linkedin is nice medium, depending on where you live!

    Good Luck,
    Alban
  • Note: This was originally posted on 18th July 2011 at http://forums.arm.com

    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]
    I get the feeling we're being prepared for a more general role in embedded computing by programming at this level, when much more superior and current technology is out there...
    [/size][/font][/color]
    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]
    [/size][/font][/color]
    [size=2]Learning to write efficient code on a 100MHz ARM7 is a great basis for a programming career. Sure you can do more with a 1GHz Cortex CPU, but learning the basics - such as clean , efficient code - is all the more important on an ARM7 because you don't have cycles to waste. It is much easier to learn to write efficient on an ARM7 and then scale it up into a Cortex-A9 later, than it is to learn to write "alright" code on a Cortex-A9 which works because you have loads of spare cycles and then scale it down to work with an ARM7 =)[/size]
    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]
    [/size][/font][/color]
    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]Most programming skills are transferable to many end processors and devices, so focus on the underlying fundamentals and you'll be fine.[/size][/font][/color]
    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]
    [/size][/font][/color]
    [color=#222222][font=Arial, Verdana, Tahoma, sans-serif][size=2]Iso[/size][/font][/color]
  • Note: This was originally posted on 21st July 2011 at http://forums.arm.com

    Thank you both for the advice and pointers - i guess it can be kind of difficult to see the wood for the trees when uni seems to be all about assignments and projects, and the bigger picture seems more elusive.

    Are there resources where i could submit my code for evaluation (formal or informal) to get any ideas on how to make it more efficient?

    Could i do this on this forum?
  • Note: This was originally posted on 25th July 2011 at http://forums.arm.com

    Hello Ziso,
    It reminds me a saying from one of my engineering course teachers: "we teach you how to learn". The fact that we were using old technology for tutorials still allowed us to learn the way of thinking.

    About code optimisation questions, the best location would depend on the matter. I mean that we have a limited number of people active on this forum. If you are investigating code dedicated to a special derivative, you might have more chances if you post on the chip manufacturer website. I'm not suggesting that you should not post here, but you might not get the best reply... ;)
    If your question is about the ARM instruction set in general, I believe here would get you a suitable reply.

    Kindly, Alban
  • Note: This was originally posted on 25th July 2011 at http://forums.arm.com

    First and foremost, I want to say that probably most people using the latest Cortex-A8 and Cortex-A9 CPUs today probably aren't writing that much assembly code. For embedded stuff on an ARM7 you might end up writing more, due to doing more systems-stuff that requires it, having less performance headroom, and needing tighter hard-real time response. Most code for the latest iOS devices will be higher level, like in C/ObjC/C++. And for writing this code, understanding the ARM CPU running it isn't that important. Usually it'll only be for the most performance-sensitive code that you will consider writing in assembly, and if it exists at all it'll probably be a small percentage of your code.

    Basically, SoCs (system on chips) like A4 and A5 are popular in phones and tablets. Most programmers are doing downloadable apps for these devices, which is not embedded programming. In the embedded world, small microcontrollers are still king: these are usually relatively low-speed CPUs with embedded SRAM (instead of cache) and flash. It used to be that 8-bit and 16-bit dominated this region, but the low end of ARM has filled a lot of the higher end of embedded. Today ARM7 is gradually being replaced by Cortex-M3 (and to lesser extent M4 and M0), and mastering Cortex-M3 is harder than ARM7. But it's still a lot more similar than Cortex-A8/A9.

    In my opinion a lot of the general techniques to writing good ARM assembly can be learned on an old ARM7. BUT, some of the original ARM idioms are not as useful on say, Cortex-A9, and some can be outright harmful. For instance, shifting your inputs on ALU operations end up taking an extra issue cycle (but can still help if you're fetch limited). And conditional execution is turned into branches, so having more than one of these back to back is a bad idea. Really, if you want to do high performance assembly knowing the instruction set well will only get you half of the way there, for the rest you really have to know the CPU.
  • Note: This was originally posted on 25th July 2011 at http://forums.arm.com

    > and mastering Cortex-M3 is harder than ARM7

    Really? Personally I find the Cortex-M3 much easier to pick up and start using when hacking home projects. Integrated interrupt controller, simplified system modes, no need for assembler at all ... I love working with the M3 for home projects - I can focus on the problem not the low level knobs for the microcontroller itself =)

    True, writing M-class assembler is quite a lot harder compared to vanilla ARM assembler, but TBH I rarely have a need to use it now-days - compilers are much better at ARM code generation than they used to me ...

    Iso
  • Note: This was originally posted on 25th July 2011 at http://forums.arm.com


    > and mastering Cortex-M3 is harder than ARM7

    Really? Personally I find the Cortex-M3 much easier to pick up and start using when hacking home projects. Integrated interrupt controller, simplified system modes, no need for assembler at all ... I love working with the M3 for home projects - I can focus on the problem not the low level knobs for the microcontroller itself =)

    True, writing M-class assembler is quite a lot harder compared to vanilla ARM assembler, but TBH I rarely have a need to use it now-days - compilers are much better at ARM code generation than they used to me ...

    Iso


    Sorry, I meant purely in terms of CPU. More specifically, increased difficulty in hand scheduling assembly code. I'd call it a bit harder than ARM7 or ARM9, but substantially easier than Cortex-A8. That's only if you care deeply about wringing clock cycles, and even then you don't have that many options for improving it anyway. But ARM7 is the epitome of context-free scheduling. ISA-wise ARM-v7m doesn't add that much and what it does is pretty intuitive.

    Personally I'd choose a Cortex-M3 microcontroller over an ARM7 one any day of the week, unless there was a huge cost advantage for the latter. Which is getting questionable, when you can buy STM32F101s for $0.61 in low quantity (if possibly only for a limited time?)
  • Note: This was originally posted on 26th July 2011 at http://forums.arm.com

    Judging by what has been discussed above, I think the more pertinent issue for me becomes whether i want to stay on the deeply embedded side of programming, or move towards the application side.. I guess that's a decision i'll take when i'm back off placement.

    I'll spend my placement year trying to get to grips with Objective C or C++ and see how that goes - if it goes well at least i'll have a foundation in embedded C with self-taught app development skills. If it doesn't, i can just concentrate on my final year embedded C and head that way. Thanks for all the help and guidance folks - it's helped clear my mind up a bit about possible directions to take.