Страница 1 из 1

Halcompil не видит include

Добавлено: 29 сен 2016, 09:47
Гагарин
Здравствуйте! Пытаюсь сварганить простенькую плату входов-выходов для компонентов не требующих реакции в пределах сервоцикла: кнопки, идикаторы, исполнительные устройства и т.д. Плата на ардуине. Для тестирования делал программу в QTCreator. В ней компилировалось все нормально. Естественно для HAL я ее видоизменил чуть-чуть. Исходник компонента в спойлере ниже.
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

component io_board " ";

pin in signed digital-in-byte-#[255];
pin io signed digital-out-byte-#[255];

option count_function;
option extra_setup;
option extra_cleanup;
option constructable no;

function read nofp;
function write nofp;

license "GPL"; 

;;

#include <asm/io.h>
#include <fcntl.h>   
#include <termios.h>
#include <rtapi_errno.h>
#include <ioctl.h>
#include <math.h>
#include <string.h>  

int fd,i;

EXTRA_SETUP (){
    const char* DEVICE="/dev/MyDevices/IO_Board";
    int BAUDRATE = B1000000;

    struct termios oldtio, newtio;

    fd = open(DEVICE, O_RDWR | O_RDONLY | O_NOCTTY | O_NDELAY );
    if (fd < 0) {perror("."); exit(EXIT_FAILURE); }

    tcgetattr(fd,&oldtio);
    // tcgetattr(fd,&newtio);
    bzero(&newtio, sizeof(newtio));

    cfsetospeed(&newtio, BAUDRATE);

    newtio.c_cflag &= ~(PARENB|CSTOPB|CSIZE);
    newtio.c_cflag |= (CS8 | CLOCAL | CREAD);

    newtio.c_iflag |= (IGNPAR | ICRNL );

    newtio.c_oflag = 0;

    newtio.c_lflag = ICANON;

    newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */
    newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */
    newtio.c_cc[VERASE]   = 0;     /* del */
    newtio.c_cc[VKILL]    = 0;     /* @ */
    newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */
    newtio.c_cc[VTIME]    = 0;     /* inter-character timer unused */
    newtio.c_cc[VMIN]     = 255;     /* blocking read until 1 character arrives */
    newtio.c_cc[VSWTC]    = 0;     /* '\0' */
    newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */
    newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */
    newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */
    newtio.c_cc[VEOL]     = 0;     /* '\0' */
    newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */
    newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */
    newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */
    newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */
    newtio.c_cc[VEOL2]    = 0;     /* '\0' */

    tcflush(fd, TCIFLUSH);

    tcsetattr(fd, TCSAFLUSH, &newtio);

    fcntl(fd, F_SETFL,FNDELAY);


}


FUNCTION(read) {
    unsigned char* buf;
    int num_bytes,res;
    //ioctl(fd, FIONREAD, &num_bytes); //кол-во доступных байт в порту записывается в переменную num_bytes
    
    res = read(fd,&buf,255);
    if(res==255){

        for (i=0;i<256;i++){
           digital_in_byte(i)=buf[i];

        }
    }


}


FUNCTION(write) {
    unsigned int n;
    unsigned int i;
    unsigned int out_array[256];
    for (i=0;i<256;i++){
        out_array[i]=digital_out_byte(i);

    }
    n = write(fd, out_array,256);
    if (n < 0) {fputs("write() failed!\n", stderr);}

}

При вводе команды halcompile --compile io_board.comp ругается : fatal error: fcntl.h: Нет такого файла или каталога. Пробовал прописывать полный путь к инклудам, но в итоге вываливаются ошибки на отсутсвие инклуд, на которые ссылаются инклуды из компонента. Как подсказать Halcompile-у, чтоб искал в /usr/include/ ?

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 12:45
Serg
Точно на fcntl.h ругается?
Судя по списку инклудов должно ругаться на ioctl.h, ибо он в linux/ioctl.h.

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 12:51
Гагарин
Точно. Если удалить строчку с fcntl.h , то будет ругаться на следующую инклуду.

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 13:31
Serg
fcntl.h находится в /usr/include. Если всё правильно установлено, то ругаться на него не должно.

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 14:00
Гагарин
Решил проблему. Подсказали на дружественном форуме)
http://www.chipmaker.ru/topic/183984/

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 14:09
Serg
Ну я до такой степени в твой код не погружался и компилить не пробовал... :)

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 14:13
Гагарин
Тут даже дело скорее не в моем коде, а в том, что есть реалтаймовые компоненты и узерспейсные) И у них чуть разная структура кода . И в реальтаймовом компоненте нельзя использовать узерспейские вызовы .
Это как я понял :thinking:

Re: Halcompil не видит include

Добавлено: 29 сен 2016, 14:17
Serg
Это так, но так глубоко не смотрел - просто по памяти проверил где лежат инклуды. :)