宏定义

uboot研读笔记 | 09 - 移植uboot 2012.04到JZ2440(设置默认环境变量参数)

╄→尐↘猪︶ㄣ 提交于 2020-03-01 10:40:29
1. 定位环境变量问题 目前移植的uboot支持SDRAM、Nor Flash、Nand Flash、DM9000网卡,但是还有一行警告没有处理: 这行警告的原因是没有设置环境变量参数,所以uboot启动时读取校验参数失败,使用默认的参数。 通过搜索这行日志内容找到所在位置: 在 common/env_common.c 文件中找到该行代码所在函数: 该函数中主要使用的 default_environment 数组,接着查看该数组内容,同样定义在该文件中,该数组的功能是 根据我们定义的宏定义来设置默认环境变量参数 。 2. 设置默认参数 在单板配置文件 include/configs/smdk2440.h 中配置这些相关宏定义: 2.1. 内核启动相关 CONFIG_BOOTARGS 宏定义是启动内核时要传入的参数,添加配置如下: /* 内核启动相关ENV */ # define CONFIG_BOOTARGS "console=ttySAC0,115200 root=/dev/mtdblock3" # define CONFIG_BOOTCOMMAND "nand read 30000000 kernel 0x200000;bootm 30000000" 2.2. 网络相关 /* 网络相关ENV */ # define CONFIG_NETMASK 255.255.255.0 #

嵌入式C语言编程小知识总结

試著忘記壹切 提交于 2020-03-01 08:38:58
嵌入式C语言编程小知识总结 1. 流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。 2. 在LPC2200系列中: 可以通过过下面的程序延迟10毫秒: for(i=0;i<200;i++) { for(j=0;j<200;j++); } 3. 通过下面语句将一个16位的变量放在两个8位的变量中。 //IP数据报总长度高字节 IpHeadUint8[10]=(IpHead.e_ip.Crc&0xff00)>>8; //IP数据报总长度低字节 IpHeadUint8[11]=IpHead.e_ip.Crc&0x00ff; 4. 在对全部数组元素赋初值时,可以不指定数组长度。 eg;inta[]={1,2,3,4,5}; 但如果当输出第a[5]以上的元素时,系统回输出随机数值,所以使用此方法时,不能使用超过初始值元素以上的元素。 5. 由于ADS先天性的对printf不支持;因此不便于我们调试,可以利用串口输出来代替printf来调试。 6. 用或运算,可使某位置为1,其它位不变 eg: PINSEL0 |= 0x00000005; //设置串口引脚 使第0位和第二位置一,其他位不变。 7

iOS项目管理:目录结构和开发流程

泪湿孤枕 提交于 2020-02-28 09:08:49
iOS项目管理:目录结构和开发流程 最近正在做一个大版本的更新,现在在重构中。。。。 发现很多人在一个项目的开始不知道开发流程是什么,也不是非常清晰的知道一个项目该有目录结构。如果项目小或者是在做第一版的时候都还能应付的来,但一次比一次更新的更困难。原因就是在你项目的刚开始一个合理的目录结构,没有一个系统管理。时间久了类多了,就一头雾水。 目录结构 AppDelegate Models Macro General Helpers Utils Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化。 AppDelegate 这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来。 Models 这个目录下放一些与数据相关的Model文件,里面大概是这样: Models |- BaseModel.h |- BaseModel.m |- CollectionModel.h |- CollectionModel.m ... Macro 这个目录下放了整个应用会用到的宏定义,里面大概是这样: Macro |- AppMacro.h |- NotificationMacro.h |- VendorMacro.h |- UtilsMacro.h ... AppMacro.h

预处理与宏定义__笔记

浪尽此生 提交于 2020-02-26 12:39:25
2017-09-18 10:45:21 预处理 1.预处理的指令和功能 以“#”开头的语句 #include 文件包含 #include <stdio.h> 在标准库下面找 #include "stdio.h" 在当前工作路径下查找 自定义头文件的包含形式 区别:查找的路径不相同 #define 宏定义 不带参数的宏和带参数的宏 #define PI 3.14 #define MAX(a,b) a>b?a:b better-> MAX(a,b) (a)>(b)?(a):(b) int result = MAX(3,5); 3>5?3:5; 操作符 ## #define VAR(n) v##n 当使用这种方式应用宏: VAR(1),预处理时,将会得到:v1 int i; for(i = 1;i < 100;i++) int VAR(i); //int v1; int v2;int v3; 2.条件编译(后接常量表达式) #if #else #endif #if #elif #else #endif #ifdef 如果定义了 #ifndef 如果没有定义(在头文件中运用最多) 目的:防止重复定义!!! 在头文件中进行函数的声明和变量的声明,结构体的声明; 在C文件中进行变量定义,函数编写; #undef 宏名 取消宏定义 3.预定义的宏名 __DATE__ 当前源程序的创建日期 _

C++ 编译预处理

