Wednesday, 7 September 2016

arm - Embedded System for a image processing task


I initially posted this on SuperUser, but I suspect, this might be a better place to post this (sorry for the double post!): I'm quite a beginner to embedded systems, but am eager to learn more. I've used an Arduino previously and quite recently purchased a Raspberry Pi (but not used it as much). I have numerous questions that I haven't found answers to when using Google, thus the post! I'd appreciate any insight (apologies in advance if my questions seem too naive!).


Recently, I've been working on some image processing code using a few image processing libraries. My code is written using C++ in Visual Studio on Windows XP. My program uses multi-threading capabilities at various stages primarily because some of the processing tasks are quite time consuming. My intention is to transfer this working code and install the back-end libraries (OpenCV, Boost etc.) onto an embedded system that is merely connected to a camera.



  1. From my search, it seems that the top of the line, embedded system are at a maximum of 500 Mhz (http://microcontrollershop.com/product_info.php?products_id=3790). This really surprises me, we have i7 Quadcore PCs running at 2.5 Ghz available quite commonly for Laptops/Desktops. Why haven't embedded systems caught up to this increase then? Also they maximum memory I've seen is 500 MB. Again, desktop PCs average at-least 4 to 8 GB commonly. Do we get dual/quad-core embedded systems? What is the top of the line system currently available?

  2. To allow for an initial easy transition, I've heard that XP Embedded or Windows Embedded 7 Standard (embedded variant of Win 7) are alternatives. Here is a difference chart. However, I've read at a few places that Windows Embedded 7 has more RAM support and thus I am inclined to it for that reason alone. Can someone add to this please? I know I could use Linux Embedded or VxWorks as well, but at this point I believe I would run into numerous OS related issues with my code if I continued and perhaps the libraries might not be supported ...

  3. I've come across PC-104 systems a few times in my searches. Reading about this, it seems to be standard. Are there better alternatives? I'm a little confused with the top-of-the-line ARM processors I've found since I don't think they satisfy the minimum hardware requirements to run the OS (1 GHz x86 or amd64 processor).

  4. My main reason to transition to this is to learn something cool in the process and have a dedicated solution that is headless and designed to perform just one specific task (hopefully in a real-time manner).




Answer



You basically have two possibilities:



  • Go for ARM

  • Go for Intel (x86/amd64)


It depends how you define your embedded system. There are ARM modules available with four cores, each one running at 1GHz+ (e.g. the Toradex Apalis family is a Multicore ARM Cortex-A9 module but others are available as well).


If you have high requirements regarding RAM and processor speed, probably the better option is to select a Core-i7 or something similar (check out the COMExpress families from e.g. Congatec) and build that into a smaller system.


Now, how do you decide on the right operating system:




  • Windows Embedded will only run on x86/amd64 architecture; There is no support for ARM processors. This can be considered as a stripped down version of Windows for PCs.

  • Windows Embedded Compact is available for ARM as well, consider it being the typical Mobile Device platform which is often optimized for reduced power consumption. Also, you are able to add your own drivers easily. So if you want to dive really deep down, this might be your preferred choice.


No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...