Hi All,
Known good code on the previous release is now broken with the RC build.
How do I go about tracking down this generic exception?
#### Exception System.InvalidOperationException - CLR_E_INVALID_OPERATION (2) ####
#### Message:
#### GHIElectronics.TinyCLR.IO.FileSystem::Initialize [IP: 0000] ####
#### GHIElectronics.TinyCLR.IO.FileSystem::Mount [IP: 0024] ####
#### XXXXX.TCLR.Common.World::SetupStorageController [IP: 0014] ####
#### XXXXX.TCLR.Common.World::.cctor [IP: 0012] ####
Exception thrown: 'System.InvalidOperationException' in GHIElectronics.TinyCLR.IO.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in
GHIElectronics.TinyCLR.IO.dll
Make sure SD card is still good or has connection well.
There is no change about SD Card from P6- to RC1
If I remove that line, I get similar errors at other places in the code… Such as the CanController
There were no changes to my code at all between updating from P6 to RC1. Any other ideas on how to diag this?
#### Exception System.InvalidOperationException - CLR_E_INVALID_OPERATION (2) ####
#### Message:
#### GHIElectronics.TinyCLR.Devices.Can.Provider.CanControllerApiWrapper::AddFilter [IP: 0000] ####
#### GHIElectronics.TinyCLR.Devices.Can.Filter::AddMaskFilter [IP: 000b] ####
#### xx.TCLR.Common.World::SetupCanController [IP: 0042] ####
#### xx.TCLR.Common.World::.cctor [IP: 000e] ####
Exception thrown: 'System.InvalidOperationException' in
GHIElectronics.TinyCLR.Devices.Can.dll
An unhandled exception of type 'System.InvalidOperationException' occurred in
GHIElectronics.TinyCLR.Devices.Can.dll
Uncaught exception
If you removed that line then SD won’t work.
For CAN, try to set the filter before Enable().
I only removed it for testing purposes.
Moving the filter before I call Enable sets the same exception. “System.InvalidOperationException”
Can I see your filter number id?
Or try some different number, something like
controller.Filter.AddMaskFilter(Filter.IdType.Standard, 0x100, 0x700);
Same exception, though this time on Enable. Same exception even if I move the filter after Enable.
.
Same result
EDIT: Erased, and reloaded the firmware. Same results. Rev A board
Move Enable(); to last.
Can’t add Filter once enabled. We will fix the doc.
var LdrButton = GpioController.GetDefault().OpenPin(SC20100.GpioPin.PE3);
LdrButton.SetDriveMode(GpioPinDriveMode.InputPullUp);
var can = CanController.FromName(SC20100.CanBus.Can1);
var propagationPhase1 = 13;
var phase2 = 2;
var baudratePrescaler = 3;
var synchronizationJumpWidth = 1;
var useMultiBitSampling = false;
can.SetNominalBitTiming(new CanBitTiming(propagationPhase1, phase2, baudratePrescaler,
synchronizationJumpWidth, useMultiBitSampling));
var message = new CanMessage()
{
Data = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x2E, 0x20, 0x20 },
ArbitrationId = 0x11,
Length = 6,
RemoteTransmissionRequest = false,
ExtendedId = false,
FdCan = false,
BitRateSwitch = false
};
//The following filter will accept arbitration IDs from 0x12 to 0x20 inclusive.
can.Filter.AddRangeFilter(Filter.IdType.Standard, 0x12, 0x20);
//The following filter will accept arbitration IDs from 0x500 to 0x1000 inclusive.
can.Filter.AddRangeFilter(Filter.IdType.Standard, 0x500, 0x1000);
//The following filter will accept arbitration IDs of 0x11 and 0x13.
can.Filter.AddMaskFilter(Filter.IdType.Standard, 0x11, 0xFD);
//The following filter will accept arbitration IDs of 5678 only.
can.Filter.AddMaskFilter(Filter.IdType.Standard, 0x5678, 0xFFFF);
can.MessageReceived += Can_MessageReceived;
can.ErrorReceived += Can_ErrorReceived;
can.Enable();
while (true)
{
if (LdrButton.Read() == GpioPinValue.Low)
can.WriteMessage(message);
Thread.Sleep(100);
}
So, how can I change the filters during runtime?
Previously, I could add/remove hardware filters as needed. Now, it throws the exception each time that I attempt to add/remove during execution (post setup).
I attempted to disable change filters, then enable though no success.
Thanks
What do you mean no success, exception, filter doesn’t work?
I just tried, it should work.
controller.Enable();
// try disable to set filter
controller.Disable();
controller.Filter.AddRangeFilter(Filter.IdType.Extended, 10000, 10005); controller.Filter.AddMaskFilter(Filter.IdType.Standard, 0x100, 0x700);
// Enable again
controller.Enable();
You are correct. The issue detailed here was masking it: Have to clean solution each deployment - #2 by Gus_Issa
Thanks