您尚未登录。

#1 Re: 全志 SOC » 请教共享内存操作,在子线程中直接操作会segment fault » 2021-04-22 22:56:22

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

#define MMAP_DATA_SIZE  1024
char *data = NULL;
pthread_t pid_sub;

//子线程
void *subthread(void *arg) 
{
   if( data ) {
       memset(data, 0xff, 20); // 发生segment fault
       printf("subthread memset.\n");
   }
}

//主线程
 int main(void)
{
    int rc=0;
    int fd = shm_open("shm0001", O_CREAT|O_RDWR, 0777);

    if (fd < 0) {
            printf("shm_open failed!\n");
            return -1;
    }

    ftruncate(fd, MMAP_DATA_SIZE);
    data = (char*)mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

    // 创建子线程
    rc = pthread_create(&pid_sub, NULL, subthread, NULL);

    while(1) {
        sleep(1);
    }
}

compile: gcc test.c -lrt -lpthread -o test
测试没问题

#2 Re: 全志 SOC » 求助:全志A33芯片sd卡kernel启动时无法挂载mmc2 » 2021-04-12 16:13:52

可能是驱动能力设置太强,控制器无法控制IO状态翻转,或者导致IO电平不满足要求了

#3 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » Linux串口实时接收二进制数据流的探讨 » 2021-04-09 22:09:17

5楼正解,
RAW模式,每次读1字节,读到的立即送FIFO,外部再从FIFO取出数据解析帧头帧尾.
实际上这样才是最解放CPU的,这样的方式可以方便的处理多种协议,兼容性强.

物理串口芯片中一般也都有硬件FIFO,可以设置收发多少字节触发中断wiring通知内核.
中断也是给内核tty设备用的,所有内核已经解决了负载均衡问题.你担心的读取长度不同有影响,
仅是处在应用层看问题,事实上应用读取的是tty已读取完的数据,不管有没有数据都会立即返回.
换句话说,不管应用层是否去读,数据都会先交给tty了,只是谁来读,什么时候来读的问题.

至于是否对系统造成负担.这个还是内核层面的问题,串口的波特率这么低!!!51都胜任,linux?!
多核CPU,也只会有一个核去相应中断并处理,更不会造成负担.

linux读取串口的实时性应该没差啊,应该是收到接受中断后立即处理了,linux的中断响应虽然
没法跟抢占式调度相比,但是对于串口,这个反应速度肯定低于一个串口波特率位时长的,无需担心.
应用可能没有及时处理吧,并不是linux内核没有及时处理.循环read加sleep就可以.仅调度不到
时会慢收1个字节,相信对应用逻辑没什么影响.

#4 Re: 全志 SOC » F1C这款芯片的良品率怎么样 » 2021-04-09 20:37:00

也可能是IO设置成了下拉,IO口输出能力太差造成的,可以查查IO设置

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn