hi eric,
-Os is my platform(s) default. since i've seen many cases where
optimization can make benefit == harm, i just use what we need to
squeeze code onto these puppies.
not sure why declaring register variables norace will help to understand
what trouble franz is having? the warnings it eliminates remind you
that, when all else fails, you may have a extremely marginal bug biting;
probably why the nesc manual suggests caution when using norace.
i get the warning about touching register variables in interrupt
context, but declaring all such transactions atomic makes sense only in
theoretical space, as far as i'm concerned.
when it comes right down to timing-critical context in which a) we know
exactly what has access to a particular variable at a particular time
(as in, "it's the only thing on this bus, ergo it is atomic!") and b)
wasting roughly 80 clock ticks disabling and re-enabling interrupts to
increment a buffer pointer in order to go "by the book" seems...wacky.
i have had dubious atomic blocks break code. i only like to invoke
safety measures that can't be obviated by other risk mitigation.
fortunately, we now know that the trouble at issue here has nothing to
do with compiler warnings, so we can go back to our dangerous lives!
thanks,
steve
On 07/16/2012 05:03 PM, Eric Decker wrote:
They are compiling with -Os which is good.
nesc is complaining about cpu registers.
These CPU registers should be declared as MSP430REG_NORACE. I don't
remember where that is supposed to happen.
Here is the definition from tos/chips/msp430/msp430hardware.h... Keep
in mind that shimmer/span etc. have their own copy of msp430hardware.h,
so I am not sure if that is exacerbating the problem.
// CPU memory-mapped register access will cause nesc to issue race condition
// warnings. Race conditions are a significant conern when accessing CPU
// memory-mapped registers, because they can change even while interrupts
// are disabled. This means that the standard nesc tools for resolving race
// conditions, atomic statements that disable interrupt handling, do not
// resolve CPU register race conditions. So, CPU registers access must be
// treated seriously and carefully.
// The macro MSP430REG_NORACE allows individual modules to internally
// redeclare CPU registers as norace, eliminating nesc's race condition
// warnings for their access. This macro should only be used after the
// specific CPU register use has been verified safe and correct. Example
// use:
//
// module MyLowLevelModule
// {
// // ...
// }
// implementation
// {
// MSP430REG_NORACE(TACCTL0);
// // ...
// }
In addition consider..... When compiling with -Os I have verified
that register access does indeed generate single instructions which
should be cpu atomic (meaning interrupt protected by definition of the
cpu architecture). However, I have definitiely seen that when
compiling with a lower optimization level multiple instructions may be
executed to acheive the desired result and maybe a problem.
The safe thing (but expensive and I'm not suggesting that we do this) is
to wrap all register accesses in atomic wrappers. This is what the
TinyOS Core guys did with the general I/O stuff.
eric
On Mon, Jul 16, 2012 at 5:11 AM, steve ayer <[email protected]
<mailto:[email protected]>> wrote:
good morning,
i've got to confirm mike's results, though i won't cloud this
discussion with any more toolchain hash. we know that it works. if
you doubt that the shimmer's image is valid, then email the ihex to
me; but i'll bet that the problem is elsewhere.
franz, what sort of software are you using to service the connection
on the host side?
-steve
On 07/16/2012 07:21 AM, mike healy wrote:
Hi Franz,
Yeah, I get the same warnings. I also get the exact same image
size (for
the Bluetooth test app), which more or less indicates (baring a
major
coincidence) that our development environments are the same.
My full output is below (including proof of connection and nesc and
msp430-gcc versions).
Mike
mgh@desktop:/opt/tinyos-2.x-__contrib/shimmer/swtest/__Bluetooth$ make
shimmer2r install bsl,/dev/ttyUSB0
mkdir -p build/shimmer2r
compiling TestBluetoothAppC to a shimmer2r binary
ncc -o build/shimmer2r/main.exe -Os -fnesc-separator=__ -Wall
-Wshadow -Wnesc-all -target=shimmer2r
-fnesc-cfile=build/shimmer2r/__app.c -board=
-DDEFINED_TOS_AM_GROUP=0x22
-DIDENT_APPNAME=\"__TestBluetoothAp\"
-DIDENT_USERNAME=\"mgh\" -DIDENT_HOSTNAME=\"desktop\"
-DIDENT_USERHASH=0x649a0bd4L -DIDENT_TIMESTAMP=0x5003f805L
-DIDENT_UIDHASH=0xa74471b5L TestBluetoothAppC.nc -lm
TestBluetoothC.nc:73: warning:
`activityTimer.startPeriodic' called
asynchronously from `Bluetooth.connectionMade'
TestBluetoothC.nc:78: warning: `activityTimer.stop' called
asynchronously from `Bluetooth.connectionClosed'
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__275:
warning: non-atomic accesses to shared variable `P1IE':
/opt/tinyos-main/tos/chips/__msp430/pins/__HplMsp430InterruptP.nc:92:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__271:
warning: non-atomic accesses to shared variable `P1IFG':
/opt/tinyos-main/tos/chips/__msp430/pins/__HplMsp430InterruptP.nc:108:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__286:
warning: non-atomic accesses to shared variable `P2IFG':
/opt/tinyos-main/tos/chips/__msp430/pins/__HplMsp430InterruptP.nc:212:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__290:
warning: non-atomic accesses to shared variable `P2IE':
/opt/tinyos-main/tos/chips/__msp430/pins/__HplMsp430InterruptP.nc:196:
warning: non-atomic r/w
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__74:
warning: non-atomic accesses to shared variable `btConnected':
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__308:
warning: non-atomic read
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__318:
warning: non-atomic read
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__547:
warning: non-atomic write
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__74:
warning: non-atomic accesses to shared variable
`runningMasterCommands':
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__312:
warning: non-atomic write
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__321:
warning: non-atomic write
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__332:
warning: non-atomic write
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__547:
warning: non-atomic write
TestBluetoothC.nc: In function
‘TestBluetoothC__sendStuff____runTask’:
TestBluetoothC.nc:63:3: warning: pointer targets in passing
argument
1 of ‘TestBluetoothC__Bluetooth____write’ differ in signedness
[-Wpointer-sign]
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/Bluetooth.nc:51:23:
note: expected ‘const uint8_t *’ but argument is of type
‘char *’
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP__UARTData____rxDone’:
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__598:11:
warning: pointer targets in passing argument 3 of ‘msg_cmp_buf’
differ in signedness [-Wpointer-sign]
/opt/tinyos-main/tos/__platforms/shimmer/__shimmerMessage.h:194:22:
note: expected ‘const uint8_t *’ but argument is of type
‘char *’
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP____writeCommand’:
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__180:3:
warning: pointer targets in passing argument 1 of
‘RovingNetworksP__Bluetooth____write’ differ in signedness
[-Wpointer-sign]
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__97:16:
note: expected ‘const uint8_t *’ but argument is of type
‘char *’
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP____writeCommandNoRsp’:
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__191:3:
warning: pointer targets in passing argument 1 of
‘RovingNetworksP__Bluetooth____write’ differ in signedness
[-Wpointer-sign]
/opt/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__97:16:
note: expected ‘const uint8_t *’ but argument is of type
‘char *’
compiled TestBluetoothAppC to build/shimmer2r/main.exe
7752 bytes in ROM
578 bytes in RAM
msp430-objcopy --output-target=ihex build/shimmer2r/main.exe
build/shimmer2r/main.ihex
writing TOS image
cp build/shimmer2r/main.ihex build/shimmer2r/main.ihex.out
installing shimmer2r binary using bsl
tos-bsl --invert-test --invert-reset -c /dev/ttyUSB0 -r -e
-I -p
build/shimmer2r/main.ihex.out
MSP430 Bootstrap Loader Version: 1.39-telos-8
Mass Erase...
Transmit default password ...
Invoking BSL...
Transmit default password ...
Current bootstrap loader version: 1.61 (Device ID: f16c)
Program ...
8066 bytes programmed.
Reset device ...
rm -f build/shimmer2r/main.exe.out
build/shimmer2r/main.ihex.out
mgh@desktop:/opt/tinyos-2.x-__contrib/shimmer/swtest/__Bluetooth$ rfcomm
rfcomm0: 00:06:66:43:B7:71 channel 1 closed
mgh@desktop:/opt/tinyos-2.x-__contrib/shimmer/swtest/__Bluetooth$
miniterm /dev/rfcomm0
--- Miniterm on /dev/rfcomm0: 9600,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed
by Ctrl+H ---
hello, bluetooth is awake!hello, bluetooth is awake!hello,
bluetooth
is awake!hello, bluetooth is awake!
--- exit ---
mgh@desktop:/opt/tinyos-2.x-__contrib/shimmer/swtest/__Bluetooth$
msp430-gcc -v
Using built-in specs.
Reading specs from
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/lib/msp430mcu.spec
COLLECT_GCC=msp430-gcc
COLLECT_LTO_WRAPPER=/opt/__msp430-46/bin/../libexec/gcc/__msp430/4.6.3/lto-wrapper
Target: msp430
Configured with: ../configure
--prefix=/bleed2/ayer/tinyos-__toolchain/tinyos-2.x/tools/__platforms/msp430/toolchain-46/__debian/opt/msp430-46
--target=msp430 --enable-languages=c
Thread model: single
gcc version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched)
(GCC)
mgh@desktop:/opt/tinyos-2.x-__contrib/shimmer/swtest/__Bluetooth$ ncc
-v
/usr/bin/nescc -fnesc-include=tos -topdir=/opt/tinyos-main
-fnesc-scheduler=__TinySchedulerC,TinySchedulerC.__TaskBasic,TaskBasic,TaskBasic,__runTask,postTask
-DPLATFORM_NULL -v -fnesc-target=pc -fnesc-no-debug -gcc=gcc
-I/opt/tinyos-main/tos/__platforms/null
-I/opt/tinyos-main/tos/lib/__timer
-I/opt/tinyos-main/tos/lib/__serial
-I/opt/tinyos-main/tos/__interfaces
-I/opt/tinyos-main/tos/types
-I/opt/tinyos-main/tos/system
nescc: 1.3.4
NCDIR="/usr/lib/ncc"
NESCC_ARGS="-fnesc-include=__nesc_nx -fnesc-include=tos
-fnesc-scheduler=__TinySchedulerC,TinySchedulerC.__TaskBasic,TaskBasic,TaskBasic,__runTask,postTask
-fnesc-target=pc -fnesc-no-debug"
NESCC_GCC="gcc"
gcc -specs=/usr/lib/ncc/tdspecs -I/usr/lib/ncc -D
PLATFORM_NULL -v
-I /opt/tinyos-main/tos/__platforms/null -I
/opt/tinyos-main/tos/lib/timer -I
/opt/tinyos-main/tos/lib/__serial -I
/opt/tinyos-main/tos/__interfaces -I
/opt/tinyos-main/tos/types -I
/opt/tinyos-main/tos/system -DNESC=134
Using built-in specs.
Reading specs from /usr/lib/ncc/tdspecs
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
4.4.3-4ubuntu5.1'
--with-bugurl=file:///usr/__share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,__fortran,objc,obj-c++ --prefix=/usr
--enable-shared --enable-multiarch --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib
--without-included-gettext
--enable-threads=posix
--with-gxx-include-dir=/usr/__include/c++/4.4
--program-suffix=-4.4 --enable-nls --enable-clocale=gnu
--enable-libstdcxx-debug --enable-plugin --enable-objc-gc
--disable-werror --with-arch-32=i486 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
On Mon, Jul 16, 2012 at 12:07 PM, Franz Gravenhorst
<[email protected] <mailto:[email protected]>
<mailto:[email protected].__ethz.ch
<mailto:[email protected]>>> wrote:
Hi Mike,
thank you.
Did you get the same warning messages when compiling these
apps?
I have tested it with two different shimmer devices, it is
the same
with both.
And when I use the compiled hex-file which is shipped with the
device then BoilerPlate is working correctly.
So, I think there is something wrong with my dev environment.
It would be great, if somebody would have some suggestions?
Thanks,
Franz
On 16.07.2012 10:40, mike healy wrote:
Hi Franz,
I've just tested both the Bluetooth test app (in
shimmer/swtest/Bluetooth) and BoilerPlate when compiled
with
msp430-gcc version 4.6.3 and nesc version 1.3.4 and
both work
correctly for me. I can connect and stream data from
both without
any problem.
Are you sure the problem isn't with the bluetooth stack
on the PC
side or with the particular shimmer you are using?
Mike
On Fri, Jul 13, 2012 at 7:22 PM, Franz Gravenhorst
<[email protected]
<mailto:[email protected]>
<mailto:[email protected].__ethz.ch
<mailto:[email protected]>>>
wrote:
Hi,
sorry, to bother you again...I have now somehow
successfully
performed the toolchain upgrade:
The Blink app is now working, but somehow none of the
bluetooth apps is working any more.
I tried both the BoilerPlate and the
TestBluetoothApp. Both
are compiling without fatal errors (only warnings
and notes),
but the flashed shimmer is not connectable over
bluetooth.
So, even the Bluetooth Hello-World app is not
running any more.
Here is the compiler's output:
tiny2@ShimmerLive:~/tinyos-2.__x-contrib/shimmer/swtest/__Bluetooth$
<mailto:tiny2@ShimmerLive
<mailto:tiny2@ShimmerLive>:%7E/__tinyos-2.x-contrib/shimmer/__swtest/Bluetooth$>
make shimmer2r install bsl,/dev/ttyUSB0
mkdir -p build/shimmer2r
compiling TestBluetoothAppC to a shimmer2r binary
ncc -o build/shimmer2r/main.exe -Os
-fnesc-separator=__ -Wall
-Wshadow -Wnesc-all -target=shimmer2r
-fnesc-cfile=build/shimmer2r/__app.c -board=
-DDEFINED_TOS_AM_GROUP=0x22
-DIDENT_APPNAME=\"__TestBluetoothAp\"
-DIDENT_USERNAME=\"tiny2\"
-DIDENT_HOSTNAME=\"__ShimmerLive\"
-DIDENT_USERHASH=0xe8d0c5b7L
-DIDENT_TIMESTAMP=0x50006601L
-DIDENT_UIDHASH=0xac67268eL
TestBluetoothAppC.nc -lm
TestBluetoothC.nc:73: warning:
`activityTimer.startPeriodic'
called asynchronously from `Bluetooth.connectionMade'
TestBluetoothC.nc:78: warning: `activityTimer.stop'
called
asynchronously from `Bluetooth.connectionClosed'
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__275:
warning: non-atomic accesses to shared variable `P1IE':
/home/tiny2/tinyos-main/tos/__chips/msp430/pins/__HplMsp430InterruptP.nc:92:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__271:
warning: non-atomic accesses to shared variable
`P1IFG':
/home/tiny2/tinyos-main/tos/__chips/msp430/pins/__HplMsp430InterruptP.nc:108:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__286:
warning: non-atomic accesses to shared variable
`P2IFG':
/home/tiny2/tinyos-main/tos/__chips/msp430/pins/__HplMsp430InterruptP.nc:212:
warning: non-atomic r/w
/opt/msp430-46/bin/../lib/gcc/__msp430/4.6.3/../../../../__msp430/include/msp430f1611.h:__290:
warning: non-atomic accesses to shared variable `P2IE':
/home/tiny2/tinyos-main/tos/__chips/msp430/pins/__HplMsp430InterruptP.nc:196:
warning: non-atomic r/w
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__74:
warning: non-atomic accesses to shared variable
`btConnected':
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__308:
warning: non-atomic read
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__318:
warning: non-atomic read
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__547:
warning: non-atomic write
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__74:
warning: non-atomic accesses to shared variable
`runningMasterCommands':
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__312:
warning: non-atomic write
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__321:
warning: non-atomic write
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__332:
warning: non-atomic write
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__547:
warning: non-atomic write
TestBluetoothC.nc: In function
‘TestBluetoothC__sendStuff____runTask’:
TestBluetoothC.nc:63:3: warning: pointer targets in
passing
argument 1 of ‘TestBluetoothC__Bluetooth____write’
differ in
signedness [-Wpointer-sign]
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/Bluetooth.nc:51:23:
note: expected ‘const uint8_t *’ but argument is of
type ‘char *’
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP__UARTData____rxDone’:
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__598:11:
warning: pointer targets in passing argument 3 of
‘msg_cmp_buf’ differ in signedness [-Wpointer-sign]
/home/tiny2/tinyos-main/tos/__platforms/shimmer/__shimmerMessage.h:194:22:
note: expected ‘const uint8_t *’ but argument is of
type ‘char *’
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP____writeCommand’:
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__180:3:
warning: pointer targets in passing argument 1 of
‘RovingNetworksP__Bluetooth____write’ differ in
signedness
[-Wpointer-sign]
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__97:16:
note: expected ‘const uint8_t *’ but argument is of
type ‘char *’
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:
In function ‘RovingNetworksP____writeCommandNoRsp’:
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__191:3:
warning: pointer targets in passing argument 1 of
‘RovingNetworksP__Bluetooth____write’ differ in
signedness
[-Wpointer-sign]
/home/tiny2/tinyos-main/tos/__platforms/shimmer/chips/__bluetooth/RovingNetworksP.nc:__97:16:
note: expected ‘const uint8_t *’ but argument is of
type ‘char *’
compiled TestBluetoothAppC to
build/shimmer2r/main.exe
7752 bytes in ROM
578 bytes in RAM
msp430-objcopy --output-target=ihex
build/shimmer2r/main.exe
build/shimmer2r/main.ihex
writing TOS image
cp build/shimmer2r/main.ihex
build/shimmer2r/main.ihex.out
installing shimmer2r binary using bsl
tos-bsl --invert-test --invert-reset -c
/dev/ttyUSB0 -r -e -I
-p build/shimmer2r/main.ihex.out
MSP430 Bootstrap Loader Version: 1.39-telos-8
Mass Erase...
Transmit default password ...
Invoking BSL...
Transmit default password ...
Current bootstrap loader version: 1.61 (Device ID:
f16c)
Program ...
8066 bytes programmed.
Reset device ...
rm -f build/shimmer2r/main.exe.out
build/shimmer2r/main.ihex.out
tiny2@ShimmerLive:~/tinyos-2.__x-contrib/shimmer/swtest/__Bluetooth$
<mailto:tiny2@ShimmerLive
<mailto:tiny2@ShimmerLive>:%7E/__tinyos-2.x-contrib/shimmer/__swtest/Bluetooth$>
Any ideas how to fix this?
Would be great!
Thanks,
Franz
_________________________________________________
Shimmer-users mailing list
[email protected]
<mailto:[email protected]>
<mailto:Shimmer-users@eecs.__harvard.edu
<mailto:[email protected]>>
https://lists.eecs.harvard.__edu/mailman/listinfo/shimmer-__users
<https://lists.eecs.harvard.edu/mailman/listinfo/shimmer-users>
_________________________________________________
Shimmer-users mailing list
[email protected]
<mailto:[email protected]>
https://lists.eecs.harvard.__edu/mailman/listinfo/shimmer-__users
<https://lists.eecs.harvard.edu/mailman/listinfo/shimmer-users>
_________________________________________________
Shimmer-users mailing list
[email protected] <mailto:[email protected]>
https://lists.eecs.harvard.__edu/mailman/listinfo/shimmer-__users
<https://lists.eecs.harvard.edu/mailman/listinfo/shimmer-users>
--
Eric B. Decker
Senior (over 50 :-) Researcher
_______________________________________________
Shimmer-users mailing list
[email protected]
https://lists.eecs.harvard.edu/mailman/listinfo/shimmer-users