国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

這篇具有很好參考價(jià)值的文章主要介紹了《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、 實(shí)驗(yàn)?zāi)康?/p>

  1. 掌握無名管道與有名管道的進(jìn)程通信;
  2. 掌握消息隊(duì)列的讀寫操作;
  3. 掌握共享內(nèi)存的通信機(jī)制。

二、 實(shí)驗(yàn)任務(wù)與要求

  1. 管道讀寫程序的編寫與應(yīng)用;
  2. 消息隊(duì)列的發(fā)送和接收程序的編寫和應(yīng)用;
  3. 共享內(nèi)存的創(chuàng)建、連接和分離編程和應(yīng)用。

三、 實(shí)驗(yàn)工具和環(huán)境
PC機(jī)、Linux Ubuntu操作系統(tǒng)。
四、 實(shí)驗(yàn)內(nèi)容與結(jié)果

  1. 利用無名管道通信編寫程序?qū)崿F(xiàn)命令cat的功能。
    7.2.1-1
    《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <fcntl.h>

int main(int argc, char **argv)
{
    // printf("%d", argc);
    if (argc < 2)
    {
        printf("argv lost\n");
        exit(0);
    }
    int fd[2];
    int err = pipe(fd);
    if (err == -1)
    {
        printf("pipe err\n");
        exit(0);
    }
    pid_t pid = fork();
    if (pid == -1)
        exit(0);
    else if (pid == 0)
    {
        close(fd[1]);
        char buf[256] = {0};
        int size = read(fd[0], buf, 256);

        if (size > 0)
            printf("son --- %s\n", buf);
        else
            printf("son read err\n");

        close(fd[0]);
        exit(0);
    }
    else if (pid > 0)
    {
        close(fd[0]);
        int fd2, size2;
        char buf2[256];
        fd2 = open(argv[1], O_RDONLY);
        if (fd2)
        {
            size2 = read(fd2, buf2, 256);
            write(fd[1], buf2, 256);
        }
        close(fd2);
        sleep(5);
        close(fd[1]);
        wait(NULL);
        exit(0);
    }
}

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信
這段代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的管道通信,父進(jìn)程通過讀取文件內(nèi)容,將數(shù)據(jù)寫入管道,子進(jìn)程從管道中讀取數(shù)據(jù)并打印。其中使用了fork創(chuàng)建子進(jìn)程,pipe創(chuàng)建管道,open函數(shù)打開文件,read和write函數(shù)進(jìn)行讀寫操作。程序在父進(jìn)程中使用wait函數(shù)等待子進(jìn)程退出。

  1. 設(shè)計(jì)兩個(gè)程序:有名管道的讀程序和寫程序,要求利用有名管道實(shí)現(xiàn)聊天程序,每次發(fā)言后自動(dòng)在后面增加當(dāng)前系統(tǒng)時(shí)間。增加結(jié)束字符,比如最后輸入“886”后結(jié)束進(jìn)程。

寫程序

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#include <time.h>

int main(void)
{
    int fd;
    int len;
    char buf[PIPE_BUF];
    time_t tp;
    printf("I am %d\n", getpid());
    if ((fd = open("fifo1", O_RDWR)) < 0)
    {
        perror("open");
        exit(EXIT_FAILURE);
    }

    while (1)
    {
        time(&tp);
        printf("\n[%d]請(qǐng)輸入文字:", getpid());
        char text[256];
        fgets(text, (sizeof text / sizeof text[0]), stdin);
        if (strcmp(text, "886\n") == 0)
        {
            printf("\n886!\n");
            close(fd);
            exit(EXIT_SUCCESS);
        }
        len = sprintf(buf, "-[%d]: %s%s", getpid(), text, ctime(&tp));
        if ((write(fd, buf, len)) < 0)
        {
            perror("write");
            close(fd);
            exit(EXIT_FAILURE);
        }
        sleep(3);
    }
    close(fd);
    exit(EXIT_SUCCESS);
}

