Страница 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
Гагарин
Тут даже дело скорее не в моем коде, а в том, что есть реалтаймовые компоненты и узерспейсные) И у них чуть разная структура кода . И в реальтаймовом компоненте нельзя использовать узерспейские вызовы .
Это как я понял

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