erpc/erpc_port_self.c

105 lines
1.8 KiB
C

#include "erpc_core.h"
#include <windows.h>
#include <stdio.h>
HANDLE hMutex;
static void lock()
{
WaitForSingleObject(hMutex, INFINITE);
}
static void unlock()
{
ReleaseMutex(hMutex);
}
static void sleep(u32 ms)
{
Sleep(ms);
}
extern erpc_hw_t port_self;
static u32 erpc_send(u8 *data, u16 len)
{
write_rec_cache(&port_self,data,len);
}
erpc_hw_t port_self = {
.lock = lock,
.unlock = unlock,
.sleep = sleep,
.local_id = 0x12,
.send = erpc_send,
};
static void test1(){
}
DWORD WINAPI fun(LPVOID lpParam)
{
UNUSED(lpParam);
while (1)
{
Sleep(1000);
}
}
DWORD WINAPI send_thread(LPVOID lpParam)
{
UNUSED(lpParam);
while (1)
{
send_core(&port_self);
Sleep(1);
}
}
DWORD WINAPI recv_thread(LPVOID lpParam)
{
UNUSED(lpParam);
while (1)
{
recv_core(&port_self);
Sleep(1);
}
}
DWORD WINAPI recv_handle_thread(LPVOID lpParam)
{
UNUSED(lpParam);
while (1)
{
recv_handle(&port_self);
Sleep(1);
}
}
int main()
{
hMutex = CreateMutex(NULL, FALSE, TEXT("MyMutex"));
if (hMutex == NULL)
{
printf("CreateMutex error: %d\n", GetLastError());
return 1;
}
HANDLE hThreads[4];
hThreads[0] = CreateThread(NULL, 0, fun, NULL, 0, NULL);
hThreads[1] = CreateThread(NULL, 0, send_thread, NULL, 0, NULL);
hThreads[2] = CreateThread(NULL, 0, recv_thread, NULL, 0, NULL);
hThreads[3] = CreateThread(NULL, 0, recv_handle_thread, NULL, 0, NULL);
// 等待所有线程完成
WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);
// 关闭线程句柄
for (int i = 0; i < 4; i++)
{
CloseHandle(hThreads[i]);
}
// 关闭Mutex句柄
CloseHandle(hMutex);
return 0;
}