ecrt_master_callbacks: replaced send/receive callback mechanism with locking mechanism; removed ecrt_master_send_ext

This commit is contained in:
Martin Troxler
2010-12-16 15:47:28 +01:00
parent 2fcb8f9079
commit 075dce4d7e
8 changed files with 73 additions and 155 deletions
+6 -18
View File
@@ -229,8 +229,8 @@ void run(long data)
}
ecrt_master_sync_slave_clocks(master);
ecrt_domain_queue(domain1);
ecrt_master_send(master);
rt_sem_signal(&master_sem);
ecrt_master_send(master);
rt_task_wait_period();
}
@@ -238,30 +238,18 @@ void run(long data)
/*****************************************************************************/
void send_callback(void *cb_data)
void request_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
// too close to the next real time cycle: deny access...
if (get_cycles() - t_last_cycle <= t_critical) {
rt_sem_wait(&master_sem);
ecrt_master_send_ext(m);
rt_sem_signal(&master_sem);
}
rt_sem_wait(&master_sem);
}
/*****************************************************************************/
void receive_callback(void *cb_data)
void release_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
// too close to the next real time cycle: deny access...
if (get_cycles() - t_last_cycle <= t_critical) {
rt_sem_wait(&master_sem);
ecrt_master_receive(m);
rt_sem_signal(&master_sem);
}
rt_sem_signal(&master_sem);
}
/*****************************************************************************/
@@ -285,7 +273,7 @@ int __init init_mod(void)
goto out_return;
}
ecrt_master_callbacks(master, send_callback, receive_callback, master);
ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master);
printk(KERN_INFO PFX "Registering domain...\n");
if (!(domain1 = ecrt_master_create_domain(master))) {
+4 -9
View File
@@ -346,10 +346,9 @@ void cyclic_task(unsigned long data)
EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09);
// send process data
down(&master_sem);
ecrt_domain_queue(domain1);
ecrt_master_send(master);
up(&master_sem);
ecrt_master_send(master);
// restart timer
timer.expires += HZ / FREQUENCY;
@@ -358,21 +357,17 @@ void cyclic_task(unsigned long data)
/*****************************************************************************/
void send_callback(void *cb_data)
void request_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
down(&master_sem);
ecrt_master_send_ext(m);
up(&master_sem);
}
/*****************************************************************************/
void receive_callback(void *cb_data)
void release_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
down(&master_sem);
ecrt_master_receive(m);
up(&master_sem);
}
@@ -398,7 +393,7 @@ int __init init_mini_module(void)
}
sema_init(&master_sem, 1);
ecrt_master_callbacks(master, send_callback, receive_callback, master);
ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master);
printk(KERN_INFO PFX "Registering domain...\n");
if (!(domain1 = ecrt_master_create_domain(master))) {
+6 -18
View File
@@ -234,8 +234,8 @@ void run(long data)
rt_sem_wait(&master_sem);
ecrt_domain_queue(domain1);
ecrt_master_send(master);
rt_sem_signal(&master_sem);
ecrt_master_send(master);
rt_task_wait_period();
}
@@ -243,30 +243,18 @@ void run(long data)
/*****************************************************************************/
void send_callback(void *cb_data)
void request_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
// too close to the next real time cycle: deny access...
if (get_cycles() - t_last_cycle <= t_critical) {
rt_sem_wait(&master_sem);
ecrt_master_send_ext(m);
rt_sem_signal(&master_sem);
}
rt_sem_wait(&master_sem);
}
/*****************************************************************************/
void receive_callback(void *cb_data)
void release_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
// too close to the next real time cycle: deny access...
if (get_cycles() - t_last_cycle <= t_critical) {
rt_sem_wait(&master_sem);
ecrt_master_receive(m);
rt_sem_signal(&master_sem);
}
rt_sem_signal(&master_sem);
}
/*****************************************************************************/
@@ -292,7 +280,7 @@ int __init init_mod(void)
goto out_return;
}
ecrt_master_callbacks(master, send_callback, receive_callback, master);
ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master);
printk(KERN_INFO PFX "Registering domain...\n");
if (!(domain1 = ecrt_master_create_domain(master))) {
+4 -8
View File
@@ -141,8 +141,8 @@ void cyclic_task(unsigned long data)
// send process data
down(&master_sem);
ecrt_domain_queue(domain1);
ecrt_master_send(master);
up(&master_sem);
ecrt_master_send(master);
// restart timer
timer.expires += HZ / FREQUENCY;
@@ -151,21 +151,17 @@ void cyclic_task(unsigned long data)
/*****************************************************************************/
void send_callback(void *cb_data)
void request_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
down(&master_sem);
ecrt_master_send_ext(m);
up(&master_sem);
}
/*****************************************************************************/
void receive_callback(void *cb_data)
void release_lock_callback(void *cb_data)
{
ec_master_t *m = (ec_master_t *) cb_data;
down(&master_sem);
ecrt_master_receive(m);
up(&master_sem);
}
@@ -186,7 +182,7 @@ int __init init_mini_module(void)
}
sema_init(&master_sem, 1);
ecrt_master_callbacks(master, send_callback, receive_callback, master);
ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master);
printk(KERN_INFO PFX "Registering domain...\n");
if (!(domain1 = ecrt_master_create_domain(master))) {