How can I give higher priority to user-space signal which emits data by usig signal over bbb interru

52 views
Skip to first unread message

Upol Ryskulova

unread,
Feb 22, 2016, 11:01:43 AM2/22/16
to BeagleBoard
How can I give higher priority to user-space signal which emits data by usig PySide Signal class over the interrupt which reads value from a sensor when edge is rising of beaglebone black(BBB) gpio. The sensor rate is set to 860, so in every second it reads 860 data, consequently changes the flow of the process 860 times, and when 860 data has been read from the sensor it takes average of that values and emits PySide Signal with data (we should not return values from interrupt handler function and they have to have really short execution time period, that is why I used Pyside's Signal class to emit signal with data). This signal emitted is connected to printWeight() data in the server-side, and expected to execute when signal is emitted. But since interrupt is generated 860 times per second cpu usage is not given to server-side. How can I handle this issue? my server.py is as follows

from bottle import       redirect,get,post,request,response,template,run,route,Bottle,static_file
from bottle.ext.websocket import GeventWebSocketServer
from bottle.ext.websocket import websocket
import time
import signal

from HardwareInterrupt import Hardware
from Signals import _Signal_DataArrived
import signal

hardware = None
def printWeight(data):
    global hardware 
    print "data = ",data

#signal.signal(signal.SIGALRM,printWeight)

@route('/')
def websocket():
    global hardware
    hardware = Hardware()
    hardware.setups()
    #hardware.startReadingValue()
    print "hardware..."


_Signal_DataArrived.run(printWeight)
run(host='0.0.0.0',port=8001,server=GeventWebSocketServer)
and HardwareInterrupt.py is like this

......
       
def setups(self):
           
#setting Gpio setups
           
Gpio.setup("P9_24", Gpio.IN,pull_up_down=Gpio.PUD_DOWN)  
           
Gpio.add_event_detect("P9_24", Gpio.RISING)              
           
self.setupI2cSettings()
           
Gpio.add_event_callback(_SensorValueDetectedPin,self.readValueFromSensor)


         
def readValueFromSensor(self,channel):
           
if (self.count == 860):
                    result
=self.total/self.count
                    weight
= result * self.sensorValueToGramConverter
                    weight
= self.doCalibration(weight,self.prev_weight)#currentVal)#,previousVal)
                   
self.prev_weight = weight
                   
print '%.2f' % (weight)
                   
self.count = 0
                    result
= 0
                   
self.total = 0
                    obj
= {'weight':weight}
                   
self._weight = weight
                    _Signal_DataArrived
.emitIt(weight)
                   
import time
                    time
.sleep(0.1)
           
self.count = self.count + 1    
            MSB
, LSB = self.i2c.readList(0x00, 2)
            combined
= (MSB << 8) | LSB # gelen verinin decimal hali
           
self.total +=combined
 
....


Dieter Wirz

unread,
Feb 22, 2016, 12:18:54 PM2/22/16
to beagl...@googlegroups.com
Have a look at "nice"

import os
os.nice(-20)

A nice value of -20 represents highest priority, and a nice value of
19 represent least priority for a process.
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to beagleboard...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages