嵌入式系统中创建任务问题
局部变量是编译器自动放在栈里面的。
函数调用过程中会自动压栈,调用返回时自动出栈,这个过程是编译器做的,你写一个简单的函数调用程序然后看他的反汇编源码就会理解这点。
上面是一个任务的情形,你能看到"栈指针“的作用。
而多个任务的话就要各自有一个栈的空间,向你定义的栈空间里保存内容是嵌入式操作系统做的事,看RTOS源码就能理解。任务切换时就是把系统的栈指针指回到各自的栈空间在调度之前的位置,这样现场就被还原了,看起来其他任务好像没执行过一样。
关于S3C2440采用 NAND FLASH的启动
问题一、一般OS的内核经过编译后通过BOOTLOADER应全部拷贝到内存中(LINUX内核是这样的),比如说LINUX内核(运行于ARM板子上)编译后zImage大概2M这样这个是要全部拷贝到内存中的,用户层应用程序可以向楼主所说的运行到需要的时候但内存内又没有就加载(运行时加载)这个由OS内核控制。如果SDRAM过小,基本上是不能运行OS
问题二、S3C2440有Steppingstone内部SDRAM缓冲器,它支持启动时自动拷贝NANDFLASH前4KB代码,这4KB会被映射到存储空间的前4K中去,不需要用户(驱动开发人员)编写任何驱动,具体原理可以参考S3C2440 datasheet.
顺便提一下,只有S3C2440的NANDFLASH控制器支持上述功能

