宏定义

IOS项目目录结构和开发流程

倾然丶 夕夏残阳落幕 提交于 2020-01-29 03:51:18
网上相关的资源不多,开源的且质量还不错的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 @

IOS项目目录结构和开发流程

China☆狼群 提交于 2020-01-28 07:56:51
网上相关的资源不多,开源的且质量还不错的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 @

C语言中define的用法

风格不统一 提交于 2020-01-27 10:24:26
define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。 预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等。一般都放在源文件的前面,它们称为预处理部分。 所谓预处理是指在进行编译之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 宏的定义 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 在C或C++语言中,“宏”分为有参数和无参数两种。 无参数宏定义 无参数宏就是不带参数,其定义的一般形式为:   #define 标识符 字符串   “标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。   例如:   #define PI 3.14 它的作用是指定标识符PI来代替常数3.14。在编写源程序时,所有用到3.14的地方都可用PI代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用3.14去置换所有的宏名PI,然后再进行编译。

计算球的体积 题解

久未见 提交于 2020-01-26 20:37:32
1.#define 命令是c语言中的一个宏定义命令 该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义; (1)简单的宏定义: #define <宏名><字符串> #define PI 3.1415926 (2)带参数的宏定义: #define <宏名>(<参数表>)<宏体> #define A(x) x 一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这成为宏替换,替换后才进行编译,宏替换是简单 的替换。 个参数加上括号,并在整个宏体上加上括号。 来源: https://www.cnblogs.com/hrlsm/p/12234740.html

#define用法详解

偶尔善良 提交于 2020-01-25 22:36:18
1.#define 的作用   在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。   在C或C++语言中,“宏”分为有参数和无参数两种。 2. 无参宏定义   无参宏的宏名后不带参数。   其定义的一般形式为:   #define 标识符 字符串    其中的“ # ” 表示这是一条预处理命令。 凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。   例如:   #define M (a+b)   它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译。   程序1: #define M (a+b)   main(){   int s,y;   printf("input a number: ");   scanf("%d",&y);   s=M*M;   printf("s=%d\n",s); }   上例程序中首先进行宏定义

FreeRTOS——1

北战南征 提交于 2020-01-24 03:37:47
以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的特点 FreeRTOS 的主要特点如下: 1. 支持抢占式调度,合作式调度和时间片调度。 2. SafeRTOS 作为 FreeRTOS 的衍生品大大提高了 FreeRTOS 在代码完整性方面的信心。 3. 用于低功耗的 Tickless 模式。 4. 支持 35 种系统架构。 5. FreeRTOS-MPU 支持 M3/M4/M7 内核的 MPU(内存保护单元)。 6. 设计的简单易用,典型的内核使用大小在 4k-9k。 7. 移植非常简单,代码主要用 C 编写。 8. 同时支持合作式和抢占式任务。 9. 支持消息队列、 二值信号量、 计数信号量、 递归信号量和互斥信号量,可用于任务与任务间的消息传 递和同步,任务与中断间的消息传递和同步。 10. 优先级继承方式的互斥信号量。 11. 高效的软件定时器。 12. 强大的跟踪执行函数。 13. 堆栈溢出检查。 14. 提供丰富的,配置好的工程例子。 15. 提供论坛技术支持,有可选的商业支持和许可版本。 16. 任务的数量不限。 17. 任务优先级数量不限。 18. 多个任务可以分配相同优先级,即支持时间片调度。 19. 免费的开发工具。 20. 免费的嵌入式软件源码。 21. 免版权费。 FreeRTOS 的编码标准

FreeRTOS 中断优先级配置(重要)

