Okay, I confesss, I've seen these questions a hundred times. But I'm not at
work and my main e-mail computer at home is down and I don't have the
archive on the backup e-mail server. So I appologize for asking it yet once
again.
I was first trying to get an old v1-api program to compile and had no luck,
just a flood of diagnostics about things being multiply-defined and/or
unknown.
So I took a step back and decided to try to emulate one of the examples.
After that didn't improve the situation, I tried to compile just one of the
examples. Below is the output and source from frank_module. The errors I
get there are similar to (some of) what I see in my own program so I feel
that if I can get past frank, I'll be a long way toward getting my program
compiled too.
All help is appreciated. BTW, the system is RH 6.2 w/2.2.18 and RTL 3.0
Norm Dresner
Fellow Systems Engineer & ARE/SGI Laboratory Administrator
Radar Systems Engineering Department
MS 520/1154
Voice: (410) 993 - 2096 Mornings in Flight Test; all-day voice-mail
(410) 765 - 9235/82 Occasionally in the SGI Lab; all-day voice-mail
(410) 969 - 8068 Afternoons at home; answering machine
FAX: (410) 993 - 8084 On-site in Flight Test
(410) 969 - 8068 Afternoons at home; call first to arrange
E-Mail: Mornings: [EMAIL PROTECTED]
Afternoons: [EMAIL PROTECTED]
############ here are the errors #########################
cc -I/usr/src/rtlinux/linux/include -I/usr/src/rtlinux-3.0/include -I/usr/sr
c/rtlinux-3.0/include/compat -D__KERNEL__ -Wall -Wstrict-prototypes -fno-st
rict-aliasing -D__SMP__ -pipe -fno-strength-reduce -m486 -malign-loops=2 -ma
lign-jumps=2 -malign-functions=2 -DCPU=586 -g -D__RTL__ -DMODULE -D_LOOSE_KE
RNEL_NAMES -O2 -I/usr/src/rtlinux/linux/include -I/usr/src/rtlinux-3.0/inclu
de -I/usr/src/rtlinux-3.0/include/compat -I/usr/src/rtlinux-3.0/include/posi
x -c frank_module.c -o frank_module.o
In file included from frank_module.c:5:
/usr/src/rtlinux-3.0/include/rtl_sched.h:89: `RTL_PTHREAD_KEYS_MAX'
undeclared here (not in a function)
/usr/src/rtlinux-3.0/include/rtl_sched.h: In function `pthread_getspecific':
/usr/src/rtlinux-3.0/include/rtl_sched.h:216: warning: control reaches end
of non-void function
/usr/src/rtlinux-3.0/include/rtl_compat.h: At top level:
In file included from /usr/src/rtlinux-3.0/include/rtl_sched.h:380,
from frank_module.c:5:
/usr/src/rtlinux-3.0/include/rtl_compat.h:41: parse error before `RTIME'
/usr/src/rtlinux-3.0/include/rtl_compat.h:42: warning: function declaration
isn't a prototype
/usr/src/rtlinux-3.0/include/rtl_compat.h: In function
`rt_task_make_periodic':
/usr/src/rtlinux-3.0/include/rtl_compat.h:44: `start_time' undeclared (first
use in this function)
/usr/src/rtlinux-3.0/include/rtl_compat.h:44: (Each undeclared identifier is
reported only once
/usr/src/rtlinux-3.0/include/rtl_compat.h:44: for each function it appears
in.)
/usr/src/rtlinux-3.0/include/rtl_compat.h:44: `period' undeclared (first use
in this function)
/usr/src/rtlinux-3.0/include/rtl_compat.h:44: warning: passing arg 1 of
`pthread_make_periodic_np' from incompatible pointer type
make: *** [frank_module.o] Error 1
################### here's the source code #################
#include <linux/errno.h>
#include <rtl.h>
#include <time.h>
#include <rtl_sched.h>
#include <rtl_fifo.h>
#include "control.h"
pthread_t tasks[2];
static char *data[] = {"Frank ", "Zappa "};
#define TASK_CONTROL_FIFO_OFFSET 4
void *thread_code(void *t)
{
int fifo = (int) t;
int taskno = fifo - 1;
struct my_msg_struct msg;
while (1) {
int ret;
int err;
ret = pthread_wait_np();
if ((err = rtf_get (taskno + TASK_CONTROL_FIFO_OFFSET, &msg, sizeof(msg)))
== sizeof(msg)) {
rtl_printf("Task %d: executing the \"%d\" command to task %d; period
%d\n", fifo - 1, msg.command, msg.task, msg.period);
switch (msg.command) {
case START_TASK:
pthread_make_periodic_np(pthread_self(), gethrtime(), msg.period *
1000);
break;
case STOP_TASK:
pthread_suspend_np(pthread_self());
break;
default:
rtl_printf("RTLinux task: bad command\n");
return 0;
}
}
rtf_put(fifo, data[fifo - 1], 6);
}
return 0;
}
int my_handler(unsigned int fifo)
{
struct my_msg_struct msg;
int err;
while ((err = rtf_get(COMMAND_FIFO, &msg, sizeof(msg))) == sizeof(msg)) {
rtf_put (msg.task + TASK_CONTROL_FIFO_OFFSET, &msg, sizeof(msg));
rtl_printf("FIFO handler: sending the \"%d\" command to task %d; period
%d\n", msg.command,
msg.task, msg.period);
pthread_wakeup_np (tasks [msg.task]);
}
if (err != 0) {
return -EINVAL;
}
return 0;
}
/* #define DEBUG */
int init_module(void)
{
int c[5];
pthread_attr_t attr;
struct sched_param sched_param;
int ret;
rtf_destroy(1);
rtf_destroy(2);
rtf_destroy(3);
rtf_destroy(4);
rtf_destroy(5);
c[0] = rtf_create(1, 4000);
c[1] = rtf_create(2, 4000);
c[2] = rtf_create(3, 200); /* input control channel */
c[3] = rtf_create(4, 100); /* input control channel */
c[4] = rtf_create(5, 100); /* input control channel */
pthread_attr_init (&attr);
sched_param.sched_priority = 4;
pthread_attr_setschedparam (&attr, &sched_param);
ret = pthread_create (&tasks[0], &attr, thread_code, (void *)1);
pthread_attr_init (&attr);
sched_param.sched_priority = 5;
pthread_attr_setschedparam (&attr, &sched_param);
ret = pthread_create (&tasks[1], &attr, thread_code, (void *)2);
rtf_create_handler(3, &my_handler);
return 0;
}
void cleanup_module(void)
{
#ifdef DEBUG
printk("%d\n", rtf_destroy(1));
printk("%d\n", rtf_destroy(2));
printk("%d\n", rtf_destroy(3));
printk("%d\n", rtf_destroy(4));
printk("%d\n", rtf_destroy(5));
#else
rtf_destroy(1);
rtf_destroy(2);
rtf_destroy(3);
rtf_destroy(4);
rtf_destroy(5);
#endif
pthread_cancel (tasks[0]);
pthread_join (tasks[0], NULL);
pthread_cancel (tasks[1]);
pthread_join (tasks[1], NULL);
}
----- End of forwarded message from [EMAIL PROTECTED] -----
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
--
For more information on Real-Time Linux see:
http://www.rtlinux.org/