精华内容
下载资源
问答
  • 关键字: __packed,C语言,内存对齐【正文】简单的说,__packed用于表示C语言中结构的压缩,即:没有填充和对齐。定义如下:__packed struct P { ... };struct P pp; /* pp is a packed struct */__packed也可以定义...

    关键字: __packed,C语言,内存对齐

    【正文】

    简单的说,__packed用于表示C语言中结构的压缩,即:没有填充和对齐。

    定义如下:

    __packed struct P { ... };

    struct P pp;    /* pp is a packed struct */

    __packed也可以定义为:struct my_unpacked_struct { char c; int i; } __attribute__ ((__packed__));

    如果一个结构体定义为 __packed,那么其子结构体也必须为__packed(如果有的话)例如:

    struct S {...};

    __packed struct P {...};

    struct T {

    struct S ss; /* OK */

    struct P pp; /* OK */

    };

    __packed struct Q {

    struct S ss; /* faulted - sub-structs must be packed */

    struct P pp; /* OK */

    };

    __packed struct P { char c; int x; };

    __packed struct {

    struct P X;

    char z;

    struct P Y;

    }Q;

    此时,Q的内存映像如下:

    +---+---+---+---+---+---+---+---+---+---+---+

    byte  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|

    | c | ------x------ | z | c | ------x------ |

    +---+---+---+---+---+---+---+---+---+---+---+

    参考文献:

    展开全文
  • packed-vec-源码

    2021-03-19 16:53:14
    packed-vec
  • EMMC Packed Command

    2020-02-13 14:09:43
    Packed Commands - Packed Write and Packed Read 在实际应用场景中,通常会对 eMMC Device 有很多随机数据读取和写入操作,这些随机读写的目标地址往往都不是连续的,每一个随机读写都需要通过一个独立的读写流程来...

    Packed Commands - Packed Write and Packed Read

    在实际应用场景中,通常会对 eMMC Device 有很多随机数据读取和写入操作,这些随机读写的目标地址往往都不是连续的,每一个随机读写都需要通过一个独立的读写流程来实现,通常随机读写很慢。


    如下图所示:(seq 为顺序大数据读写,4k为随机读写,每笔数据4k),可以看出随机读写只有10MB/s左右。
    在这里插入图片描述

    为了改变这种情况,在 eMMC 4.5 及以后的标准中,引入了 Packed Commands 机制,将多个地址不连续的数据写入请求封装到一个 Multiple Block Write 流程中,同时将多个地址不连续的数据读取请求封装的一个 Multiple Block Read 流程中,以此减少读写请求数量,提高数据读写的效率。

    Packed Write

    发起 Packed Write 流程时,首先 Host 端会需要发送 packed flag 置 1 的 CMD23 SET_BLOCK_COUNT 命令。其中,CMD23 中的 Block Count 参数为 Packed Command Header 和实际写入的数据所占 Block 的总数。
    然后 Host 再发送 CMD25 命令给 eMMC Device,开始进行多个 Block 的数据写入。其中第 1 个(或者前 8 个) Block 数据为 Packed Command Header,它包含了各个写请求写入数据的起始地址和长度等信息。
    eMMC Devcie 在接收到数据后,会根据 Packed Command Header 的信息,将数据写入到指定的位置。

    Packed Read

    发起 Packed Read 流程时,首先 Host 端会需要发送 packed flag 置 1 的 CMD23 SET_BLOCK_COUNT 命令。其中,CMD23 中的 Block Count 参数为 Packed Command Header 所占 Block 的数量。
    然后 Host 再发送 CMD25 命令给 eMMC Device,开始进行 1 个(或者 8 个) Block 的 Packed Command Header 数据发送。Packed Command Header 包含了各个读请求读取数据的起始地址和长度等信息。
    发送完 Packed Command Header 后,Host 会再发送一个 packed flag 置 1 的 CMD23 SET_BLOCK_COUNT 命令。其中,CMD23 中的 Block Count 参数为待读取数据的 Block 的数量。
    紧接着,Host 再发送 CMD18 命令,开始进行多个 Block 的数据读取。eMMC Devcie 会解析接收到的 Packed Command Header,然后将指定的数据发送给 Host 端。

    注意:在这个Case 中,CMD25和CMD18的参数应该和 Packed Command Header 头中的第一个read/write 的地址相同(下表加粗的CMD参数)。

    Packed command Header Struct

    Entry indexOffset(bytes)nameLength(Bytes)
    -0Version1
    -1R/W1
    -2NUM_ENTRIES(=N)1
    -3padding to 8B5
    18CMD23_ARG_14
    112CMDxx_ARG_14
    216CMD23_ARG_24
    220CMDxx_ARG_24
    N8NCMD23_ARG_N4
    N8N+4CMDxx_ARG_N4
    -8N+8Paddingtill block ends
    展开全文
  • PYUV Packed YUV

    2019-12-01 21:03:28
    在VTM代码目录中有pyuv_format.pdf 题为 A Packed Planar RGB and YUV Format for Uncompressed Storage of High Dynamic Range Still Images and Videos PACKED RGB OR YUV DATA WITH 10 BIT PER SAMPLE 0xff = ...

    在VTM代码目录中有pyuv_format.pdf 题为 A Packed Planar RGB and YUV Format for Uncompressed Storage of High Dynamic Range Still Images and Videos

    Motivation: The only common approach to convey uncompressed planar 4:2:0 YUV HDR image data is to write each 10 or 12-bit sample into a 16- bit word, which increases the required capacity by 33–60 %

    找到了作者的博客:ecodis :: Video Codecs,里面这样写道:

    At the Ljubljana meeting, I also suggested adding support for a new 10- and 12-bit packed YUV/RGB image and video storage format to the VVC code base (see the report), a description of which is given below.

    在上面这段话提到的report: JVET-K0562: Report of BoG on Software development and CTC

    Note: package also includes a packed YUV format output mode.
    Recommendation: adopt changes into VTM (remains disabled by default). SW AHG to decide whether to enable macro (command line parameter would still be disabled by default).

    PACKED RGB OR YUV DATA WITH 10 BIT PER SAMPLE

    在这里插入图片描述在这里插入图片描述
    0xff = 1111 1111
    0xfc = 1111 1100
    这里慢慢看,逻辑运算,看懂了就行。5*8b=40=4*10bout[5*n]~out[5*n+4] = buf[4*n]~buf[4*n+3]

    PACKED RGB OR YUV DATA WITH 12 BIT PER SAMPLE

    在这里插入图片描述
    在这里插入图片描述
    3*8b=24=2*12b

    PACKED RGB OR YUV DATA WITH 14 BIT PER SAMPLE

    在这里插入图片描述
    7*8b=56=4*14b

    反过来

    在这里插入图片描述

    常识

    还可以学习一下这篇博客:H.266/VVC代码学习34:视频属性杂谈 - 时间有泪 - CSDN博客

    这篇博客里写了一段10位转8位的代码:

    比特深度为10,而字节是存储空间的基本计量单位,10位要占用2字节。
    10比特深度,高位的8位只有最后2位有值,将其左移8位得到的数值加上低位的8位即可得到真正的10比特深度像素值,那么接下来除以4就可以将其“下采样”成8比特深度的yuv图片。

    YUVBitConvert(int width, int height, short *yuv)//10bit深度,像素值应使用short
    {
    	unsigned char* yuv10 = new unsigned char[width * height * 3];	
    	memcpy(yuv10, yuv, width * height * 3 * sizeof(unsigned char));
    
    	unsigned char* yuv8  = m_yuv;
    	for (int i = 0; i < height * width * 3 / 2; ++i) //由10变成8,每个像素值都少了一位
    	{
    		yuv8[i] = (yuv10[2 * i] + yuv10[2 * i + 1] << 8) >> 2;
    	}
    
    	delete yuv10;
    	yuv10= NULL;
    }
    

    这个函数是基本看得懂,不过不知道怎么用,怎么传yuv进去呢?现在我懂了,这个函数应该是某个类的成员函数,m_yuv是类的一个数据成员,直接对他操作就行,应该有其他成员函数实现读取yuv给m_yuv。

    注意和YUV播放器PYUV不是一个东西。播放器 DSPLab: PYUV: raw video sequence player

    EncAppCfg.cpp:

      po::Options opts;
      opts.addOptions()
      ("PYUV", m_packedYUVMode, false, "If true then output 10-bit and 12-bit YUV data as 5-byte and 3-byte (respectively) packed YUV data. Ignored for interlaced output.")
    

    在配置文件中加上 PYUV : 1 即可(还没尝试)

    不知道这样存的yuv文件,用什么播放器可以播~?

    展开全文
  • In order to realize wideband filtering properties of frequency selective surface (FSS), FSS of closely packed elements is presented. The Y loop elements are chosen as the graphics elements. Based on ...
  • mz-packed图片放大镜

    2015-03-27 14:17:53
    用mz-packed图片放大查看功能,纯JS效果,无水印方便使用
  • Content1. Create an executable file(1) Create a C Program(2) Compile ... Unpack 1_packed.exe(1) Find Original Entry Point with x32dbg(3) Use PE Tools to save dump file(4) To Be Updated...(5) To Be Update

    1. Create an executable file

    (1) Create a C Program

    Create a new folder called “test” in C:/, and create a text document called “1.cpp” in the folder.
    Like this:
    新建文件
    Right click the file and edit it with Notepad++. Input the codes as follows.
    在这里插入图片描述

    #include<stdio.h>
    int main (){
    	printf("Hello World!\n");
    	return 0;
    }
    

    Save the file.

    (2) Compile the C program

    Open the Developer’s command prompt of Visual Studio 2017 in the start menu.
    在这里插入图片描述
    Switch to the file location C:\test using “cd C:\test”
    在这里插入图片描述
    Then compile 1.cpp using “cl 1.cpp”
    在这里插入图片描述

    We can run it using command “1.exe”
    在这里插入图片描述
    Success.

    2.Pack the program

    (1) Download UPX

    UPX is a free, portable, extendable, high-performance executable packer for several executable formats.

    We will use UPX to pack the executable file created above
    Download upx from https://github.com/upx/upx/releases/download/v3.96/upx-3.96-win32.zip
    Extract the zip file

    (2) Pack 1.exe

    1. Go to the root directory of upx in Explorer, input “cmd” in path and press Enter to enter cmd in the path of upx.
      在这里插入图片描述
      In that way, we don’t need to input the path of upx manually.
      在这里插入图片描述
    2. Use command “upx.exe C:\test\1.exe -o C:\test\1_packed.exe” to pack it.
      在这里插入图片描述
    3. 1_packed.exe is a packed file with the same function of 1.exe but the internal structure is different from the later. We can open it with IDA. The procedure and imports are as follows.
      structure overview of 1_packed.exe
      Imports of 1_packed.exe
      However, the procedure and imports of 1.exe are as follows.
      在这里插入图片描述
      在这里插入图片描述

    3. Unpack the program

    (1) Find Original Entry Point with x32dbg

    1. Open x32dbg
    2. Drug 1_packed.exe into x32dbg
    3. Press F9 to run.
    4. Find the last jmp command
      The last jmp command is the selected command in the picture.
      在这里插入图片描述
    5. Press F2 to set breakpoint for that command. Then Press F9 to run it.
      在这里插入图片描述
    6. Press F8, then we see the program which looks like C program. It begins with a “call” and a “jmp” command. In C programs the “call” command is always the entry point of the program.
      在这里插入图片描述

    (3) Use PE Tools to save dump file

    1. Keep the state of x32dbg. Open PETools and find the process by its PID.
      在这里插入图片描述
    2. Right click on it and select “Dump full” to save the file.
      在这里插入图片描述
    3. We can find Dumped.exe cannot be run. Open it with IDA. Remeber to Press “yes” here.
      (Click here and look at the first part of the article to know how to open a executable file with IDA)
      在这里插入图片描述
    4. We will find the Imports of it is empty. And there is no “strat” in function name table.
      在这里插入图片描述
      在这里插入图片描述

    (4) Restore entry point

    1. Open PETools. Tools -> PE Editor. Open Dumped.exe
      在这里插入图片描述
    2. Click “Optional Header”.
      在这里插入图片描述
    3. The address of entry point is “010812E1” .
      在这里插入图片描述
    4. The address of entry point is image base plus entry point. “01080000” is image base. So the entry point is 010812E1-01080000=12E1. Change the entry point inOptional Header to 12E1.
      在这里插入图片描述
    5. Press Ok and press Ok.
    6. Open Dumped.exe in IDA. Then we can see “start” in function name table. That means the entry point has been changed successfully.
      在这里插入图片描述

    (5) Get the Imports of the program

    1. Close IDA. Run Scylla in x32dbg.
      在这里插入图片描述
    2. “EIP” must point to the actual entry point of the program.
      在这里插入图片描述
    3. Then press “IAT Autosearch” to automatically get the address of Import Address Table. Import Addre Table is the list of addresses of extral functions for this file.
      在这里插入图片描述
    4. Copy VA. Click to dump press Ctrl+G and input VA. Press OK.
      在这里插入图片描述
    5. Right click to show address.
      在这里插入图片描述
    6. We can see that the fisrt line is empty. So the address of “VA” needs to change to 1094000.
      在这里插入图片描述
    7. Scroll down, then we can see the address of import table ends at 1094104.
      在这里插入图片描述
    8. So the size of import address table need to change to 104+4=108.
      在这里插入图片描述
    9. Then press “Get Imports”. Then the functions will be imported.
      在这里插入图片描述
    10. Click “Fix Dump” and select Dump.exe. Then we got Dump_SCY.exe
      在这里插入图片描述
    11. Open Dump-SCY.exe with IDA and we can see the imports.

    在这里插入图片描述
    12. Run it in cmd. We can see it cannot run properly.
    在这里插入图片描述

    (6) Prevent address randomization

    1. Make x32dbg the default debugger of the system. Run x32dbg as administrator. Options -> Preferences -> Misc -> “Set x32dbg as Just in Time debugger.” -> Save.
      在这里插入图片描述

    2. Run Dumped_SCY.exe again, and select Debug the program.
      在这里插入图片描述

    3. Press F8 until we see the exception.
      在这里插入图片描述

    4. Press in dump, press Ctrl+G, and input 109B018. We can see that is an invalid address.
      在这里插入图片描述

    5. Because when a process starts its base address will be chosen randomly by the operation system. We need to prevent address randomization.

    6. Open PETools -> Tools -> PE Editor. Open Dumped_SCY.exe. Go to File Header.
      在这里插入图片描述

    7. Go to characteristics.
      在这里插入图片描述

    8. Enable Reloaction stripped.
      在这里插入图片描述

    9. Press OK and OK and OK. Run it again. Success!
      在这里插入图片描述

    Finish unpacking!

    展开全文
  • Specification of Packed Encoding Rules (PER).pdf T-REC-X.691-200811-I标准
  • packed items

    2011-02-04 19:52:29
    Sometimes we met some items in inventory,but packed. the qty can be avaiable to reserve, and avaiable to transacte...
  • C语言:__packed

    2019-01-26 09:44:01
    #include &lt;stdio.h&gt;...#define __packed __attribute__((packed)) #else #pragma message "Already defined __packed" #endif struct node{ int i; char c; flo...
  • cudnn 的 nd tensor的内存排列形式有 Fully-packed Tensors、Partially-packed Tensors、Spatially Packed Tensors、Overlapping Tensors这4种,本文讲Partially-packed Tensors。 Partially-packed Tensors就是地址...
  • C中的packed

    2018-10-20 16:32:58
    packed的涵义研究 [@more@] 在C中,声明结构体时可以用__attribute__ ((__packed__))来修饰,表示压缩结构体所占用的内存空间,使后一个元素紧贴钱一个元素放置。见下面的示例程序: #include  #include  ...
  • __packed 关键字

    2020-02-10 22:28:47
    __packed 关键字的作用 我们在c语言中创建一个结构体时,编译器都会自动进行字节对齐操作,这样做是为了解决CPU读取数据的效率问题。比如我们随便申请一个结构体: Struct textStr { Char i; Int j; Float m; Double...
  • <div><p>If the HashLoginService is passed a reference to a config file that is inside a packed war, the PropertyUserStore can't use it. The PropertyUserStore should probably unpack it first. </p>...
  • npm install dotenv-packed 用法 # process.env DEBUG=false # .env file VARIABLE_1=value_1 VARIABLE_2=yes // .js file import { parseEnv , getEnv } from 'dotenv-packed' // ** Basic const { parsed } = ...
  • PackedArray:紧密打包的无符号整数的随机访问数组 TLDR 当您迫切需要uint9_t或uint17_t数组时,PackedArray可以助您一臂之力。 什么? 当您要将无序的无符号整数序列保存到内存中时,使用C编程语言,您可以在4种...
  • 1017 products packed

    2016-03-30 19:58:43
    A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6.  题意:装箱问题,有六种不同大小的箱子,将它们装入另一箱中,需要使用最少的箱子...
  • Packed record

    2009-01-05 16:05:00
    Record的内存分配,需要四字... Packed record的内存分配,不需要四字节对齐. type Rec1 =record A:Byte;//1字节 B:LongWord;//3字节 end; Rec2=packed record A:Byte;//1字节 B:LongWord;//4字节 end; Siz
  • 《Precise Detection in Densely Packed Scenes》是发表在2019cvpr上的文章并且有源码。 代码地址:https://github.com/eg4000/SKU110K_CVPR19 这篇文章的目的是对于一些人为的密集场景的物体进行检测定位。如下图所...
  • publish-packed所有依赖项与您的软件包捆绑在一起: 它首先安装所有依赖项 它将node_modules文件夹从包的根目录移至lib/node_modules 发布时,npm会忽略包根目录中的node_modules文件夹。 但是,它将所有node_...
  • packed aligned 用于指定结构体类型、联合类型、变量的地址对齐 单位:字节 大小:2的幂 char c2 __attribute__((aligned(16))) = 4 ; 思考 编译器一定会按照aligned指定的方式对齐吗? 不会 packed 指定变量和...
  • openssh6.7.deb download packed for debian7/ubuntu12.04 amd64-附件资源
  • 行业资料-电子功用-用于提高动力锂电池活性的Packed电池箱.zip
  • 九年级英语全册 Unit 14 Have you packed yet单元综合试题 人教新目标版
  • packed_simd = { version = " 0.3.4 " , package = " packed_simd_2 " } Simd<[T; N]> 警告:此板条箱仅支持最新的每晚Rust工具链,并将由取代。 文献资料 :-包含动机,设计依据,讨论等。 例子 大多数示例都...
  • logi-projects-packed 自包含的logi项目。 Logi存储库分为硬件,软件,工具等逻辑元素。这些存储库中的每一个都可能变得非常大,因此选择将其作为独立的存储库。 logi项目源参考源来自外部存储库,包括硬件,软件,...
  • 协议的数据传输中,一般将数据封装成结构体,同时对结构体进行__packed来保证数据在传输中是连续的bit流。下面实验了__packed在结构体申明和定义中怎样的写法才是正确的。 结构体申明 typedef struct { uint8_t a; ...
  • 参考了https://blog.csdn.net/weixin_43742643/article/details/116307036 和官方文档... packed_accessor_kernel, 12>>>(foo_a, &trace); 有没有哪位大佬跑通了这段代码,麻烦给个示例,谢谢了!
  • src/libponyrt/asio/epoll.c:233:34: error: taking address of packed member of 'struct epoll_event' may result in an unaligned pointer value [-Werror=address-of-packed-member] 233 | asio_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,370
精华内容 16,548
关键字:

packed