首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

uCOSII操作系统移植笔记

笔记一: 今天粗略的看了一下周立功关于uc/osII在lpc2104上的移植方面的说明,这之中印象最深的应该是irq中断和软中断方面的处理,由于arm芯片的特殊性(拥有7种处理器模式),即每种处理器模式都有自己的堆栈,这样在处理堆栈的时候就会相应的麻烦一些。 在 响应异常时,该移植计划在初始代码里面比在没有操作系统的初始代码多了irq的处理,移植里面的irq处理多了由汇编语言编写的对任务环境的保存,没操作 系统的中的任务环境的保存都是由在产生irq中断是用c语言声明的__irq关键字来完成了,移植中irq中断不能采用__irq关键字,因为c语言不能 保证堆栈结构,而uc/osII必须要保证堆栈结构。除此之外,相对于没操作系统的初始代码,基本上是没有什么改变。 在uc/osII的任务切换 中,采用了arm里面的软中断指令swi来执行,对于非中断性的任务切换(如挂起和等待信号量的时候)uc/osII是采用了宏os_task_sw() 来执行的,然后联系到osctxsw()函数来完成任务切换,而遇到中断情况时在返回是需要任务切换是则采用了osintctxsw()来执行的,在周立 功的移植当中,他把osctxsw()与osintctxsw()合二为一了,统一采用osintctxsw()来实现。之所以这样搞的原因是任务进行切 换的时候,都必须进入软中断的状态,而对于软中断的异常响应代码已经将任务的环境变量进行了保存,从而也不需要像osctxsw()里面规定的那样对将环 境变量进行保存。 这是我看今天看了移植说明后所理解的东西,当然还得细致的对代码进行分析,特别是osintctxsw()代码的分析,虽然移植的代码大体是遵从了uc/osII的编码规范,但对于arm的多种处理器模式移植代码有特别的改变,以实现cpu时间和ram的利用。

04

嵌入式开发中静态代码分析器的七种用途

当前标准的C语言编译器存在普遍只能找出代码中潜在的缺陷,而对程序方案设计并没有效。使用静态代码分析器有助于提升固件和捕获编译器难以察觉的问题。以下是每一位嵌入式软件开发工程师都应该熟悉的静态代码编译器的七种用法。 标准的C语言编译器在检查语法错误方面做得很好,并且能将其编译成可执行的程序。如果代码被编译成功,编译器就会默认一切都很好,但可能还是会存在许多的错误。静态代码分析器在下列场景中就能大展身手。 用途#1 - 捕捉潜在的漏洞 静态代码分析器广为人知的用途之一就是扫描软件中潜在的问题和漏洞。这些问题小到

07

C语言 动态内存分配

动态内存分配涉及到堆栈的概念:堆栈是两种数据结构。堆栈都是数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 在C语言中,全局变量分配在内存中的静态存储区,非静态的局部变量(包括形参)是分配在内存的动态存储区,该存储区被称为栈。除此之外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要是随时释放。这些诗句临时存在一个特别的自由存储区,称为堆区。 系统提供了四个库函数来实现内存的动态分配: (1)malloc(size) 在内存的动态存储区中分配一个长度为size的连续空间。 (2)calloc(n,size) 在内存的动态存储区中分配n个长度为size的连续空间。 (3)free§ 释放指针变量p做指向的动态空间。 (4)realloc(p,size) 将指针变量p指向的动态空间大小改变为size。 举个栗子:

02

改变开发者编码思维的六种编程范式

译者注:本文介绍了六种编程范式,提到了不少小众语言,作者希望借此让大家更多的了解一些非主流的编程范式,进而改变对编程的看法。以下为译文: 时不时地,我会发现一些编程语言所做的一些与众不同的事情,也因此改变了我对编码的看法。在本文,我将把这些发现分享给大家。 这不是“函数式编程将改变世界”的那种陈词滥调的博客文章,这篇文章列举的内容更加深奥。我敢打赌大部分读者都没有听说过下面这些语言和范式,所以我希望大家能像我当初一样,带着兴趣去学习这些新概念,并从中找到乐趣。 注:对于下面讲到的大多数语言,我拥有的经验

010

VC 在调用main函数之前的操作

title: VC 在调用main函数之前的操作 tags: [VC++, 反汇编, C++实现原理] date: 2018-09-16 10:36:23 categories: VC++反汇编分析 keywords: VC++, 反汇编, C++实现原理, main函数调用, VC 运行环境初始化 --- 在C/C++语言中规定,程序是从main函数开始,也就是C/C++语言中以main函数作为程序的入口,但是操作系统是如何加载这个main函数的呢,程序真正的入口是否是main函数呢?本文主要围绕这个主题,通过逆向的方式来探讨这个问题。本文的所有环境都是在xp上的,IDE主要使用IDA 与 VC++ 6.0。为何不选更高版本的编译器,为何不在Windows 7或者更高版本的Windows上实验呢?我觉得主要是VC6更能体现程序的原始行为,想一些更高版本的VS 它可能会做一些优化与检查,从而造成反汇编生成的代码过于复杂不利于学习,当逆向的功力更深之后肯定得去分析新版本VS 生成的代码,至于现在,我的水平不够只能看看VC6 生成的代码 首先通过VC 6编写这么一个简单的程序

02
领券