C程序注意点
参考网址:https://mp.weixin.qq.com/s/sgWvpKMqetU6l6th4SRJ9A
意想不到的八进制12// b为八进制int a=34, b=034;
指针加减运算123456int a=1; int *p=(int *)0x00001000; a=a+1; p=p+1; // 这里的p是指针,// p+1实际上是按照公式p+1*sizeof(int)来计算的。
比如RAM初始化零操作,如下,只有4字节空间被初始化为零
1234567unsigned int *pRAMaddr; //定义地址指针变量 // pRAMaddr+=4代码其实使pRAMaddr偏移了4*sizeof(int)=16个字节for(pRAMaddr=StartAddr;pRAMaddr<EndAddr;pRAMaddr+=4) { *pRAMaddr=0x00000000; //指定RAM地址清零 // 这里清除了四个字节}
关键字sizeofsizeof是一个关键字,需要注意的是,使用sizeo ...
软件开发中各种开发模型的优缺点
参考网址:软件开发的几种常见模型(转自于葵阳林四的博客) - 知乎 (zhihu.com)
可能新手或初级工程师不会在乎什么开发模型,管他三七二十一,直接开干。
但有经验的工程师都会考虑的比较周全,计划、需求、设计等各个环节考虑清楚才开始编码。下面就来说说软件开发中常见的开发模型。
瀑布模型该模型是由上至下一次性完成整个项目的开发方式。该模型一共分为6个阶段,如图所示:
在瀑布模型的开发过程中需要严格的按照这条线执行,只有完成当前阶段之后才能够进行下一阶段的开发任务。
优点
该模型划分出了每个阶段的检查点,当一个阶段开发完成之后,开发人员的精力可以全部的投入下个阶段,有利于提高开发效率,便于项目的管理。
比较适用于前期的软件开发与小型软件系统的开发中。
缺点
无法评估项目进度。因为不知道哪个阶段会造成项目的延期
无法适应用户的需求变更,只能等到项目完成后,用户才能够看到项目结果
快速原型模型快速原型模型与瀑布模型相反,项目初期根据用户的需求快速构建一个可以运行的系统原型,之后向用户展示,由用户进行审核,提出意见,然后逐步丰富项目需求。当需求真正确定后,才正式进行项目开发。模型如图 ...
变量初始化多种操作
参考网址:嵌入式C语言编程时,变量、数组、指针初始化的多种操作
数值初始化123int inum = 0;float fnum = 0.00f;double dnum = 0.00;
字符初始化1char ch = '\0';
字符串初始化实际上就是将字符数组中的字符都初始化为'\0'
1234567891011// 使用""实现char str[10] = "";// 使用memsetchar str[10];memset(str, 0, sizeof(str));//使用循环char str[10];for(int i = 0; i < 10; i++){ str[i] = '\0';}
一般使用memset最合适,一般采用+1的方式参考:
123char year[4+1];memset(year, 0, sizeof(year));strcpy(year,"2018");
指针初始化需要使用malloc申请动态内 ...
嵌入式相关的开源项目
参考网址:https://mp.weixin.qq.com/s/UdJbDTWrnupMGYiwvKcIyw
1.Avem这是一个轻量级无人机飞控项目。
2.Awesome-Embedded这是一个很棒的嵌入式资源汇总的项目。汇聚了各种嵌入式相关的资源:
3.soft-and-hard这是一个以物联网项目为主方向分享web开发教程,制作并演示一个物联网系统是怎么跑起来的,介绍如何学习相关知识。
4.FreeModbusFreeModbus是一款开源的Modbus协议栈,但是只有从机开源,主机源码是需要收费的。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。
5. EmbedSummary精心汇总了一些嵌入式相关资源,包括但不限于编程语言、单片机、开源项目、物联网、操作系统、Linux等资源
时间触发嵌入式系统设计模式
参考网址:时间触发嵌入式系统设计模式 第14章 笔记_abc-CSDN博客_时间触发嵌入式系统设计模式
SimpleTimer
[Linux下C实现的自定义定时器](voidAspire/Timer: Linux下C实现的自定义定时器 (github.com))
[CppTimer](berndporr/cppTimer: C++ timer: wrapper around the standard Linux C timer to make your life easier (github.com))
[simple-timer-for-c-language](ielife/simple-timer-for-c-language: high performance timer for linux (github.com))
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707 ...
注释软件
参考网址:几款注释软件推荐
javEhttp://www.jave.de/
里边的字体,图片生成挺有意思,不过需要装java
原理图https://josoansi.de/download.php
流程图ascii-art
有很多有意思的注释,可知看一下直接复制粘贴,很舒爽
CodePlotter 1.6 - Add and edit diagrams in your code with this ‘Visio-like’ tool - CodeProject
类似于”Visio”的一款工具
回调函数
参考网站c语言回调函数
模板12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <stdio.h>#include <stdlib.h>/**************************************** * 函数指针结构体 ***************************************/typedef struct _OP { float (*p_add)(float, float); float (*p_sub)(float, float); float (*p_mul)(float, float); float (*p_div)(float, float); } OP; /*********************************** ...
局部全局坐标转换
局部全局坐标转换模型
公式:
ROS 中里程计的计算代码理解12345678double dt = (current_time - last_time).toSec();double delta_x = (vx * cos(th) - vy * sin(th)) * dt;double delta_y = (vx * sin(th) + vy * cos(th)) * dt;double delta_th = vth * dt;x += delta_x;y += delta_y;th += delta_th;
概率机器人
参考网址:概率机器人
5.机器人运动模型速度模型(概率运动规划)闭式算法
采样算法
数学推导精确运动
真实运动加入扰动,模型表达为
加入噪声,求得概率公式为:
里程计模型(估计)模型为:
闭式算法
采样算法
数学推导三次转换:
加入噪声:
求出坐标:
求得最终概率:
STL库
参考网址:C++中STL用法超详细总结
MyTinySTL
STL中六大组件:容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;
迭代器(Iterator),提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象;算法(Algorithm),是用来操作容器中的数据的模板函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象,函数本身与他们操作的数据的结构和类型无关,因此他们可以在从简单数组到高度复杂容器的任何数据结构上使用;仿函数(Functor)适配器(Adaptor)分配器(allocator)
2.1 容器STL中的容器有队列容器和关联容器,容器适配器(congtainer adapters:stack,queue,prior ...