<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EmbLogic &#187; Ankit.e1</title>
	<atom:link href="https://www.emblogic.com/blog/author/ankit-e1/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.emblogic.com/blog</link>
	<description>Embedded System and ARM Training</description>
	<lastBuildDate>Tue, 03 Mar 2020 13:00:06 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>Device Drivers in OS Environment</title>
		<link>https://www.emblogic.com/blog/02/divice-drivers-in-os-environment/</link>
		<comments>https://www.emblogic.com/blog/02/divice-drivers-in-os-environment/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 19:08:35 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=465</guid>
		<description><![CDATA[DEVICE DRIVER ::A device driver is a software, it’s not a hardware. A driver is a code which is completely specific to a hardware device and brings all the functionality to it. Without a driver in OS environment an application &#8230; <a href="https://www.emblogic.com/blog/02/divice-drivers-in-os-environment/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a rel="attachment wp-att-476" href="http://emblogic.org/blog/02/divice-drivers-in-os-environment/device_driver/"><img class="alignnone size-full wp-image-476" src="http://emblogic.org/blog/wp-content/uploads/2011/02/device_driver.jpg" alt="" width="300" height="300" /></a></p>
<p>DEVICE DRIVER ::A device driver is a software, it’s not a hardware. <em>A  driver is a code which is completely specific to a hardware device and  brings all the functionality to it</em>. Without a driver in OS environment  an application can’t make use of the hardware functionalities. Driver  has to be in the kernel space in the case of monolithic kernel. It has  to be in the privileged environment, it is so because in the privileged  space/kernel space only the driver code has the ability to perform  operations on the hardware. <em>This kind of code can also be written for  micro controllers where there is no OS.</em><br />
<em>Applications reside in a non privileged environment and have to rely on  services provided by drivers to access the hw</em>. This is done to reduce  complexity and making the use of information hiding that is  encapsulating and providing abstraction, so as to make the applications  easier and safer to write in less time.  <em>In linux the drivers are the  kernel services to access the hw functionalities.</em></p>
<p>OS KERNEL :: The operating system is not what you see on your display  device or your monitor. The operating system consists of a kernel(the  soul of your system), shell and utility programs or api to<br />
access services and interacting with the hardware. The most important  part rather the soul of an operating system is it’s kernel. The kernel’s  job is to manage memory, do task scheduling, bring functionality to the  device through device drivers and provide services for interprocess  communication.<br />
The kernel may be MONOLITHIC or a MICRO KERNEL. A monolithic kernel is a  kernel where every part of the it is just build into it as a unit and  has a disadvantage that if any thing goes wrong with any part of the  kernel code that may be for example <em>a device driver code trying to  dereference an invalid address the whole SYSTEM crashes</em>. Micro kernels  have an advantage over this, as the device drivers and rest of the  kernel services lie out side the kernel space and kernel just supervises  each of the operations as a server and whole of the kernel is based on  CLIENT AND SERVER computing model. Thus the kernel has less probability  to crash.</p>
<p>DEVICE DRIVERS :: We use peripheral devices. These are the mouse,  keyboard, printer, Network devices to send and receive network  information. These devices are not directly connected to the cpu through  a bus, they are first connected to a controller or a bridge device  (Device IO controller) through a bus that is referred to as peripheral  bus. The device IO controller may be UART controller, USB controller,  VGA controller, NETWORK controller etc. This controller is again further  connected to the processor through the controller bus (in case of a PC  set up).<br />
Example :: USB is a peripheral bus and PCI is a controller bus.</p>
<p>DEVICE DRIVER LOGIC :: We cannot directly perform operations on the  device as we have the device controller in between. We need to give  commands to the controller. Then on behalf of the our code the  controller will do the job. Thus our first issue is to send commands to  the controller according to the functionalities offered by the device.  We must know what all operations this device can support or simply  options on the device.<br />
Thus our driver code is broken up into two parts ::</p>
<p>#1 Low Level Driver (LLD):: Interfacing with the controller.(This code remains the same for a specific controller)</p>
<p>#2 High Level Driver (HLD) :: Code specific to the peripheral device  functionality.(Without the knowledge of which device you are talking we  can’t write this code.)</p>
<p>Interfacing with the controller is called the low level drive. The  low level drivers provide the code to interact with the controllers. The  high level drivers are only about what to execute on the device.</p>
<p>We need this kind of division because there are different controllers  on different architectures. The usb controller for example may be  different on different on different boards. If we mix both HLD and LLD  in one code our driver will never be portable, will not be able to reuse  our code. But if we divide this logically the HLD can remain same while  the LLD can differ. The HLD must remain absolutely controller  independent and reusable.</p>
<p>To make HLD independent of hw we hide the details of LLD and call it  BUS MANAGER. The bus manager is similar to the virtual file system which  is an abstraction hiding all the complexities of othe file systems.</p>
<p>Writing low level driver is writing board bring up driver. We have  two domains of device driver community BSP driver community and and  PERIPHERAL driver community. Simply BSP driver community write LLD and  PERIPHERAL driver community write HLD.</p>
<p>In PC domain we don’t really have to worry about the LLD because it  comes along with the kernel sources. But in the embedded domain we may  have write a little bit of LLD.</p>
<p>HIGH LEVEL DRIVERS :: The high level drivers or the peripheral device  drivers reside in the kernel space. The applications are in the user  space which use these drivers. Now we have to provide an interface  through which the applications can request like do this operation do  that operation. Also we communicate with the hard ware which done  through the API of low level driver. Now writing this driver is also  broken down into two parts.</p>
<p>#1 Interfacing with the application.(This code is specific to design of kernel)(SYS CALLS in Linux)<br />
#2 Interaction with hardware.(This code is specific to bus manager)</p>
<p>Exploring the interaction with hardware requires the reading and understanding of kernel sources.</p>
<p>Linux provides three different approaches for writing interfacing with the application.<br />
Linux Driver Classes =<br />
#1 CHARACTER DRIVER MODEL<br />
#2 BLOCK DRIVER MODEL<br />
#3 NETWORK DRIVER MODEL</p>
<p>The approach we choose depends upon two factors.<br />
#1 Synchronous communication.<br />
#2 Asynchronous communication.</p>
<p>Asynchronous means :: An application will not directly interact with  the driver instead it will submit a request and go back. The driver will  then carry out the operations. Application will either poll for the  operation to be done or the driver will send a signal to the application that  the job is done.</p>
<p>Synchronous means :: An application will make a call to a function and wait for it to return.</p>
<p>Example :: A char driver can be for pci bus, it can be on usb bus and so on.</p>
<p>Ankit</p>
<p>15/02/11</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/02/divice-drivers-in-os-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Processor Buses</title>
		<link>https://www.emblogic.com/blog/01/the-processor-buses/</link>
		<comments>https://www.emblogic.com/blog/01/the-processor-buses/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 12:23:31 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=349</guid>
		<description><![CDATA[The CPU is connected to memory and various other I/O devices through strips of wires called buses. These buses just take the data, address and control signals from one place to another. There are three types of buses :- #1 &#8230; <a href="https://www.emblogic.com/blog/01/the-processor-buses/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The CPU is connected to memory and various other I/O devices through strips of wires called buses. These buses just take the data, address and control signals from one place to another.</p>
<p>There are three types of buses :-</p>
<p>#1 Data Bus. (Bidirectional)</p>
<p># 2 Address Bus. (Unidirectional)</p>
<p>#3 Control Bus. (Unidirectional)</p>
<p>The data bus is used for carrying data in and out from the CPU. The data bus determines the performance of the CPU, more the data lines in a data bus better is the CPU. The average size of data bus varies from 8 bit to 64 bit.</p>
<p>The address bus is used to identify the device and memory connected to CPU. If CPU wants to communicate with device or a memory, it just loads its address on the address bus and device or location having that add becomes active.</p>
<p>The control bus is used for sending control signal to the addressed device or memory for performing read and write operations at that location.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/01/the-processor-buses/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regarding Kernel Execution</title>
		<link>https://www.emblogic.com/blog/10/regarding-kernel-execution/</link>
		<comments>https://www.emblogic.com/blog/10/regarding-kernel-execution/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 21:06:50 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=230</guid>
		<description><![CDATA[What is the difference b/w concurrent execution and sequential execution??? I have the idea abt the sequential execution ie applications are sequentially executed.. But how Kernel modules are concurrent in execution ?? Plz elaborate.]]></description>
				<content:encoded><![CDATA[<p>What is the difference b/w concurrent execution and sequential execution??? I have the idea abt the sequential execution ie applications are sequentially executed.. But how Kernel modules are concurrent in execution ?? Plz elaborate.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/10/regarding-kernel-execution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Algorithm to trim.</title>
		<link>https://www.emblogic.com/blog/10/the-algorithm-to-trim/</link>
		<comments>https://www.emblogic.com/blog/10/the-algorithm-to-trim/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 12:35:30 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=195</guid>
		<description><![CDATA[int scull_trim(struct scull_dev *dev) -&#62; Iterate through scull_qsets -&#62; for(*s_q=s_d-&#62;data;s_q;s_q=next) -&#62; In every iteration -&#62; Free the quantums -&#62; Finaly free the qset array -&#62; Make pointer to qset as NULL -&#62; Free scull_qset -&#62; Finally initialize the default values]]></description>
				<content:encoded><![CDATA[<p>int scull_trim(struct scull_dev *dev)</p>
<p>-&gt; Iterate through scull_qsets</p>
<p>-&gt; for(*s_q=s_d-&gt;data;s_q;s_q=next)</p>
<p>-&gt; In every iteration</p>
<p>-&gt; Free the quantums</p>
<p>-&gt; Finaly free the qset array</p>
<p>-&gt; Make pointer to qset as NULL</p>
<p>-&gt; Free scull_qset</p>
<p>-&gt; Finally initialize the default values</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/10/the-algorithm-to-trim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Macro &#8220;container_of&#8221;</title>
		<link>https://www.emblogic.com/blog/10/the-macro-container_of/</link>
		<comments>https://www.emblogic.com/blog/10/the-macro-container_of/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 12:15:50 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=184</guid>
		<description><![CDATA[#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)-&#62;member ) *__mptr = (ptr); \ (type *)( (char *)__mptr &#8211; offsetof(type,member) );})]]></description>
				<content:encoded><![CDATA[<p>#define container_of(ptr, type, member) ({                      \<br />
        const typeof( ((type *)0)-&gt;member ) *__mptr = (ptr);    \<br />
        (type *)( (char *)__mptr &#8211; offsetof(type,member) );})</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/10/the-macro-container_of/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regarding Char Device Registration</title>
		<link>https://www.emblogic.com/blog/10/regarding-char-device-registration/</link>
		<comments>https://www.emblogic.com/blog/10/regarding-char-device-registration/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 19:31:15 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=182</guid>
		<description><![CDATA[When we used : register_chrdev(unsigned int major, const char *name, struct file_operations *fops); We never initialized struct cdev. Still we were very much able to call all the functions mapped in the file_operatins structure using fop. Why we have to &#8230; <a href="https://www.emblogic.com/blog/10/regarding-char-device-registration/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>When we used : register_chrdev(unsigned int major, const char *name,<br />
struct file_operations *fops);</p>
<p>We never initialized struct cdev. Still we were very much able to call all the functions mapped in the file_operatins structure using fop.</p>
<p>Why we have to initialize it in the case of alloc_chardev_region<br />
or register_chardev_region ???? Will these function not work ,if we dont initialize cdev in this case.</p>
<p>Why struct cdev is so nessary.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/10/regarding-char-device-registration/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Registering the chr device</title>
		<link>https://www.emblogic.com/blog/10/registering-the-chr-device/</link>
		<comments>https://www.emblogic.com/blog/10/registering-the-chr-device/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 18:36:20 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=142</guid>
		<description><![CDATA[In int register_chrdev_region(dev_t first, unsigned int count,char *name); if we make count large what can go wrong.]]></description>
				<content:encoded><![CDATA[<p>In int register_chrdev_region(dev_t first, unsigned int count,char *name);<br />
if we make count large what can go wrong.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/10/registering-the-chr-device/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Makefile</title>
		<link>https://www.emblogic.com/blog/09/makefile/</link>
		<comments>https://www.emblogic.com/blog/09/makefile/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 13:16:25 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=178</guid>
		<description><![CDATA[INSTALL_DIR=modules ifneq (${KERNELRELEASE},) obj-m := new.o new_mod-objs := new.o else KERNELDIR ?= /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE)  -C $(KERNELDIR) M=$(PWD) modules @rm -rf ${INSTALL_DIR} @mkdir ${INSTALL_DIR} @mv -f *.o *.ko *.mod.c .*.cmd ${INSTALL_DIR} clean: rm -rf &#8230; <a href="https://www.emblogic.com/blog/09/makefile/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>INSTALL_DIR=modules<br />
ifneq (${KERNELRELEASE},)<br />
obj-m := new.o</p>
<p>new_mod-objs := new.o</p>
<p>else<br />
KERNELDIR ?= /lib/modules/$(shell uname -r)/build<br />
PWD := $(shell pwd)<br />
default:<br />
$(MAKE)  -C $(KERNELDIR) M=$(PWD) modules<br />
@rm -rf ${INSTALL_DIR}<br />
@mkdir ${INSTALL_DIR}<br />
@mv -f *.o *.ko *.mod.c .*.cmd ${INSTALL_DIR}<br />
clean:<br />
rm -rf ${INSTALL_DIR}<br />
endif</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/09/makefile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Allocation Test Function.</title>
		<link>https://www.emblogic.com/blog/09/allocation-test-function/</link>
		<comments>https://www.emblogic.com/blog/09/allocation-test-function/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 07:16:37 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=169</guid>
		<description><![CDATA[// Function To allocate bytes . // Test function for writing write operation. #include&#60;stdio.h&#62; #include&#60;stdlib.h&#62; #define SIZE 1000 char arr[SIZE]; char *p=arr; char * allocate(unsigned char  ); char * allocate(unsigned char j) { if(arr+SIZE-p&#62;j) { p=p+j; return p-j; } else &#8230; <a href="https://www.emblogic.com/blog/09/allocation-test-function/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>// Function To allocate bytes .<br />
// Test function for writing write operation.<br />
#include&lt;stdio.h&gt;<br />
#include&lt;stdlib.h&gt;<br />
#define SIZE 1000<br />
char arr[SIZE];<br />
char *p=arr;</p>
<p>char * allocate(unsigned char  );<br />
char * allocate(unsigned char j)<br />
{<br />
if(arr+SIZE-p&gt;j)<br />
{<br />
p=p+j;<br />
return p-j;<br />
}<br />
else<br />
{<br />
printf(&#8220;Error in size\n&#8221;);<br />
return NULL;<br />
}<br />
}<br />
int main()<br />
{<br />
int *j;<br />
char *l;<br />
j=(int *)allocate(sizeof(int));<br />
if(!j)<br />
printf(&#8220;Error\n&#8221;);<br />
*j=67;<br />
l=(char *)allocate(sizeof(char));<br />
*l=77;<br />
printf(&#8220;%d %d\n&#8221;,*j,sizeof(*l));<br />
return 0;<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/09/allocation-test-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memory Management Strategies.</title>
		<link>https://www.emblogic.com/blog/09/memory-management-strategies/</link>
		<comments>https://www.emblogic.com/blog/09/memory-management-strategies/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 19:41:39 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=162</guid>
		<description><![CDATA[# The memory management algos vary from primitive bare-machine to paging and segmentation strategies. # Memory contains large array of words and bytes each having its own address. # The computer fetches the instructions from the cpu , according to &#8230; <a href="https://www.emblogic.com/blog/09/memory-management-strategies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p># The memory management algos vary from primitive bare-machine to paging and segmentation strategies.<br />
# Memory contains large array of words and bytes each having its own address.<br />
# The computer fetches the instructions from the cpu , according to the value in program counter.<br />
# The memory unit just sees the streams of memory addresses , it does not know how they are created or what they are for.<br />
# The binding of actual address and the logical address has to be seen as far as memory management has to be considered.</p>
<p>Basic Hardware</p>
<p># Main memory and the processor&#8217;s registers build into the cpu memory is what cpu can access directly.<br />
# There are machine instructions that take memory addresses as arguments.?? What are those instructions like.<br />
# Thus any instruction in execution or any data used by these instructions must be in any of these (direct-access)storage devices. If they are not they have to moved before cpu can operate them.<br />
# The registers that are build into the cpu are accessible in one cycle of the cpu clock.<br />
# Most cpu&#8217;s can decode the instructions in registers and perform simple operations at the rate of one operation per clock tick. This is not the case for the main memory which is held via memory bus.<br />
# The memory access may take many cycles to complete during which the processor has to stall. In the case of main memory.<br />
# The remedy is install a fast memory b/w cpu and main memory called cache.<br />
# The issues are more than this, like protecting the os from the user process.<br />
# This protection is provided by the hardware.<br />
# We need to make sure each process has a separate memory space.<br />
# This can be done by using base and limit register.<br />
# The base register holds the smallest legal phy add. and the limit register holds size of the range.<br />
# The hw protection is obtained by comparison bw these registers.<br />
# If add beyond or below is issued a fatal error is a result of this.<br />
# These registers can only be loaded by kernel.<br />
# The os is only allowed to do such modifications.Thus allowing it dump the code in case of errors.</p>
<p>Address Binding</p>
<p># The process that are waiting to be brought for the execution form the input queue.<br />
# As the process executes it accesses the data and the instructions from the memory.<br />
# After this its memory space becomes available.<br />
# Many os allow process to reside any where in the memory.<br />
# Add. in the source program are generally symbolic.<br />
# The compiler binds these symbolic add to relocatable add.</p>
<p>Logical vs physical add.</p>
<p># The add generated by the cpu is generally called the logical add.<br />
# But the add in the memory is generally referred to as physical add.<br />
# In the execution time the add can be referred to as logical add.<br />
# The set of all logical add generated by the program is called the logical add space.<br />
# The set of all physical add corresponding to these logical add is called physical add space.<br />
# In the run time the logical to physical add is done by a hardware called MMU(memory management unit).<br />
# The very basic example is of ms-dos which uses relocation register .<br />
# In relocation register each add is added with the relocation value to form the phy add.<br />
# The program never sees the real add. It can have a pointer pointing to 346 and can do what ver with it ie. add compare.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/09/memory-management-strategies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A , B , C  &#8230;. Java Blah Blah</title>
		<link>https://www.emblogic.com/blog/07/a-b-c-java-blah-blah/</link>
		<comments>https://www.emblogic.com/blog/07/a-b-c-java-blah-blah/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 18:48:28 +0000</pubDate>
		<dc:creator><![CDATA[Ankit.e1]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=32</guid>
		<description><![CDATA[Today there are so many computer languages that we use, it has been long since we are using the C language. But with new languages being developed , is it that C has eventually become out dated, or there are &#8230; <a href="https://www.emblogic.com/blog/07/a-b-c-java-blah-blah/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Today there are so many computer languages that we use, it has been long since we are using the C language. But with new languages being developed , is it that C has eventually become out dated, or there are chances that it might get replaced ???</p>
<p>What is the current scenario ???</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/a-b-c-java-blah-blah/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