讀程序

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#include <time.h>

int main(void)
{
    int fd;
    int len;
    char buf[PIPE_BUF];
    mode_t mode = 0666;
    system("rm fifo1 > null");
    if ((mkfifo("fifo1", mode)) < 0)
    {
        perror("mkfifo");
        exit(EXIT_FAILURE);
    }
    if ((fd = open("fifo1", O_RDONLY)) < 0)
    {
        perror("open");
        exit(EXIT_FAILURE);
    }

    while ((len = read(fd, buf, PIPE_BUF)) > 0)
    {
        printf("%s", buf);
    }
    close(fd);
    exit(EXIT_SUCCESS);
}

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

這兩段代碼是一個(gè)進(jìn)程間通信的例子,使用了命名管道(FIFO)來實(shí)現(xiàn)。第一個(gè)程序是寫程序,不斷從命令行讀取用戶輸入的文字,將其和當(dāng)前時(shí)間一起發(fā)送到命名管道中。第二個(gè)程序是讀程序,不斷從命名管道中讀取數(shù)據(jù)并輸出到控制臺(tái)。通過命名管道,實(shí)現(xiàn)了兩個(gè)進(jìn)程之間的通信。其中,mkfifo函數(shù)用于創(chuàng)建命名管道,open函數(shù)用于打開命名管道,read和write函數(shù)用于讀寫數(shù)據(jù),close函數(shù)用于關(guān)閉文件描述符。

  1. 設(shè)計(jì)一個(gè)程序,要求用函數(shù)msgget創(chuàng)建消息隊(duì)列,從鍵盤輸入的字符串添加到消息隊(duì)列,然后應(yīng)用函數(shù)msgrcv讀取隊(duì)列中的消息并在計(jì)算機(jī)屏幕上輸出。程序先調(diào)用msgget函數(shù)創(chuàng)建、打開消息隊(duì)列,接著調(diào)用msgsnd函數(shù),把輸入的字符串添加到消息隊(duì)列中,然后調(diào)用msgrcv函數(shù),讀取消息隊(duì)列中的消息并打印輸出,最后調(diào)用msgctl函數(shù),刪除系統(tǒng)內(nèi)核中的消息隊(duì)列。
// q3reader.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct my_msg_st
{

	long int my_msg_type;
	char some_text[BUFSIZ];
};
int main(void)
{

	int running = 1;
	int msgid;
	struct my_msg_st some_data; // 定義消息變量
	long int msg_to_receive = 0;
	msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
	if (msgid == -1)
	{
		fprintf(stderr, "msgget failed with error: %d\n", errno);
		exit(EXIT_FAILURE);
	}
	/*創(chuàng)建消息隊(duì)列*/
	/*循環(huán)從消息隊(duì)列中接收消息*/
	while (running)
	{
		/*讀取消息*/
		if (msgrcv(msgid, (void *)&some_data, BUFSIZ, msg_to_receive, 0) == -1)
		{
			fprintf(stderr, "msgrcv failed with error: %d\n", errno);
			exit(EXIT_FAILURE);
		}
		printf("You wrote: %s", some_data.some_text);
		/*接收到的消息為“end”時(shí)結(jié)束循環(huán)*/
		if (strncmp(some_data.some_text, "end", 3) == 0)
		{
			running = 0;
		}
	}
	/*從系統(tǒng)內(nèi)核中移走消息隊(duì)列*/
	if (msgctl(msgid, IPC_RMID, 0) == -1)
	{
		fprintf(stderr, "msgctl(IPC_RMID) failed\n");
		exit(EXIT_FAILURE);
	}
	exit(EXIT_SUCCESS);
}

// q3writer.c 
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX_TEXT 512
struct my_msg_st
{

