热爱开源,喜欢分析操作系统架构
发布时间:2013-08-03 16:16:14
按照我之前给出的MPU地址空间表,Unprivileged似乎只能对内存段的RWUSER里进行写操作,而这个RWUSER段也是必须事前通过宏USER_RW_ACCESS前缀来定义的静态变量。那用户任务运行必定需要堆栈,堆栈如果不允许写,那如何运行程序呢?其实,我之前介绍的只是MQX中静态定义Unprivileged权限地址段的一种方法,而真正在使用中MQ.........【阅读全文】
发布时间:2013-08-03 14:40:49
之前说了MPU,现在说说MQX是如何使用MPU的。对于Privileged级,一般来说对整体0x00000000~0xffffffff都是有rwx权限的,(当然这个只是MPU的权限,就算是Privileged级,访问了不该访问的地址还是会出现异常错误的,不过不是MPU引发的而已)关于Unprivileged的MPU设置就比较复杂一点,具体设置的地方在_bsp_enable_card函.........【阅读全文】
发布时间:2013-08-02 23:47:44
对于个人用户来说MQX的用户模式似乎显得有些多余,花费不少资源,故意找一些东西限制住自己看起来真的是没有什么必要。但从freescale官方来说,完善系统的权限机制还是相当有必要的,针对多人协作开发的项目来说,搞底层的人搞底层,搞应用的搞应用,靠着系统调用作为衔接,分工明确,责任分明。在这点上,就像linux这类.........【阅读全文】
发布时间:2013-07-15 22:17:31
所谓人在江湖漂,哪有不挨刀,就算再牛逼的程序员也会写出有bug的程序。程序bug不可怕,最怕的是引发错误导致系统崩溃,这个在下位机编程是非常常见的,比如内存泄漏导致对不可读写地址进行读写操作导致的Hard Fault,违反MPU导致的MemManage Fault,这些错误都会让我们整个系统崩溃。相对而言,上位机程序bug一般就只会.........【阅读全文】
发布时间:2013-07-14 23:12:12
之前在动态内存分配说提到了对应MQX的所分配的一个动态内存块,是要定义一个所有者任务的。至于为什么一定要把动态内存以任务为组织形式来管理,是因为MQX是一个非常强调任务的系统。对应MQX而言,完成功能的载体是任务,分配内存是为了完成功能,那这些的内存的拥有者就必然是任务。之前说过,动态内存分配是采用了BLOCK.........【阅读全文】