函数实现-usb的通讯协议 完整版
2.1 工程配置 不勾选图 1.1中的【Use MicroLIB】,即不使用微库而使用 ARM C library。需要向 ARM C library中的函数传递堆栈的基地址和大小。图 2.1所示,ARM C library通过调用 __user_initial_stackheap函数,将堆栈的基地址和大小通过 R0~R3传递给 ARM C library函 数。 图 2.1 堆栈初始化 注:如果勾选了【Use MicroLIB】,则 ARM C library会被屏蔽掉,而MicroLIB中没有__rt_entry这个 函数,编译会报错。 2.2 函数实现 下面的程序实现了__main的前两个功能(详见 1.3所述),然后调用__rt_entry C库函 数,做一些库的初始化,__rt_entry会调用图 2.1所示的函数。代码如程序清单 2.1所示。 程序清单 2.1 __main void __main(void) { void __rt_entry(); /* 库函数声明 */ extern unsigned char Image$$RW_IRAM1$$ZI$$Base; /* ZI基地址 */ extern unsigned long Image$$RW_IRAM1$$ZI$$Length; /* ZI段长度 */ extern unsigned char Image$$RW_IRAM1$$Base; /* 执行域 data段基地址 */ extern unsigned char Load$$RW_IRAM1$$Base; /* 加载域 data段基地址 */ extern unsigned long Image$$RW_IRAM1$$Length; /* .data段长度 */ unsigned char *drc; unsigned char *src; unsigned long length; /* * 初始化.data段 */ drc = (unsigned char *)&Image$$RW_IRAM1$$Base; src = (unsigned char *)&Load$$RW_IRAM1$$Base; length = (unsigned long )&Image$$RW_IRAM1$$Length;