	long int my_msg_type;
	char some_text[MAX_TEXT];
};
int main(void)
{
	int running = 1;
	struct my_msg_st some_data;
	int msgid;
	char buffer[BUFSIZ];
	/*創(chuàng)建消息隊(duì)列*/
	msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
	if (msgid == -1)
	{
		fprintf(stderr, "msgget failed with error:%d\n", errno);
		exit(EXIT_FAILURE);
	}
	while (running)
	{ /*循環(huán)向消息隊(duì)列中添加消息*/
		printf("Enter some text:");
		fgets(buffer, BUFSIZ, stdin); // 從標(biāo)準(zhǔn)輸入文件讀取字符串賦給buffer
		some_data.my_msg_type = 1;
		strcpy(some_data.some_text, buffer); // buffer的內(nèi)容復(fù)制給消息
		/*添加消息*/
		if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
		{
			fprintf(stderr, "msgsed failed\n");
			exit(EXIT_FAILURE);
		}
		/*用戶輸入的為“end”時(shí)結(jié)束循環(huán)*/
		if (strncmp(buffer, "end", 3) == 0)
		{
			running = 0;
		}
	}
	exit(EXIT_SUCCESS);
}

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

這兩段代碼分別實(shí)現(xiàn)了消息隊(duì)列的讀和寫操作。其中,q3reader.c創(chuàng)建了一個(gè)消息隊(duì)列,并通過循環(huán)從中接收消息,如果接收到的消息為“end”,則結(jié)束程序;而q3writer.c循環(huán)向消息隊(duì)列中添加消息,如果用戶輸入的消息為“end”,則結(jié)束程序。兩段代碼都使用了結(jié)構(gòu)體my_msg_st來定義消息,其包含了消息類型my_msg_type和消息內(nèi)容some_text。在創(chuàng)建/添加消息的時(shí)候,需要使用msgsnd/mssgrcv函數(shù),并將my_msg_st作為參數(shù)傳遞進(jìn)去。同時(shí),需要使用msgget函數(shù)獲取消息隊(duì)列的ID,并使用msgctl函數(shù)移走消息隊(duì)列。

  1. 設(shè)計(jì)兩個(gè)程序要求用消息隊(duì)列實(shí)現(xiàn)簡(jiǎn)單的聊天功能。
// q3reader.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct my_msg_st
{

	long int my_msg_type;
	char some_text[BUFSIZ];
};
int main(void)
{

	int running = 1;
	int msgid;
	struct my_msg_st some_data; // 定義消息變量
	long int msg_to_receive = 0;
	msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
	if (msgid == -1)
	{
		fprintf(stderr, "msgget failed with error: %d\n", errno);
		exit(EXIT_FAILURE);
	}
	/*創(chuàng)建消息隊(duì)列*/
	/*循環(huán)從消息隊(duì)列中接收消息*/
	while (running)
	{
		/*讀取消息*/
		if (msgrcv(msgid, (void *)&some_data, BUFSIZ, msg_to_receive, 0) == -1)
		{
			fprintf(stderr, "msgrcv failed with error: %d\n", errno);
			exit(EXIT_FAILURE);
		}
		printf("You wrote: %s", some_data.some_text);
		/*接收到的消息為“end”時(shí)結(jié)束循環(huán)*/
		if (strncmp(some_data.some_text, "end", 3) == 0)
		{
			running = 0;
		}
	}
	/*從系統(tǒng)內(nèi)核中移走消息隊(duì)列*/
	if (msgctl(msgid, IPC_RMID, 0) == -1)
	{
		fprintf(stderr, "msgctl(IPC_RMID) failed\n");
		exit(EXIT_FAILURE);
	}
	exit(EXIT_SUCCESS);
}

// q3writer.c 
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX_TEXT 512
struct my_msg_st
{

