91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 5KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-06-16
  • 語言: 其他
  • 標簽: 代碼??

資源簡介

海思平臺代碼讀取某個GPIO口的值,方便用戶在官方SDK去掉API讀值的情況下使用

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?

typedef?struct?tag_MMAP_Node
{
unsigned?int?Start_P;
unsigned?int?Start_V;
unsigned?int?length;
????unsigned?int?refcount;
struct?tag_MMAP_Node?*?next;
}TMMAP_Node_t;

TMMAP_Node_t?*?pTMMAPNode?=?NULL;

#define?PAGE_SIZE?0x1000
#define?PAGE_SIZE_MASK?0xfffff000

static?int?fd?=?-1;
static?const?char?dev[]=“/dev/mem“;

#define?ASC2NUM(ch)?(ch?-?‘0‘)
#define?HEXASC2NUM(ch)?(ch?-?‘A‘?+?10)
#define?DEFAULT_MD_LEN?128

void?*?memmap(unsigned?int?phy_addr?unsigned?int?size)
{
unsigned?int?phy_addr_in_page;
unsigned?int?page_diff;

unsigned?int?size_in_page;

TMMAP_Node_t?*?pTmp;
TMMAP_Node_t?*?pNew;

void?*addr=NULL;

if(size?==?0)
{
printf(“memmap():size?can‘t?be?zero!\n“);
return?NULL;
}

/*?check?if?the?physical?memory?space?have?been?mmaped?*/
pTmp?=?pTMMAPNode;
while(pTmp?!=?NULL)
{
if(?(phy_addr?>=?pTmp->Start_P)?&&?
(?(phy_addr?+?size)?<=?(pTmp->Start_P?+?pTmp->length)?)?)
{
????????????pTmp->refcount++;???/*?referrence?count?increase?by?1??*/
return?(void?*)(pTmp->Start_V?+?phy_addr?-?pTmp->Start_P);
}

pTmp?=?pTmp->next;
}

/*?not?mmaped?yet?*/
if(fd? {
/*?dev?not?opened?yet?so?open?it?*/
fd?=?open?(dev?O_RDWR?|?O_SYNC);
if?(fd? {
printf(“memmap():open?%s?error!\n“?dev);
return?NULL;
}
}

/*?addr?align?in?page_size(4K)?*/
phy_addr_in_page?=?phy_addr?&?PAGE_SIZE_MASK;
page_diff?=?phy_addr?-?phy_addr_in_page;

/*?size?in?page_size?*/
size_in_page?=((size?+?page_diff?-?1)?&?PAGE_SIZE_MASK)?+?PAGE_SIZE;

addr?=?mmap?((void?*)0?size_in_page?PROT_READ|PROT_WRITE?MAP_SHARED?fd?phy_addr_in_page);
if?(addr?==?MAP_FAILED)
{
printf(“memmap():mmap?@?0x%x?error!\n“?phy_addr_in_page);
return?NULL;
}

/*?add?this?mmap?to?MMAP?Node?*/
pNew?=?(TMMAP_Node_t?*)malloc(sizeof(TMMAP_Node_t));
????if(NULL?==?pNew)
????{
????????printf(“memmap():malloc?new?node?failed!\n“);
????????return?NULL;
????}
pNew->Start_P?=?phy_addr_in_page;
pNew->Start_V?=?(unsigned?int)addr;
pNew->length?=?size_in_page;
????pNew->refcount?=?1;
pNew->next?=?NULL;

if(pTMMAPNode?==?NULL)
{
pTMMAPNode?=?pNew;
}
else
{
pTmp?=?pTMMAPNode;
while(pTmp

評論

共有 條評論