初级会员
- 积分
- 78
- 金钱
- 78
- 注册时间
- 2016-8-26
- 在线时间
- 9 小时
|
我知道数据储存的起始地址%对齐字节(N)=0才行,但是我不明白有两点
问题1:UCOSIII的系统中的浮点数打印任务的堆栈大小要8字节对齐,float无论在32位机还是64位机中都是4字节大小,
可为什么就要8字节对齐呢,而不是4字节对齐?如下程序中的__align(8) CPU_STK FLOAT_TASK_STK[FLOAT_STK_SIZE]//任务优先级
#define FLOAT_TASK_PRIO 6
//任务堆栈大小
#define FLOAT_STK_SIZE 128
//任务控制块
OS_TCB FloatTaskTCB;
//任务堆栈数组
__align(8) CPU_STK FLOAT_TASK_STK[FLOAT_STK_SIZE];
//任务函数
void float_task(void *p_arg);
问题2:本身编译器都会在编译时都会对齐的,那我们什么时候需要强制对齐呢?就比如说
LED0与了ED1的任务堆栈数组就没有进行强制的对其
//任务LED0堆栈
CPU_STK LED0_TASK_STK[LED1_STK_SIZE];
//任务LED1堆栈
CPU_STK LED1_TASK_STK[LED1_STK_SIZE];
|
|