Как прочитать адрес зарезервированной памяти в дереве устройств

В iOS 4 и более поздних версиях есть способ сделать это, используя метод перехода UIView без необходимости импортировать QuartzCore. Вы можете просто сказать:

[UIView transitionWithView:button
                  duration:0.4
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                     button.hidden = YES;
                }
                completion:NULL];

Предыдущее решение

Решение Michail будет работать, но на самом деле это не лучший подход.

Проблема с альфа-замиранием что иногда разные перекрывающиеся слои выглядят странно, когда они исчезают. Существуют и другие альтернативы, использующие Core Animation. Сначала включите среду QuartzCore в ваше приложение и добавьте #import <QuartzCore/QuartzCore.h> в свой заголовок. Теперь вы можете выполнить одно из следующих действий:

1) установить button.layer.shouldRasterize = YES;, а затем использовать код альфа-анимации, который был предоставлен Михаилом в его ответе. Это предотвратит странное смешение слоев, но имеет небольшое ограничение производительности и может заставить кнопку выглядеть размытой, если она не выровнена точно на границе пикселя.

Альтернативно:

2 ) Используйте следующий код, чтобы анимировать затухание:

CATransition *animation = [CATransition animation];
animation.type = kCATransitionFade;
animation.duration = 0.4;
[button.layer addAnimation:animation forKey:nil];

button.hidden = YES;

Приятная вещь в этом подходе заключается в том, что вы можете перечеркнуть любое свойство кнопки, даже если они не являются анимированными (например, текст или изображение кнопку), просто настройте переход, а затем сразу установите свои свойства.

1
задан Kotte 22 March 2019 в 12:24
поделиться

1 ответ

Если struct device *hwdev указывает на ваше оборудование struct device (например, если hwdev указывает на элемент dev элемента struct platform_device), то этот фрагмент кода иллюстрирует, как получить доступ к узлу дерева устройств зарезервированного область памяти и преобразовать это в struct resource.

        struct device_node *memnp;
        struct resource mem_res;
        int rc;

        /* Get pointer to memory region device node from "memory-region" phandle. */
        memnp = of_parse_phandle(hwdev->of_node, "memory-region", 0);
        if (!memnp) {
                dev_err(hwdev, "no memory-region node\n");
                rc = -ENXIO;
                goto err1;
        }
        /* Convert memory region to a struct resource */
        rc = of_address_to_resource(memnp, 0, &mem_res);
        /* finished with memnp */
        of_node_put(memnp);
        if (rc) {
                dev_err(hwdev, "failed to translate memory-region to a resource\n");
                goto err1;
        }

Начальный адрес заканчивается на mem_res.start, а длина задается как resource_size(&mem_res);.

0
ответ дан Ian Abbott 22 March 2019 в 12:24
поделиться