	long int my_msg_type;
	char some_text[MAX_TEXT];
};
int main(void)
{
	int running = 1;
	struct my_msg_st some_data;
	int msgid;
	char buffer[BUFSIZ];
	/*創(chuàng)建消息隊(duì)列*/
	msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
	if (msgid == -1)
	{
		fprintf(stderr, "msgget failed with error:%d\n", errno);
		exit(EXIT_FAILURE);
	}
	while (running)
	{ /*循環(huán)向消息隊(duì)列中添加消息*/
		printf("Enter some text:");
		fgets(buffer, BUFSIZ, stdin); // 從標(biāo)準(zhǔn)輸入文件讀取字符串賦給buffer
		some_data.my_msg_type = 1;
		strcpy(some_data.some_text, buffer); // buffer的內(nèi)容復(fù)制給消息
		/*添加消息*/
		if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
		{
			fprintf(stderr, "msgsed failed\n");
			exit(EXIT_FAILURE);
		}
		/*用戶輸入的為“end”時(shí)結(jié)束循環(huán)*/
		if (strncmp(buffer, "end", 3) == 0)
		{
			running = 0;
		}
	}
	exit(EXIT_SUCCESS);
}

  1. 在主程序中先調(diào)用shmget函數(shù)創(chuàng)建一個(gè)共享內(nèi)存,得到共享內(nèi)存的id,然后利用shmat函數(shù)將創(chuàng)建的共享內(nèi)存連接到一個(gè)進(jìn)程的地址空間,返回值為該內(nèi)存空間的地址指針,利用地址指針對(duì)共享內(nèi)存進(jìn)行訪問;最后利用shmdt函數(shù)分離進(jìn)程和共享內(nèi)存。
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#define BUFSZ 4096
int main(int argc, char *argv[])
{
    int shm_id;
    char *shm_buf;
    key_t key;
    system("touch shmfile");
    // 生成一個(gè)共享內(nèi)存段的唯一鍵
    key = ftok("shmfile", 65);
    if (key == -1)
    {
        perror("ftok");
        exit(1);
    }
    // 用鍵和共享內(nèi)存段的大小創(chuàng)建一個(gè)共享內(nèi)存段并獲取它的 ID
    shm_id = shmget(key, BUFSZ, 0666 | IPC_CREAT);
    if (shm_id < 0)
    {
        perror("shmget");
        exit(1);
    }
    printf("successfully created segment: %d \n", shm_id);
    // 將共享內(nèi)存段連接到進(jìn)程地址空間并獲取一個(gè)指向它的指針
    if ((shm_buf = shmat(shm_id, NULL, 0)) == (char *)-1)
    {
        perror("shmat");
        exit(1);
    }
    printf("segment attached at %p\n", shm_buf);
    system("ipcs -m");
    sleep(3); /*休眠*/
    // 將共享內(nèi)存段從進(jìn)程地址空間分離
    if ((shmdt(shm_buf)) < 0)
    {
        perror("shmdt");
        exit(1);
    }
    printf("segment detached \n");
    system("ipcs -m "); /*再次查看系統(tǒng)IPC狀態(tài)*/
    // 刪除共享內(nèi)存段
    if (shmctl(shm_id, IPC_RMID, NULL) == -1)
    {
        perror("shmctl");
        exit(1);
    }
    printf("segment removed \n");
    system("ipcs -m "); /*再次查看系統(tǒng)IPC狀態(tài)*/
    exit(0);
}

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信

這段代碼演示了創(chuàng)建、連接、分離、刪除共享內(nèi)存段的過程。首先使用ftok函數(shù)生成一個(gè)共享內(nèi)存段的唯一鍵,然后使用shmget函數(shù)創(chuàng)建一個(gè)共享內(nèi)存段并獲取它的ID。接著使用shmat函數(shù)將共享內(nèi)存段連接到進(jìn)程地址空間并獲取一個(gè)指向它的指針。然后可以使用shm_buf指針來讀寫共享內(nèi)存段。當(dāng)不需要使用共享內(nèi)存段時(shí),可以使用shmdt函數(shù)將它從進(jìn)程地址空間分離。最后使用shmctl函數(shù)刪除共享內(nèi)存段并釋放它的系統(tǒng)資源。在代碼中還使用了system函數(shù)調(diào)用ipcs命令來查看系統(tǒng)中的IPC狀態(tài)。

  1. 編寫生產(chǎn)者、消費(fèi)者程序。

