LPC2148-UCOS-2.80-移植文件分析之OS_CPU_C_C
今天比较累,先占各座,过两天在完善,下面是周立功公司给的注释
Read More …
今天比较累,先占各座,过两天在完善,下面是周立功公司给的注释
Read More …
继续看OS_CPU_A.S中的代码,其中软件中断函数SoftwareInterrupt在上一节已近分析过了,还
剩两个软件异常中断处理函数OSIntCtxSw和OSStarHighRdy,下面结合原文件继续分析
Read More …
郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。。。55
一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。。真是够倒霉的。
。。。今天在工作之前先把昨天的笔记重新回顾一下,其实后来想想也许是件好事,可以让我今
天在不借助其他的帮助的情况下自己看代码自己跟自己讲一遍,其实很多看起来是倒霉看起来是
灰心的事情把我们的观点换一下那么就是一件好事。。这样的情况发生在我的身上已经挺多次了
。。。。好啦,废话不说,开始补昨天的日记UCOS-II的移植需要提供2,3个文件分别介绍如下:
Read More …
郁闷,昨天晚上边看移植代码边记下来的笔记不知道怎么回事在保存的时候竟然不见了。。。55
一个晚上工作的结果啊,关键是我是第一次也是正式开始移植的学习之路啊。。真是够倒霉的。
。。。今天在工作之前先把昨天的笔记重新回顾一下,其实后来想想也许是件好事,可以让我今
天在不借助其他的帮助的情况下自己看代码自己跟自己讲一遍,其实很多看起来是倒霉看起来是
灰心的事情把我们的观点换一下那么就是一件好事。。这样的情况发生在我的身上已经挺多次了
。。。。好啦,废话不说,开始补昨天的日记UCOS-II的移植需要提供2,3个文件分别介绍如下:
Read More …
1. 设置OS_CPU.H 中与处理器和编译器相关的代码 /********************************************************************
*
* 与编译器相关的数据类型
*********************************************************************
/
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; //8 位无符号整数
typedef signed char INT8S; //8 位有符号整数
typedef unsigned int INT16U; //16 位无符号整数
typedef signed int INT16S; //16 位有符号整数
typedef unsigned long INT32U; //32 位无符号整数
typedef signed long INT32S; //32 位有符号整数
typedef float FP32; //单精度浮点数
typedef double FP64; //双精度浮点数
typedef unsigned int OS_STK; //堆栈入口宽度为16 位
#define BYTE INT8S //字节型
#define UBYTE INT8U //为了与uC/OS V1.xx.兼容
#define WORD INT16S // … uC/OS-II.
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。
1,防止一个头文件被重复包含
#ifndef COMDEF_H
#define COMDEF_H
//头文件内容
#endif
2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。
typedef unsigned char boolean; /* Boolean value type. */
typedef unsigned long int uint32; /* Unsigned 32 bit value */
typedef unsigned short uint16; /* Unsigned 16 bit value */
typedef unsigned char uint8; /* Unsigned 8 bit value */
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
接连写了几个单片机程序以后,突然发现模块化设计不论对代码的understandable还是对于程序的portable都是那么的重要,而条件编译则可以大大简化程序的阅读、调试、移植。
1、各个模块code和header的写法
本文转录自 www.yesky.com
模块划分
模块划分的”划”是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:
(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;
(2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;
(3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
(4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:
Powered by WordPress | Blue Weed by Blog Oh! Blog | Entries (RSS) and Comments (RSS).