我国首个地铁北斗定位系统开建,导航精度提高到两米内,背后有哪些黑科技?

我国首个地铁北斗定位系统开建,导航精度提高到两米内,背后有哪些黑科技?,第1张

系统采用DSP+arm双芯片结构。DSP主要负责接收北斗模块的定位信息和算法处理功能。ARM芯颤含隐片负责与DSP芯片通信,控制TFT-LCD的显茄厅示功能。硬件设计主要包括电源、arm、DSP、网络、TFT-LCD和北斗模块的设计。ARM芯片采用易发半导体公司的stm32f103vet6芯片。该芯片是32位Cortex-M3核心微处理器,最大主频为72 MHz。

它封装为lqfp100,减少了PCB的面积。此外,它还支持IO引脚的重新映射配置,降低了PCB布线的难度,支持JTAG和SWD调试/下载模式,方便用户使用市场上常用的调试工具j-link调试/下载程序,使用方便。网络部分主要提供可选功能。当条件满足时,系统的定位信息可以发送到以太网,供远程用户访问和查询。

系统采用美国MICROSTAR公司的ENC28J60网络芯片,该芯片是IEEE802 3兼容的以太网控制器,支持全/半双工模式,工作电压兼容TTL级和CMOS级,冲突时可编程自动重传,可编程填充和CRC生成,内部FIFO和DMA,用于硬件支持的快速数据传输和IP校验和计算,其封装为ssop28,与微处理器的连接方式为SPI总线,控制方便,最高速度可达10Mbit·s-1。

北斗模块采用北京和信兴通公司的um220北斗定位芯片,可同时支持BD2 B1和GPS L1。输老租出数据模式为USART,数据协议为NMEA 0183,默认通信波特率为9600位·s-1,支持的最大波特率可根据用户需要设置为230 400位·s-1。其输入/输出信号类型为LVTTL电平

使用线程间通信,在才确定的代码位置使用mutex就可以完成你所要的功能。

线程互斥

互斥意味着“排它”,即两个线程不能同枣神时进入被互斥保护的代码。Linux下可以通过pthread_mutex_t 定义互斥体机制完成多线程的互斥 *** 作,该机制的作用是对某个需要互斥的部分,在进入时先得到互斥体,如果没有得到互斥体,表明互斥部分被其它线程拥有,此时欲获取互斥体的线程阻塞,直到拥有该互斥体的线程完成互斥部分的 *** 作为止。

下面的代码实现了对共享全局变量x 用互斥体mutex 进行保护的目的:

int x// 进程中的全局变量

pthread_mutex_t mutex

pthread_mutex_init(&mutex, NULL)//按缺省的属性初始化互斥体变量mutex

pthread_mutex_lock(&mutex)// 给互斥体变量加锁

… //对变量x 的 *** 作

phtread_mutex_unlock(&mutex)// 给互斥体变量解除锁

线程同步

同步就是线程等待某个事件的发生。只有当等待的事件发生线程才继续执行,否则线程挂起并放弃处理器。当多个线程协作时,相互作用的任务必须在一定的条件下同步。

Linux下的C语言编程有多种线程同步机制,最典型的是条件变量(condition variable)。pthread_cond_init用来创建一个条件变量,其函数原型为:

pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr)

pthread_cond_wait和pthread_cond_timedwait用来等待条件变量被设置,值得注意的是这两个等待调用需要一个已经上锁的互斥体mutex,这是为了防止在真正进入等待状态之前别的线程有可能设置该条件变量而产生竞争。pthread_cond_wait的函数原型为:

pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex)

pthread_cond_broadcast用于设置条件变量,即使得事件发生,这样等待该事件的线程将不再阻塞:

pthread_cond_broadcast (pthread_cond_t *cond)

pthread_cond_signal则用于解除某一个等待线程的阻塞状态:

pthread_cond_signal (pthread_cond_t *cond)

pthread_cond_destroy 则用于释放一个条件变量的资源。

在头文件semaphore.h 中定义的信号量则完成了互斥体和条件变量的封装,按照多线程程序设计中访问控制机制,控制对资源的同步访问,提供程序设计人员更方便的调用接口。

sem_init(sem_t *sem, int pshared, unsigned int val)

这个函数初始化一个信号量sem 的值为val,参数pshared 是共享属性控制,表明是否在进程间共享。

sem_wait(sem_t *sem)

调用该函数时,若sem为无状态,调用线程阻塞,等待信号量sem值增加(post )成为有信号状态;若sem为有状态,调用线程顺序执行,但信号量的值减一凳辩亏。

sem_post(sem_t *sem)

调用该函数,信号量灶液sem的值增加,可以从无信号状态变为有信号状态。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12414459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存