月半弯刊第1期 | 有深度的bug,有趣的问题
关注、星标公众号,直达精彩内容
ID:技术让梦想更伟大
作者:李肖遥
月半弯刊
月半弯刊是公众号半个月推文汇总的一种形式,主要分享以下几点
为阶段性总结文章的错误以及读者的建议,让一些错过推文的朋友可以根据自己的兴趣选择性的去读一些文章。
分享半月期间工作中遇到的难点,以及网友提出的疑问和网上一些有趣的问题,可以帮助我们一起学习进步。
职场中的一些杂谈,比如面试,现场调试,团建等等,小小分享,不为吐槽就是给大家图个乐。
本刊原创汇总,肝了6篇
回顾: 这篇文章花了两天才写好,之前写过一篇关于编译效率的,有读者留言说达夫设备,我最近好好学习了下,也参考了网上的文章,但是大都讲的有点断片,故自己根据理解重新整理了一下,算是逻辑很好的。
回顾: 这仅仅是开场白,但是后面要讲到内存管理,字节对齐的一块,而这个我就单独水了一篇,实际上也可以开发我们的思维,代码直接复制去编译吧,有答案。
回顾: 这是一篇水文,纯属娱乐,没想到看得人还不少
回顾: 我相信嵌入式开发中,越是大型项目,越会用到面对对象编程,同样的C开发为主的嵌入式编程中,也要有这种思想。当然文章最后参考了OOPC那本书,没办法,我也找不到或者不想找到更好的例子。
回顾: 如果是大学生可以看看,当年我参加的电赛,校内唯二的一等奖
回顾: 这篇对我来说估计是一篇爆文了,平时阅读在1500以内的,这篇有双倍的阅读量,很多大佬在留言区百字评论,发表观点,分享经验。但是最终我还是觉得自己的看法很肤浅,只想告诫大家:相信自己的路。
选了本刊中一些读者提问的问题
私信我的朋友有时候会很多,我没有一一回复,请见谅。
在我的知识星球里,我也会认真回答问题并做好记录,如果您有兴趣,相信你可以找得到。
下面我截图了一些聊天记录开头处,主要是想把大家疑惑的问题汇总一下,帮助我们提高技术,当然大部分问我的问题,我其实都不会。
关于printf与多线程的故事
提问者纠结于现场环境与实验室测试环境不一样,实验室测试没问题,现场就不行?
这个很正常,在后面的交流当中,也是确定了问题所在,关于printf与多线程,这与printf设计时的不可重入性有关。
所以当我们在进行多线程编程的时候要注意这一点,另外实验室条件与实际环境肯定是有差别的,保持好心态,总会解决。
FreeRTOS+Lwip运行几分钟之后挂掉
这个问题比较复杂,总的来说,可能与内存泄漏有关系,关于内存泄漏,是我们编程中的难点。
另外malloc不仅会要用,而且还要知根知底,动态申请的内存是在哪里?连续吗?等等问题
关于宏定义的一些问题
静态变量,局部变量等需要了解,自行查询;宏定义的问题在我们写代码中用多个很多,用的好的话,整个代码也很整洁。
嵌入式架构的问题
在我们嵌入式编程中,有些项目是有很多模块的,那么怎么写一个好的架构呢?这点很重要。
一旦又有新的升级或者移植,当结构搭建的好的话,是很方便移植的,也会节约项目开发时间。
总体来说,要有架构的概念,才能体现出编程之美!
算法的问题
一个哥们写了关于排序算法的文档,打算做视频。
我说下排序算法,在数据结构中,我们常常用到,面试的时候面试官经常会问:你给我写个冒泡排序瞅瞅?
我曾经就没写出来,错失了一个年薪百万机会,不说了,要去补习数据结构了!
你迷茫了吗
谁的青春不迷茫呢?进入职场的我也很迷茫,我没什么鸡汤!
如果你来自农村,家庭一般,或者你想出人头地,那么就努力吧!现在社会变化太快,我们阅历少很难抓住风口,唯一能做的就是把空闲时间拿来提高自己
字符串切割?
简单粗暴上代码吧
//来源:技术让梦想更伟大
//作者:李肖遥
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//返回一个 char *arr[], size为返回数组的长度
char **cExplode(char sep, const char *str, int *size)
{
int count = 0, i;
for(i = 0; i < strlen(str); i++)
{
if (str[i] == sep)
{
count ++;
}
}
char **ret = calloc(++count, sizeof(char *));
int lastindex = -1;
int j = 0;
for(i = 0; i < strlen(str); i++)
{
if (str[i] == sep)
{
//分配子串长度+1的内存空间
ret[j] = calloc(i - lastindex, sizeof(char));
memcpy(ret[j], str + lastindex + 1, i - lastindex - 1);
j++;
lastindex = i;
}
}
//处理最后一个子字符串
if (lastindex <= strlen(str) - 1)
{
ret[j] = calloc(strlen(str) - lastindex, sizeof(char));
memcpy(ret[j], str + lastindex + 1, strlen(str) - 1 - lastindex);
j++;
}
*size = j;
return ret;
}
int main()
{
int size;
char **ret = cExplode(',', "aaa,fgg,ggg", &size);
int i;
for(i = 0; i < size; i++)
{
printf("%s\n", ret[i]);
free(ret[i]);
}
free(ret);
return 0;
}
职场中的一些杂谈
看到这里可以投个票,希望能转发更多人来参与。
最后
因为此前一直在论坛、社区、博客中混迹江湖,没有好好总结,在做公众号大半年以来,也有自己的收获,坚持输出高质量的干货才是最重要的。
同时也希望大家能够提提建议,帮助下这个号能够发展更好,改版之后小号难存,如果对您有价值,可以星标公众号,在看转发也是对我的支持,感谢大家。
推荐阅读:
嵌入式编程专辑Linux 内核专辑
Linux 驱动专辑C/C++编程专辑
关注微信公众号『技术让梦想更伟大』,后台回复“m”查看更多内容,回复“加群”加入技术交流群。
长按前往图中包含的公众号关注
本文地址:https://blog.csdn.net/u012846795/article/details/107421550
上一篇: 使用python实现视频与图片相互转换
下一篇: 菜鸟福音 60条笔记本电脑使用经典技巧