(1) 消費(fèi)者程序中創(chuàng)建一個(gè)共享內(nèi)存段,并將其中的內(nèi)容顯示出來;

消費(fèi)者程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define SHM_SIZE 1024  // 共享內(nèi)存大小
#define SHM_KEY 1234   // 共享內(nèi)存鍵值

int main()
{
    int shmid;
    char *shmaddr;

    // 連接到已有的共享內(nèi)存段并獲取其地址
    shmid = shmget(SHM_KEY, SHM_SIZE, 0666);
    if (shmid == -1) {
        perror("shmget");
        exit(1);
    }

    shmaddr = (char *)shmat(shmid, NULL, 0);
    if (shmaddr == (char *)(-1)) {
        perror("shmat");
        exit(1);
    }

    printf("Content of shared memory:\n%s", shmaddr);  // 顯示共享內(nèi)存中的內(nèi)容

    // 斷開共享內(nèi)存連接
    shmdt(shmaddr);

    return 0;
}

(2) 生產(chǎn)者連接到一個(gè)已有的共享內(nèi)存段,并允許向其中寫入數(shù)據(jù)。

生產(chǎn)者程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define SHM_SIZE 1024  // 共享內(nèi)存大小
#define SHM_KEY 1234   // 共享內(nèi)存鍵值

int main()
{
    int shmid;
    char *shmaddr;
    char buffer[256];

    // 創(chuàng)建共享內(nèi)存段
    shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);
    if (shmid == -1) {
        perror("shmget");
        exit(1);
    }

    // 連接到共享內(nèi)存段并獲取其地址
    shmaddr = (char *)shmat(shmid, NULL, 0);
    if (shmaddr == (char *)(-1)) {
        perror("shmat");
        exit(1);
    }

    while (1) {
        printf("Enter message: ");
        fgets(buffer, sizeof(buffer), stdin);
        strncpy(shmaddr, buffer, SHM_SIZE);  // 寫入共享內(nèi)存
    }
    
    // 斷開共享內(nèi)存連接
    shmdt(shmaddr);
    
    // 刪除共享內(nèi)存段
    shmctl(shmid, IPC_RMID, NULL);
    return 0;
}

《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信
生產(chǎn)者程序使用 shmget() 函數(shù)創(chuàng)建了一個(gè)大小為 SHM_SIZE 的共享內(nèi)存段,并使用 shmat() 函數(shù)將其連接到進(jìn)程的虛擬地址空間,從而獲取其地址指針 shmaddr。然后通過 fgets() 函數(shù)從標(biāo)準(zhǔn)輸入讀取字符串,再使用 strncpy() 將其寫入共享內(nèi)存中。這個(gè)過程循環(huán)執(zhí)行,直到程序結(jié)束。最后使用 shmdt() 斷開共享內(nèi)存連接,使用 shmctl() 刪除共享內(nèi)存段。

消費(fèi)者程序先使用 shmget() 函數(shù)連接到已有的共享內(nèi)存段,并使用 shmat() 函數(shù)將其連接到進(jìn)程的虛擬地址空間,從而獲取其地址指針 shmaddr。然后通過 printf() 打印共享內(nèi)存中的內(nèi)容。最后使用 shmdt() 斷開共享內(nèi)存連接。

五、 實(shí)驗(yàn)總結(jié)文章來源地址http://www.zghlxwxcb.cn/news/detail-466175.html

