我只是想看看实时系统的运行,线程锁什么的...
看下外设,连接简单,ok,入手野火RT1021 EVK...
到手,跑个灯吧!No,这是啥!!!!
差评,差评,还是差评!!!
平台坑:
现在keil都高,是啥都越来越高,能编译出bin吗?不能。
打开MIMXRT1021xxxxx_flexspi_nor,可以看见
#! armcc -E
这是第一个坑,为啥不是ARMCLANG,不升级吗?不能正确使用Compiler 5.0 的都可以直接睡了
(解决方法:搜索ARM_Compiler)
第二个坑,和上面是一起的问题,不过属于编译和启动问题,三兄弟能友好些吗?
fsl_flexspi_nor_boot.c , evkmimxrt1020_sdram_ini_dcd.c,fsl_flexspi_nor_boot.c
直接复制还不行,要加编译宏定义
XIP_BOOT_HEADER_ENABLE=1
XIP_BOOT_HEADER_DCD_ENABLE =1
不能写在文件中直接用吗?其他种设置,也是专家才用,才懂,直接复制编译多好
(解决办法:加入宏,复制粘贴)
第三个坑,万恶的下划线
复制startup_MIMXRT1021.S
上代码
#include "MIMXRT1021.h"
#define GPIO1_DR *(unsigned int*)(GPIO1_BASE+0x00)
#define GPIO1_GDIR *(unsigned int*)(GPIO1_BASE+0x04)
void delay(void)
{
int j,i;
j=i=0;
for (i = 0; i < 30000; ++i)
{
for (j = 0; j < 7000; ++j)
{
}
}
}
int yyy()
{
// SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));
return 0;
}
int main(void)
{
// SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));
GPIO1_GDIR |= (1U << 25);
GPIO1_GDIR |= (1U << 24);
while(1)
{
GPIO1_DR &= ~(1U << 25);
delay();
GPIO1_DR |= (1U << 25);
delay();
GPIO1_DR &= ~(1U << 24);
delay();
GPIO1_DR |= (1U << 24);
delay();
};
}
void SystemInit (void)
{
// SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));
}
what?不工作,又啥情况?
不废话,SystemInit中取消注释,成功亮灯。
协处理器跟点灯啥关系?
为啥不能在main中初始化?
startup_MIMXRT1021.S文件
再上代码
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT yyy
IMPORT __main
CPSID I ; Mask interrupts
LDR R0, =0xE000ED08
LDR R1, =__Vectors
STR R1, [R0]
LDR R2, [R1]
MSR MSP, R2
LDR R0, =SystemInit
BLX R0
CPSIE i ; Unmask interrupts
LDR R0, =yyy
BLX R0
LDR R0, =__main
BX R0
ENDP
交叉测试,注释掉SystemInit 中代码,同时修改main 和文件中协处理器开关位置,发现在main中初始化都不工作?
为啥?为啥?不知道。
但是你把__main的下划线去掉,咦,可以在main中初始化协处理器了,意不意外?惊不惊喜?