Я хочу использовать . NET базовую библиотеку IoT для запуска C# кода для моей SAMA5D27 SOM1 EK1 ARM встроенной платы .
. NET core IoT github
Я собрал это. NET основной проект, составленный из project.cs исходный файл:
using System;
using System.Device.Gpio;
using System.Threading;
namespace led_blink
{
class Program
{
static void Main(string[] args)
{
var pin = 81;
var lightTimeInMilliseconds = 1000;
var dimTimeInMilliseconds = 200;
Console.WriteLine($"Let's blink an LED!");
using (GpioController controller = new GpioController())
{
controller.OpenPin(pin, PinMode.Output);
Console.WriteLine($"GPIO pin enabled for use: {pin}");
Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) =>
{
controller.Dispose();
};
while (true)
{
Console.WriteLine($"Light for {lightTimeInMilliseconds}ms");
controller.Write(pin, PinValue.High);
Thread.Sleep(lightTimeInMilliseconds);
Console.WriteLine($"Dim for {dimTimeInMilliseconds}ms");
controller.Write(pin, PinValue.Low);
Thread.Sleep(dimTimeInMilliseconds);
}
}
}
}
}
А это .csproj файл:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Iot.Device.Bindings" Version="1.0.0" />
<PackageReference Include="System.Device.Gpio" Version="1.0.0" />
</ItemGroup>
</Project>
Как видите, код используется для мигания светодиода, который находится на PIN 81 , что соответствует Порт C контакт 17 на моей плате. Я собираю проект, чтобы использовать его на плате arm- linux.
Во-первых, чтобы проверить, работает ли контакт, я использовал библиотеку libgpiod и включил светодиод pin81 с использованием gpioset gpiochip0 81=1
, и он работает хорошо.
Кроме того, я проверил свой GP IOs с помощью команды gpioinfo
, и это результат желаемого контакта:
line 81: "PC17" unused input active-high
Но когда я пытаюсь запустить код C#, он терпит неудачу с выводом следующего сообщения:
Let's blink an LED!
Unhandled exception. System.IO.IOException: Device or resource busy
at System.IO.FileStream.WriteNative(ReadOnlySpan`1 source)
at System.IO.FileStream.FlushWriteBuffer()
at System.IO.FileStream.FlushInternalBuffer()
at System.IO.FileStream.Flush(Boolean flushToDisk)
at System.IO.FileStream.Flush()
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Dispose(Boolean disposing)
at System.IO.TextWriter.Dispose()
at System.IO.File.WriteAllText(String path, String contents)
at System.Device.Gpio.Drivers.SysFsDriver.OpenPin(Int32 pinNumber)
at System.Device.Gpio.GpioController.OpenPin(Int32 pinNumber)
at System.Device.Gpio.GpioController.OpenPin(Int32 pinNumber, PinMode mode)
at led_blink.Program.Main(String[] args) in /home/ubuntu/netcore/Program.cs:line 23
Aborted
Это дерево устройств моей платы:
device_tree
PS: Я удалил узел IS C, который использует PC17 GPIO из дерева устройств, чтобы освободить контакт
ISC_DeviceTree_node
Почему мой код не запускается? любая помощь, пожалуйста!