Member 14867519 Ответов: 0

.объем основных ошибок много в то время как работает мой код C# на руку встраиваемый бортовой


Я хочу использовать .Объем основной библиотеки ИОТ для того чтобы бежать С# код для моего SAMA5D27 СОМ1 ЕК1 руку встраиваемый бортовой.

GitHub - dotnet/iot: это РЕПО включает в себя реализации .NET Core для различных плат Интернета вещей, чипов, дисплеев и печатных плат.[^]

Я уже построил это .Чистый основной проект, состоящий из проект.в 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>



Как вы можете видеть, код используется для мигающего светодиода, который находится на Контакт 81 что соответствует PortC pin 17 на моей доске. Я строю проект для того, чтобы использовать его на arm-linux доска.

Во-первых, чтобы проверить, хорошо ли работает pin-код, я использовал библиотеку libgpiod и включил светодиод pin81 с помощью
gpioset gpiochip0 81=1
и это хорошо работает.

Кроме того, я проверил свои GPIO с помощью
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


Это моя доска дерево устройств :

https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts[^]

ПС : Я удалил узел ISC, который использует PC17 GPIO из дерева устройств, чтобы освободить pin - код

https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts#L70[^]

Почему мой код не может работать ? любая помощь, пожалуйста !

Что я уже пробовал:

Я попробовал использовать библиотеку libgpiod, чтобы увидеть, действительно ли штырь занят или нет, и обнаружил, что светодиод работает нормально. Но с кодом C# и .net IoT это не так

Gerry Schmitz

Выньте петлю. Начните с простого, пока не будет никаких ошибок, а затем выполните "инкрементное" кодирование и тестирование. Устройство "занято" может означать, что вы не "распоряжаетесь", когда должны.

0 Ответов