找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2230|回复: 1
收起左侧

Embedded OS 移植笔记by 小ARM菜菜

[复制链接]
ID:82781 发表于 2015-6-13 16:14 | 显示全部楼层 |阅读模式

  刚刚移植了一个新的操作系统运行,总起来说基本上系统大同小异,不一样的是代码的精简程度和工作方式,很小的系统内核就不要奢望他封装成内核对象了,因为对象势必会消耗过多的RAM和ROM,所以基本上很小的内核大部分用线程队列的方式来搞。大家都在一个线程的队列中,当然内核再小也需要TCB控制,再小也需要内存,IPC通信一个不少,值得注意的是,任务是有限的,因为他要运行的系统都是资源非常局促,紧张之流!目前为止。我裸系统编译完毕后ROM用量仅仅3.7K,RAM用量1.8K显然这真是要命啊,超级小啊!并且这包括了所有的系统提供的微库文件,真是要命啊!。而这一切,仅仅是个开始!适合对于小芯片chip os解决方案!





回复

使用道具 举报

ID:82781 发表于 2015-6-13 16:15 | 显示全部楼层
           前些日子看C++注意到内联函数inline,其实在嵌入式C开发中也是支持的,只不过编译器有封装了一层,这是内联函数,尽量的短使用频繁,的function可以inline声明他,不过现在编译器已经具有优化功能了,过于冗长的也会主动封装成普通函数,
        信号量的概念其实不难理解,重要的是记住他的初始化的值,假设有一个任务等待那么他的值初始化应该=1,N个应该等于N,得到了信号量就得到了进入线程的钥匙,等不到就超时挂起或者挂起一直永远等待。使用起来就变得简单了。IPC是基本相同的,举一反三的事情了。

      在面向对象的内核编程里面上层已经把底层的硬件完全抽象了,那么对于底层的硬件来说他们的方法和属性,对象要封装吧,然而不可能把所有的方法都封装到对象里,但是上层还不希望直接看到对硬件流的操作,那么怎么解决这个问题呢? 显然指向函数的指针就成了一个好的解决办法,这样上层操作系统的处理就是加载一个对象中的方法,而硬件却执行了一次函数调用,操作了硬件,哈哈哈,很好的结局。

     最后说下网络流操作,网络组件靠硬件中断触发,然后对数据包进行检测,是否有效载荷,如果有效,那么给操作系统发送邮箱,系统建立一个静态线程,等待,唤醒后执行对缓存的加载任务,把有效载荷加载到动态内存分配的当前缓存中去,最后送入协议栈中,至此硬件的任务完成,而上层则是通过socket完成。这样上层和底层通过栈连接起来。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表