Saturday, October 6, 2012

1. MQX RTOS - Introduction

In next few days, I would scribe what I know about MQX. The notes can be used by the newbies. So here we go....

Whats MQX

MQX is a real time operating system from ARC and is designed for uni processor, multi processor and distributed processors. MQX provide you runtime library of functions which can be used by multitasking real-time applications.

There are certain services which are marked as core which would anyway would come with MQX, while others can be added as per your requirements.
Core services/components include automatic task creation, task scheduling, lightweight semaphores,  task errors etc.
You can always add toppings like watchdogs, exception handling, message queues, event handling, semaphores, interrupts, kernel log etc.

How you would initialize the MQX/Where in my code MQX is getting started
Well, if you are working on project which is using MQX rots, you search for the function call named _mqx.

This function 'mqx' would take few very important arguments which would tell how would MQX would behave for you. Some of this would include
a)Number of processors in you system (remember when i told it can work for multiprocessor systems as well)
b)RAM start/end address for kernel
c)stack area for Interrupts
d) address of task template, if you fill this template, these tasks would be created by the MQX after initializations. Lots to guess but, this task template would provide information about the task stack size, priority, name, default time slice etc.
e)Max hardware interrupt level. This is important filed, keep this in mind, will come back to this later.

Task template creates tasks once RTOS initialization has finished, but user is allowed to create the task at run time. You can also provide an optional exception handler or exit function. MQX would call them appropriately



AOM - Automated Overlay Manager

This feature is really useful when your target system has limited main memory and large external memory. You can use the Overlays to put the 'different functions and data to the same memory location in the RAM at different point of times'. What else you want isn't that cool.
An overlay can consist of a function, a group of function or data. When a overlay is loaded in the RAM, it may overwrite the existing overlay.

Overlays are not part of standard C language and developer must write their over libs or rely on vendor tools like Automated Overlay Manger. Well, you know it now, MQX has already done that for you.

To a make a function overlay, function name must be prefixed by _Overlay(). This call would create a distinctive overlay for that function.You can also create a overlay group by giving group id as _Overlap(GroupID).

You need to specify the size of overlay memory in linker configurations (I would come back to it later).

Events
Bit based synchronization mechanism used by tasks and interrupts.

Timers
Timers provide periodic execution of an application function. MQX supports oneshot timers (they expire once) and periodic timers (they expire repeatedly at a given interval). You can set timers to start at a specified time or after a specified duration.
When you set a timer, you specify the notification function that Timer Task calls when the timer expires. The notification function can be used to synchronize tasks by sending messages, setting events, or using one of the other MQX synchronization mechanisms.


Watchdogs
Watchdogs are an option component that lets you detect task starvation and deadlock conditions at the task level.


Interrupt and exception handling
MQX services all hardware interrupts within a range that the BSP defines and saves a minimum context for the active task. MQX supports fully nested interrupts. Once inside an interrupt service routine (ISR), an application can re-enable any interrupt level. To further reduce interrupt latencies, MQX defers task rescheduling until after all ISRs have run. In addition, MQX reschedules only if a new task has been made ready by an ISR. To reduce stack size, MQX supports a separate interrupt stack.

An ISR is not a task; it is a small, high-speed routine that reacts quickly to hardware interrupts. An ISR is usually written in C. Its duties include resetting the device, getting its data, and signaling the appropriate task. An ISR can be used to signal a task with any non-blocking MQX functions.

There are few other components as well but what I discussed above are the core ones. Will come back to them at appropriate times.


Read about Scheduling Tasks and Starting MQX here.

Sunday, April 29, 2012

Cracking Bitwise Operators, Important tricks Bitwise operator

In interviews embedded engineers and Driver developers are often asked various bitwise questions.
You can never predict what interviewer will ask, but if you have few tricks in mind you can crack the questions easily. I am putting few of stuff here.

Assume num is the unsigned integer.
1) Extract a certain bit, say bit p from the number
bit = num & 1<

2) Clear bit p in a number
num = num &(~(1<

Core concept : ~(1<3) Set a bit p in a number
num = num & (1<

4) A number XORed with itself results zero, if you XOR number again with itself(3 times) it will again form the original number. Remember this is very important property.

5) Suppose you want to get n bits from the number starting from position p (This is core logic of many difficult bitwise questions)

result = (num>>p) & ((1<

Core Concept : (1<

Keep looking this space will add more.



Monday, March 26, 2012

Source Insight Replace Tabs with 4 spaces

Options > Document Options
1) Set Tab width to 4
2) Select Expand Tabs

Thats it you are game!!

To verify if its set properly, you can always select "Visible Tabs", this will show the tab with visible symbol.

Source Insight Braces How to Control

http://www.sourceinsight.com/docs35/ad918598.htm

Select Simple and check both of the check boxes.
Go to Options>Document Option>Auto Ident


Auto Indenting

The auto-indenting feature controls the level of indentation as you type new text. Source Insight supports Simple and Smart types of auto-indentation. Not all languages support the Smart level.

Auto Indent Type

Specifies the type of auto-indenting. Automatic indenting occurs when you insert new lines.

None No special indenting occurs. Source Insight will return the insertion point to the very beginning of the next line when you insert a new line or word wrap.

Simple Source Insight will automatically indent text to line up with the previous or following line.

Smart Source Insight will automatically increase or decrease the indentation level when you insert new lines. Not all languages support smart indenting. If this button is selected, then the Smart Indent Options are applied.

Smart Indent Options

These check boxes determine how the smart indenting affects open and closing curly braces.

Desired Indent Style

Check box setting

if (x) { } 

Clear both boxes.

if (x)     {     } 

Select both boxes

if (x) { } 

Select Indent Open Brace;
Un-select Indent Close Brace


Wednesday, December 21, 2011

Visual Studio Project Settings/What Macros are defined/ Where is my output/ What are my project configurations

What Macros are defined/ Where is my output/ What are my project configurations
- Click on Project -> Project Name Properties
- Configuration Properties
- General -> here you will define the output or out, intermediate directories.
- C/C++ -> preprocessor Here you can check the Preprocessors which are defined for your project
- Linker-> General Here you can check the output file name. e.g dll file location and its name. Out directory as I already told is defined in the general macro

What all happens when I press F5
- Go to Configuration properties -> Debugging
- Command will tell you what paths you are setting
- Command arguments what all program you wan to run and what are the arguments
- It can be python script you want to pick with some arguments

Wednesday, June 1, 2011

how to create a visual studio Normal C/CPP project

Create new Project
Then select Visual C++ -> General -> Empty Project

Wednesday, March 16, 2011

Reverse the Linked List in K pairs

Problem description and solution can be found at
http://geeksforgeeks.org/?p=8014

Main points here.

1)reverse the first K pairs by normal reverse technique.
2)one pointer will contain last element of the reversed list
3)special check for first time.. to change root and master prev node.
4) special check to end the list