C语言
木十化
尽量写多点哈。
展开
-
C语言好难——结构体的内存分配
结构体的内存分配,我个人是觉得比较蛋疼的,它有一个需要遵循的原则,地址对齐,也有人称为内存对齐,叫法没关系,反正我只是“拿来”,会用就行。 好了,先有这么一个概念,什么是内存对齐,先丢一边。……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。 设char占用1个字节,int占用4个字节。 那么问题1原创 2016-10-09 23:30:48 · 3954 阅读 · 0 评论 -
C语言好难 - float如何转换为int(本文代码有误,后续改,莫被误导)
前几天在微信群看到有人在问如何将float转换成int类型,我很想当然的说了一个解决办法,直接指针指向float类型变量地址,然后将该float变量的内存地址的内容拷贝到int变量地址上。很自然的被人怼了,然后就不服啊,直接提各种内存理论,想回怼过去,然后我自己仿真跑了一下,额,我是错的,真实的类型转换方法我会在下面说明。int ftoi(float *para){ unsigned i...原创 2018-07-30 00:00:32 · 3542 阅读 · 0 评论 -
M-RTOS V1.0 Release
M-RTOS,基于cotrx-m3芯片写的,当前1.0版本实现的功能如下。 1、多任务调度,可抢占的内核,不支持时间片轮转调度。额,不对,把每个任务的优先级定为一致也可以实现轮转调度。 2、可配置时间片,默认10ms。 3、任务栈与内核栈分离。 4、空闲任务,但是没有实现钩子函数。 5、系统延时,系统延时的延时单位会比设定的大0到1个时间片。 6、互斥信...原创 2018-07-15 10:57:22 · 433 阅读 · 0 评论 -
C语言好难——volatile的一种解释
a=d; b=d; c=d;如果d不加volatile,翻译为"读d,写a、b、c"。加volatile,翻译为"读d,写a;读d,写b;读d,写c."写于 2018年4月15日夜深圳原创 2018-04-15 21:16:34 · 406 阅读 · 0 评论 -
单片机的动态内存管理——自己实现heap管理
两年前一位同事和我说过,单片机不能实现动态内存管理,两天后我在keil上利用malloc()在coterx m3芯片上实现了一个链表,然后把代码给他看了,对固执的人摆事实好过讲道理。之后我觉得使用malloc()并不能满足我的需求,然后想自己实现一个heap管理。这就是这篇文章的由来,这是我今天下午突然想到的一种简单的方法,其实这很没有意义,因为我能想到的东西,别人都已经做出来了。嗯,姑且当是一个...原创 2018-03-20 19:45:30 · 5599 阅读 · 8 评论 -
C语言好难——强制地址跳转
#define jump(TargetAddr ) (*((void(*)())(TargetAddr)))()第一个(( void( * )( )) ,意思为强制类型转换为一个无形参,无返回值的函数指针,(*(TargetAddr))为跳转地址,但是函数指针变量不能为常数所以要加((void( * )( )) 进行强制类型转换。最后一个()为执行的意思。整一条指定的目的是为了跳转原创 2017-03-22 08:28:13 · 2517 阅读 · 0 评论 -
c语言好难——关于形参传递中有const的情况
这是在逛论坛的时候看到的一个问题。char *ptr[];void demo(const char* p[]){;}int main(void){demo(prt);}编译后报错,..\APP\main.c(37): error: #167: argument of type "char *" is incompatible wit原创 2017-02-06 14:17:17 · 7824 阅读 · 1 评论 -
C语言好难——几个宏定义__DATE__,__TIME__,__FILE__,__LINE__
ANSI C里面有几个宏定义,可以在编译文件的时候简化程序__LINE__:当前源代码的行号__FILE__:当前源文件的文件名__DATE__:当前编译日期__TIME__:当前编译时间__STDC__:是否符合ANSI标准备注:宏定义的左右都有两个下划线做个试验,用GCC工具将上面的宏打印出来结果如图。写于2017年3月19日原创 2017-03-19 21:20:41 · 5298 阅读 · 0 评论 -
C语言好难——在头文件中定义const变量
在头文件中定义const不会有多变量的警告或错误,如果该头文件被大量包含会造成rom空间的浪费。通过查看*.i文件的展开呢,可以发现每个.i文件都会有相应的变量展开。查看*.map文件,能查看到该变量的多个地址分配。在预编译的时候如果在头文件定义了const变量,每一个包含该头文件的c文件都会将其展开,而在编译的时候不会报错,因为这符合语法规则,每一个包含这个头文件的*.c文件都会编译原创 2017-02-06 08:21:57 · 2730 阅读 · 0 评论 -
栈使用量的一种检测方法
我又有想法辣,,今天的想法的目的是实现栈的使用量的检测方法。1、利用*.map文件定位栈顶地址,并且得到栈的使用量大小;2、定义一个全局变量,用于存储栈区内存上电时候的默认值,这个默认值我定义为栈顶内存值;3、在大循环里面从栈顶地址开始,将栈内存里面的值和第二步中的值进行比较,如果不相等,则认为该栈的内存被使用了,记下该地址值,用栈底地址和该地址相减,然后再和栈使用量大小相除,得到栈的原创 2016-11-03 22:28:40 · 2071 阅读 · 0 评论 -
C语言好难——内存分配概述
如果从大一算起,学习C语言已经超过5个年头。我之前一直以为我的C学得还行,直到工作中我才知道,原来我学的只是皮毛。因此有了这篇东东——C语言好难,我希望写一个系列,把我工作中遇到的我觉得有意思的东西写下来,从内存篇开始。内存,这个话题好大,我先说说在单片机里面的大致内存分配,看看下面的图片。举个栗子://ma.c #define unsigned char uint8原创 2016-10-09 21:12:12 · 897 阅读 · 0 评论 -
c语言好难 - 队列的实现
Talk is cheap, show you the fucking source code.#define NULL 0#define FALUSE -1struct queue_def{ unsigned char *head; unsigned char *tail; unsigned char *buffer; unsigned char block_siz...原创 2018-12-19 16:26:19 · 370 阅读 · 0 评论