到了這里,關(guān)于《嵌入式系統(tǒng)開發(fā)實(shí)踐》實(shí)驗(yàn)三 進(jìn)程通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一 GPIO 口控制LED 實(shí)驗(yàn)

    嵌入式系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一 GPIO 口控制LED 實(shí)驗(yàn)

    1 實(shí)驗(yàn)?zāi)康?1.) 了解并掌握如何控制 STM32 的 GPIO; 2.) 掌握控制 LED 的電路原理和程序代碼; 2 實(shí)驗(yàn)環(huán)境 1.) 硬件:1 個(gè)空氣溫濕度傳感器模塊、1 個(gè) ST-Link 調(diào)試器、1 根USB2.0 方口線、1根USB3.0 數(shù)據(jù)線、1 臺(tái)PC 機(jī); 2.) 軟件:Windows 10、MDK 集成開發(fā)環(huán)境。 3 實(shí)驗(yàn)功能 實(shí)現(xiàn)LED燈依

    2024年02月01日
    瀏覽(91)
  • 合肥工業(yè)大學(xué)嵌入式系統(tǒng)原理實(shí)驗(yàn)報(bào)告

    ?作者簡(jiǎn)介:CSDN內(nèi)容合伙人、信息安全專業(yè)在校大學(xué)生?? ??系列專欄 : ??新人博主 :歡迎點(diǎn)贊收藏關(guān)注,會(huì)回訪! ??舞臺(tái)再大,你不上臺(tái),永遠(yuǎn)是個(gè)觀眾。平臺(tái)再好,你不參與,永遠(yuǎn)是局外人。能力再大,你不行動(dòng),只能看別人成功!沒有人會(huì)關(guān)心你付出過多少努力,

    2024年02月07日
    瀏覽(98)
  • [嵌入式系統(tǒng)-32]:RT-Thread -17- 任務(wù)、進(jìn)程、線程的區(qū)別

    [嵌入式系統(tǒng)-32]:RT-Thread -17- 任務(wù)、進(jìn)程、線程的區(qū)別

    目錄 一、基本概念澄清 1.1 任務(wù) 1.2 進(jìn)程 1.3 線程 1.4 比較 1.5 任務(wù)VS進(jìn)程 1.6 進(jìn)程 VS 線程 1.7 任務(wù) 進(jìn)程 線程 發(fā)展歷史 任務(wù)(Task): 進(jìn)程(Process): 線程(Thread): 發(fā)展趨勢(shì): 二、不同操作系統(tǒng)中任務(wù)、進(jìn)程、線程 2.1 Linux:沒人任務(wù),只有進(jìn)程與線程 進(jìn)程相關(guān)函數(shù): 線程

    2024年02月21日
    瀏覽(26)
  • 嵌入式Linux裸機(jī)開發(fā)(七)UART串口、IIC、SPI通信

    嵌入式Linux裸機(jī)開發(fā)(七)UART串口、IIC、SPI通信

    大概學(xué)完這三種通信后,之后就先去學(xué)系統(tǒng)移植,其他的先暫時(shí)放下 串口全稱叫做串行接口,通常也叫做 COM 接口。 UART:(Universal Asynchronous Receiver/Trasmitter)通用異步串行收發(fā)器。 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/異步串行收發(fā)器,相比 UART多了

    2024年02月07日
    瀏覽(92)
  • 【嵌入式操作系統(tǒng)】實(shí)驗(yàn)2:GPIO編程及應(yīng)用

    【嵌入式操作系統(tǒng)】實(shí)驗(yàn)2:GPIO編程及應(yīng)用

    熟悉STM32 模塊的GPIO硬件連接; 掌握GPIO初始化配置; 掌握GPIO控制板上LED燈編程; 熟練KEIL 工程的配置,編譯,調(diào)試,下載。 操作系統(tǒng):WINDOWS 10 開發(fā)工具:Keil 4,UartAssists 實(shí)驗(yàn)設(shè)備:125K RFID讀寫器模塊、JLink在線調(diào)試器、電源、PC ??運(yùn)行程序后,LED燈D7、D8按照全熄滅、亮

    2024年02月09日
    瀏覽(26)
  • 關(guān)于嵌入式開發(fā)的一些信息匯總:嵌入式C開發(fā)人員、嵌入式系統(tǒng)Linux

    關(guān)于嵌入式開發(fā)的一些信息匯總:嵌入式C開發(fā)人員、嵌入式系統(tǒng)Linux

    這篇文章是關(guān)于嵌入式開發(fā)的一些基本信息,供想入行的人參考。有一些作者本人的想法,以及來自外網(wǎng)的大拿的文章翻譯而來,原文鏈接在此Learning Linux for embedded systems,再次感謝,支持原創(chuàng)。 普通C開發(fā)人員和嵌入式C開發(fā)人員之間的 基本區(qū)別在于 ,因?yàn)榍度胧紺程序被設(shè)

    2024年02月03日
    瀏覽(129)
  • 飛凌嵌入式i.MX9352嵌入式ARM開發(fā)板,讓通信安全又穩(wěn)定——EMC防護(hù),靜電、浪涌、脈沖4級(jí)防護(hù)能力

    飛凌嵌入式i.MX9352嵌入式ARM開發(fā)板,讓通信安全又穩(wěn)定——EMC防護(hù),靜電、浪涌、脈沖4級(jí)防護(hù)能力

    隨著新基建的加快推進(jìn),智能制造迎來了更好的發(fā)展時(shí)機(jī),嵌入式板卡等智能設(shè)備也在更多的應(yīng)用場(chǎng)景中大放異彩。但隨著現(xiàn)場(chǎng)的設(shè)備數(shù)量的劇增,環(huán)境中的各種干擾信號(hào)也隨之增加,這就對(duì)設(shè)備間通信的安全性與穩(wěn)定性提出了更高的要求。 強(qiáng)磁、強(qiáng)電以及大功率設(shè)備所產(chǎn)生

    2024年02月13日
    瀏覽(93)
  • 嵌入式系統(tǒng)中MCU與SoC通信方式的選擇與應(yīng)用

    嵌入式系統(tǒng)中MCU與SoC通信方式的選擇與應(yīng)用

    在探討嵌入式系統(tǒng)中微控制器單元(MCU)和系統(tǒng)級(jí)芯片(SoC)之間的通信方式之前,讓我們先對(duì)嵌入式系統(tǒng)的核心概念進(jìn)行深入了解。嵌入式系統(tǒng)是一種專用的計(jì)算系統(tǒng),它被設(shè)計(jì)來執(zhí)行或支持特定的功能或任務(wù)。這些系統(tǒng)通常嵌入在更大的設(shè)備中,如家電、汽車、工業(yè)機(jī)器

    2024年01月21日
    瀏覽(25)
  • 【嵌入式開發(fā)】開發(fā)板設(shè)置系統(tǒng)時(shí)間

    【嵌入式開發(fā)】開發(fā)板設(shè)置系統(tǒng)時(shí)間

    時(shí)鐘包括硬件時(shí)鐘和系統(tǒng)時(shí)鐘,系統(tǒng)時(shí)鐘就是linux系統(tǒng)顯示的時(shí)間,用命令 date 可以顯示當(dāng)前系統(tǒng)時(shí)間;硬件時(shí)鐘就是硬件自身的時(shí)間了。它們兩者沒有關(guān)系的,但是可以通過命令設(shè)置系統(tǒng)時(shí)鐘和硬件設(shè)置,讓它們同步。 Linux系統(tǒng)ARM架構(gòu)開發(fā)板、Xshell軟件 date 命令查看系統(tǒng)時(shí)

    2024年02月11日
    瀏覽(23)
  • 通信工程畢設(shè) Stm32酒駕檢查系統(tǒng) - 單片機(jī) 嵌入式 物聯(lián)網(wǎng)

    通信工程畢設(shè) Stm32酒駕檢查系統(tǒng) - 單片機(jī) 嵌入式 物聯(lián)網(wǎng)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月19日
    瀏覽(701)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包