|
|
@@ -2131,6 +2131,7 @@ static void* shm_thread(void *arg)
|
|
|
pthread_exit(NULL);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// @brief QT通讯内存共享线程(5寸屏)
|
|
|
/// @param arg
|
|
|
/// @return
|
|
|
@@ -2138,7 +2139,7 @@ static int shm_New_CtrlBoard(void *arg)
|
|
|
{
|
|
|
GlobalPowerManger* _globalPowerMangerTemp = NULL ;
|
|
|
GlobalDeviceManager *_globalDeviceManager = (GlobalDeviceManager *)&__globalDeviceManage;
|
|
|
-
|
|
|
+ log_i("shm_CtrlBoard Start\n");
|
|
|
// 尝试清理旧对象(忽略错误)
|
|
|
shm_unlink(SHM_NAME_5_inch_screen); // 如果不存在会返回 -1,但无需处理
|
|
|
// 创建新的共享内存对象
|
|
|
@@ -2150,21 +2151,31 @@ static int shm_New_CtrlBoard(void *arg)
|
|
|
}
|
|
|
|
|
|
/* 设置共享内存对象的大小 */
|
|
|
- if (ftruncate(shm_fd, sizeof(GlobalPowerCtrlBoard)*(_globalDeviceManager->brdMax+1)) == -1) {
|
|
|
+ size_t nSize= sizeof(GlobalPowerCtrlBoard)*(_globalDeviceManager->brdMax+1)+sizeof(int)+sizeof(size_t);
|
|
|
+ if (ftruncate(shm_fd,nSize) == -1) {
|
|
|
perror("ftruncate");
|
|
|
return 2;
|
|
|
}
|
|
|
+ log_i("shm_CtrlBoard ftruncate End\n");
|
|
|
//new
|
|
|
- int *pPID = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
|
|
- int *pBrodSize = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, sizeof(int));
|
|
|
- _globalDeviceManager->pCtrlBoard = (GlobalPowerCtrlBoard *)mmap(NULL, sizeof(GlobalPowerCtrlBoard)*(_globalDeviceManager->brdMax+1), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, sizeof(int)*2);
|
|
|
+ log_i("shm_CtrlBoard mmap Start\n");
|
|
|
+
|
|
|
+ smartPDU_shm_5_inch_data* pShare_Data = (smartPDU_shm_5_inch_data *)mmap(NULL, nSize, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
|
|
|
|
|
- if (_globalDeviceManager->pCtrlBoard==NULL) {
|
|
|
+ if (pShare_Data==MAP_FAILED) {
|
|
|
perror("mmap");
|
|
|
+ log_i("shm_CtrlBoard mmap Error\n");
|
|
|
return 3;
|
|
|
}
|
|
|
- *pPID=getpid();
|
|
|
- *pBrodSize=_globalDeviceManager->brdMax+1;
|
|
|
+
|
|
|
+ log_i("shm_CtrlBoard mmap initEnd\n");
|
|
|
+ if (pShare_Data)
|
|
|
+ {
|
|
|
+ _globalDeviceManager->pCtrlBoard= pShare_Data->m_pData;
|
|
|
+ pShare_Data->array_size=_globalDeviceManager->brdMax + 1;
|
|
|
+ pShare_Data->nIPD=getpid();
|
|
|
+ log_i("shm_CtrlBoard mmap end-ID=%d ,size= %d\n",pShare_Data->nIPD,pShare_Data->array_size);
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|