从事嵌入式软件开发需要学什么开发要学哪些课程?

要学c语言,arm内核的单片机,linux,电路基础。如果自学有难度,又没有项目可以做,可以了解下信盈达的嵌入式,信盈达是一家集生产、研发和职业教育为一体的高新技术企业,证书编号:GR202044203588,主营业务:方案设计、教研设备和职业教育。在深圳,北京,上海,济南,郑州,西安,成都全国12个实训中心。信盈达是做方案设计起家的,帮华为、大疆、中国南车、中国高铁、银行等等很多企业做过方案设计(所有方案设计均有方案设计合作协议和合同),现在也还在帮许多企业做方案设计,积累了大量的更丰富的实战项目经验和产品研发经验。项目非常新,贴近时代,可选项目非常多,课程(80%项目实战)项目实战含金量高,就业更有保障,全程双平台教学(A和M),超全的超详细的linux全套教学(从上层应用到中间层到底层内核驱动都学。学的深,学的细),职业教育是我们其中的一个业务板块。感兴趣可以和我交流。搜TYXluck000
入职快一年了,也回顾一下这一年补的东西1.
首先编程语言,C和C++2.
linux操作系统命令行,最简单的,ls,cd,mkdir,touch,grep,ps,top,dd,这些命令,熟悉。3.
linux环境下的vim文本编辑器,怎么插入,怎么复制粘贴,怎么退出保存,也是非常基本的操作。4.
《程序员的自我修养》,知道.a,.so,.dll是什么类型的文件,里面长什么样子,有哪些段?可执行文件又是什么?5.
Makefile怎么写,怎么一次性编所有的.c和.cpp文件?怎么生成.a
.so以及得到可执行文件6.
操作系统,什么是进程线程?怎么加锁?在哪里加?为什么要加?7.
《Unix环境高级编程》……………………………………………………………入职一年半了8.
操作系统概念,进程,设备管理,总线,内存,虚拟内存,,,,,9.
计算机网络自顶向下方法,网络体系的分层,应用层,传输层,很多很多层,每一层都有各自的协议,,,,,,,技术栈更新中…
文章下方附学习资源,自助领取。之前为了方便测试部门保存一些测试数据,需要临时开发一个简单的nanomsg server,与板子端的client在局域网内进行通信,接收client数据并保存。关于nanomsg的简单使用介绍可查看往期文章:一个实用通信库的简单使用分享作为server端,需要绑定电脑的IP,不同的电脑IP是不一样的,所以使用不同的电脑时需要修改IP才能正常使用这个server程序。在不需要重新编译程序的情况下,有如下两种方法可以满足这个需求:把IP写在配置文件里,比如ini格式的配置文件里,然后server程序读取配置文件里的IP,再进行绑定。server程序自动获取IP地址并绑定。下面分别使用这两种方法:从配置文件中读取IP地址配置文件的格式有很多,如JSON、INI等。这里我选用的是INI格式的配置文件,.ini 文件是 Initialization File 的缩写,即初始化文件。INI文件由节、键、值组成,注解使用分号表示(;)。例如:
[Section1 Name]
KeyName1_1=value1_1
;这是注释
KeyName1_2=value1_2
[Section2 Name]
KeyName2_1=value2_1
KeyName2_2=value2_2这里我们使用inih解析器来对INI文件进行解析。inih:一个C 语言编写的 INI 文件解析器。inih解析器的地址:https://github.com/benhoyt/inih同时,inih解析器也已经被收录于大杂烩资源汇总贴中:https://gitee.com/zhengnianli/EmbedSummaryinih的使用很简单,下面一起来看一下。下载得到的inih内容如图所示:把 ini.c 与 ini.h 放到我们的工程下即可。这里我们使用一个测试工程:同时,新建一个 ip.ini 文件存放于工程目录下。ip.ini 文件的内容如:[ip]
;Section1
ip_addr = 192.168.1.103
[test]
;Section2
name = ZhengN
num
= 66
下面我们编写代码test.c来解析这个文件:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ini.h"
typedef struct
{
const char* ip_addr;
const char* name;
int num;
} configuration;
static int handler(void* user, const char* section, const char* name,
const char* value)
{
configuration* pconfig = (configuration*)user;
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
if (MATCH("ip", "ip_addr"))
{
pconfig->ip_addr = strdup(value);
}
else if (MATCH("test", "name"))
{
pconfig->name = strdup(value);
}
else if (MATCH("test", "num"))
{
pconfig->num = atoi(value);
}
else
{
return 0;
/* unknown section/name, error */
}
return 1;
}
int main(int argc, char* argv[])
{
configuration config;
config.ip_addr = NULL;
/* set defaults */
config.name = NULL;
config.num = 0;
if (ini_parse("ip.ini", handler, &config) < 0)
{
printf("Can't load 'ip.ini'\n");
return 1;
}
printf("Config loaded from 'ip.ini': ip_addr = %s, name = %s, num = %d\n",
config.ip_addr, config.name, config.num);
if (config.ip_addr)
free((void*)config.ip_addr);
if (config.name)
free((void*)config.name);
return 0;
}3年嵌入式物联网学习资源整理分享:C语言、Linux开发、数据结构;软件开发,STM32单片机、ARM硬件开发、物联网通信开发、综合项目开发教程资料;笔试面试真题。点击下方插件免费领取↓↓↓解析方法很简单(可参考 inih/examples 下的demo,我们这里也是模仿这个demo来做解析的):构造一个配置结构体 configuration ,定义一个configuration结构体用于保存我们解析的数据,结构体里面的成员就是我们需要解析的INI文件里的各个键。例如,我们的ip.ini文件里有ip_addr、name、num这三个键,结构体里的成员表示的就是这三个键。定义一个handler回调函数,用于处理解析过程。解析过程也很简单,匹配Section Name及Key Name,然后取出值即可。调用 ini_parse 函数对INI文件进行解析。其中,handler函数里调用了一个 strdup() 函数及 atoi() 函数。strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现,,因为strdup()在内部调用了malloc()函数为变量分配内存。atoi()函数(ascii to integer)是把字符串转换成整型数的一个函数。编译、运行:自动获取IP地址我们可以使用 getifaddrs() 函数来获取。getifaddrs()函数用于获取网卡信息,包括IP、掩码、广播地址等信息。getifaddrs()函数原型:int getifaddrs (struct ifaddrs **__ifap);__ifap为获取得到的网卡信息。用getifaddrs()函数获取得到的IP格式为 数值格式(numeric),需要转成 表达格式(presentation)。inet_ntop() 函数可以满足这个需求。inet_ntop()函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表 表达格式(presentation) 和 数值格式(numeric) 。IP地址的表达格式是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。我们这里需要的就是ASCII字符串形式的IP地址。inet_ntop()函数原型:const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);family参数:既可以是AF_INET(ipv4)也可以是AF_INET6(ipv6)。addrptr参数:addrptr指针指向数值格式的IP。strptr参数:strptr指向表达格式的IP,调用者必须为目标存储单元分配内存并指定其大小。len参数:容纳表达格式的长度。返回值:若成功则为指向表达格式的指针,若出错则为NULL。下面看看实例代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
char *get_ip_addr(void)
{
static char ip_str[256] = {0};
struct ifaddrs *ifaddrs_struct = NULL;
void *addrptr = NULL;
if (getifaddrs(&ifaddrs_struct) != 0)
{
printf("getifaddrs error!\n");
return NULL;
}
struct ifaddrs *tmp_ifaddrs = ifaddrs_struct;
while (tmp_ifaddrs != NULL)
{
// IPv4
if (tmp_ifaddrs->ifa_addr->sa_family == AF_INET)
{
#define INET_ADDR_STR_LEN
256
char addr_buf[INET_ADDR_STR_LEN];
addrptr = &((struct sockaddr_in*)tmp_ifaddrs->ifa_addr)->sin_addr;
if (inet_ntop(AF_INET, addrptr, addr_buf, INET_ADDR_STR_LEN) == NULL)
{
printf("inet_ntop error!\n");
return NULL;
}
if (strlen(addr_buf) < sizeof(ip_str) - strlen(ip_str))
{
strncat(ip_str, addr_buf, strlen(addr_buf));
strncat(ip_str, ";", strlen(";"));
}
}
// IPv6
else if (tmp_ifaddrs->ifa_addr->sa_family == AF_INET6)
{
}
tmp_ifaddrs = tmp_ifaddrs->ifa_next;
}
freeifaddrs(ifaddrs_struct);
return ip_str;
}
int main(int argc, char** argv)
{
printf("hello world!\n");
char *ip_addr = get_ip_addr();
printf("ip addr : %s\n", ip_addr);
return 0;
}编译、运行:作者:ZhengN来源:与非网原文链接:嵌入式开发小记,实用小知识分享-嵌入式系统-与非网 (eefocus.com)版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除

我要回帖

更多关于 嵌入式软件开发需要学什么 的文章

 

随机推荐