為{幸葍}努か 提交于 2020-01-24 03:01:52
以下转载自安富莱电子: http://forum.armfly.com/forum.php NVIC 的全称是 Nested vectored interrupt controller,即嵌套向量中断控制器。 对于 M3 和 M4 内核的 MCU,每个中断的优先级都是用寄存器中的 8 位来设置的。 8 位的话就可以 设置 2^8 = 256 级中断,实际中用不了这么多,所以芯片厂商根据自己生产的芯片做出了调整。比如 ST 的 STM32F1xx 和 F4xx 只使用了这个 8 位中的高四位[7:4],低四位取零,这样 2^4=16,只能表示 16 级中断嵌套。 对于这个 NVIC,有个重要的知识点就是优先级分组,抢占优先级和子优先级,下面就以 STM32 为 例进行介绍,STM32F1xx 和 F4xx 都是只使用了这个 8 位寄存器的高四位[7:4]。 从上面的表格可以看出,STM32 支持 5 种优先级分组,系统上电复位后,默认使用的是优先级分组 0,也就是没有抢占式优先级,只有子优先级,关于这个抢占优先级和这个子优先级有几点一定要说清楚。  具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中 断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。  在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来

UCOSII在STM32F1上的移植

北战南征 提交于 2020-01-22 05:37:51
UCOSII在STM32F1上的移植    首先准备好一份STM32F1的工程、UCOSII源码。   在准备好的工程中新建一个“UCOSII”文件夹(或者取其它名字也行);       UCOSII文件夹用来存放有关UCOSII的文件,UCOS相关的文件也有几种不同用途的类型,在UCOSII文件夹中继续新建几个文件夹,用来存放不同作用的文件,我这边新建的是:“CORE”、“CONFIG”、“PORT”三个文件夹;   文件夹及文件都准备好后,打开工程,将上述文件及头文件都添加到工程中,头文件路径也包含下:    说明:“ CORE ”文件夹下放的是UCOSII源码,“ CONFIG ”文件夹下放的是UCOSII配置文件,其中的“ os_cfg.h ”文件中通过宏定义配置了大量参数,在此,举个例子说明下,例子中的这个宏定义也是非常重要的一个,“ OS_TICKS_PER_SEC ”,这个宏定义定义的是心跳包,如图所示: ,这句话的意思就是每秒钟有200次心跳; “ PORT ”文件夹下放的是一些需要根据不同芯片来使用或设置不同参数等这类文件的,比如其中的一个汇编文件: 如果是新手,这其中的文件的作用可以先不用深究,重点是“ CORE ”文件夹下的那些源码。   上述工作做完后就开始编译,如果此时编译出错,那就查原因,改正错误

C: 笔记整理7: 编译预处理命令 (总复习)

自作多情 提交于 2020-01-21 07:35:56
笔记整理7: 编译预处理命令 C语言中除了有说明语句和可执行语句以外,还用编译预处理命令。按我的理解, 其作用就是使画面更加简洁,程序更加灵活 。需要注意的是,其是编译系统在对源程序编译为目标程序之前进行的。所以它最先开始喔。 预处理命令 宏定义 文件包含 条件编译 不带参数的 带参数的 宏定义 1,不带参数的宏定义 #include 宏名 宏体 注意: 1,宏名为区别于变量,一般用大写字母表示。 2,在预处理阶段,即对源程序进行编译之前,将源程序的所有宏名都用宏体替换。 3, 宏体是什么样子,替换时就是什么样子 。(这里注意有无括号的区别) 4,程序中出现的""内的宏名一律当作 普通字符串 处理。 5,宏定义无须加;否则替换后,可能会报错。(C语言不检查) 6,宏定义时,可以使用以定义过的宏名,即嵌套。 例: #include <stdio.h> #define N 20 #define M N-5 int c; c=20*M; printf("%d",c); 这里输出的即是20*20-5,而非20*(20-5),二者差距还是挺大的 2,带参数的宏定义 #include 宏名(参数列表) 宏体 注意: 1,这里的参数列表和讲函数时类似,即实参。而宏体所指定的参数即是形参。运用时先将实参带入形参,再进行宏替换。 2, 宏名后一定不要加空格 ,否则会当成不带参数的宏定义进行处理。

C/C++笔记

和自甴很熟 提交于 2020-01-18 14:48:49
1宏定义 在宏方法中实现换行,添加反斜杠 #include<stdio.h> #define MAX(A,B) \ A>B?A:B int main(){ printf("Hello,%d\n",MAX(10,20)); return 0; } 宏定义在编译阶段就已经将定义的代码动态替换了,不影响运行速度 不需要指定类型 define没有类型检查机制 const有类型检查机制 宏定义只做替换 来源: https://www.cnblogs.com/alwayszzj/p/12208857.html