只愿长相守 提交于 2020-02-26 12:37:07
一、简介 1、编译预处理命令均以#开头,以回车符结束; 2、每条预处理命令独占一行; 3、可以出现在程序的任意位置,但通常置于源程序的开始; 4、在C++编译对源程序进行编译之前,先对程序中这些命令进行预处理; 5、C++预处理主要有三种: 文件包含、宏定义和条件编译 。 二、文件包含 1、格式 格式1:#include <filename> C++编译系统预定义的包含文件,这些文件在c++编译系统的include目录或其子目录中,通知预处理程序按系统规定路径检索文件。 格式2:#include “filename” 从当前工作目录开始查找,一般为自定义头文件。 2、预处理程序对源文件进行扫描时,将产生一个临时文件,用于存放预处理结果,当遇到#include “文件名”时,则将源文件复制到一个临时文件,并用指定的包含文件替代#include命令行。 3、 通常,头文件中声明的是共用的数据结构类型、函数原型、宏定义、全局变量 等。主要好处是对后续编程约定。 三、宏定义 1、不带参数的宏定义 #define 标示符 字符或字符串 2、带参数的宏 #define 宏名(参数表) 使用参数的字符或字符串 3、宏的作用域:从宏定义到本源程序文件结束。 终止宏作用域:#undef 宏名 如: #define PI 3.14 …… #undef PI 4、在宏定义时,宏名与左括号之间不能有空格,

C语言宏定义总结

社会主义新天地 提交于 2020-02-26 10:51:51
http://www.cnblogs.com/floerggyy/archive/2008/04/05/1138455.html 转自:http://topcool99.ycool.com/post.1797687.html 宏定义了一个代表特定内容的标识符。 预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。 宏最常见的用法是定义代表某个值的全局符号。 宏的第二种用法是定义带参数的宏,这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。 1.#define指令 #define MAX_NUM 10 int array[MAX_NUM]; for(i=0;i<MAX_NUM;i++) /*……*/ #define VERSION "Version 1.0 Copyright(c) 2003" 2.带参数的#define指令  #define IS_EVEN(n) ((n)%2==0)  #define MAX(x,y) ((x)>(y) ? (x) :(y)) #define Cube(x) (x)*(x)*(x) 可以是任何数字表达式甚至函数调用来代替参数x。 3.#运算符 #的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。例如:

宏定义

限于喜欢 提交于 2020-02-26 10:38:38
#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。(中间可以有空格或Tab?) 假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#在字符串中使用时,需要用双引号引起来,否则会当成普通的字符串进行处理。 ##被称为连接符(concatenator),用来将两个Token连接为一个Token。注意这里连接的对象是Token就行,而不一定是宏的变量。 ##这个连接符号充当的作用就是当__VAR_ARGS__为空的时候,消除前面的那个逗号。 另外,如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开 。 宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错. ##运算符可以用于类函数宏的替换部分。另外,##还可以用于类对象宏的替换部分。这个运算符把两个语言符号组合成单个语言符号。 函数式宏定义和真正的函数调用有什么不同: 1、函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。 2

iOS常用宏定义

回眸只為那壹抹淺笑 提交于 2020-02-26 10:08:41
/*--> */ /*--> */ #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/ 255.0 green:(g)/ 255.0 blue:(b)/ 255.0 alpha: 1 ] #define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/ 255.0 green:(g)/ 255.0 blue:(b)/ 255.0 alpha:(a)] #define SCREEN [[UIScreen mainScreen] bounds] #define kSpaceX 50 #define Helvetica @ "Helvetica Neue" #define HelveticaBold @ "Helvetica-Bold" #define kDocumentPath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0 ] #define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/ 255.0 green:(g)/ 255.0 blue:(b)/ 255.0 alpha: 1 ] #define

iOS日常工作之常用宏定义大全

若如初见. 提交于 2020-02-26 10:07:26
前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定义了怎么办?本人在工作中也是如此。所以在这里给大家分享一些常用的宏定义,喜欢的小伙伴可以直接在项目中使用(持续更新)! 为了大家使用方便,请点击: GitHub - 宏定义头文件下载 1.获取屏幕宽度与高度 1 2 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height 根据一个网友脱离语言提醒, 如果支持横屏可以用下面的宏: 1 2 3 4 5 6 7 8 9 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上 #define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds

iOS项目的目录结构和开发流程

柔情痞子 提交于 2020-02-25 00:43:47
iOS项目的目录结构和开发流程 网上相关的资源不多,开源的且质量还不错的iOS项目也是少之又少,最近正好跟同事合作了一个iOS项目,来说说自己的一些想法。 目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化。 AppDelegate 这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来。 Models 这个目录下放一些与数据相关的Model文件,里面大概是这样: Models |- BaseModel.h |- BaseModel.m |- CollectionModel.h |- CollectionModel.m ... Macro 这个目录下放了整个应用会用到的宏定义,里面大概是这样: Macro |- AppMacro.h |- NotificationMacro.h |- VendorMacro.h |- UtilsMacro.h ... AppMacro.h 里放app相关的宏定义,如: // 表情相关 #define EMOTION_CACHE_PATH @"cachedemotions" #define EMOTION_RECENT_USED