#申请原创# #有奖活动#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]
准备cw32l083 printf的工程包一个。
准备RTthread nano工程源码。(可以复制一份mdk下的源码)也可以去官网下载一份:
用vscode打开cw32l083工程,确保编译通过:
在Libraries文件包下新建一个RTOS的文件夹,并把rtthread的源码下的src、include拷贝到RTOS文件夹下。
新建一个libcpu文件夹,把源码中的libcpu-arm-cortex-m0下的cpuport.c、context_gcc.S复制过来。同时把context_gcc.S重命名为contex_gcc.s。
从MDK移植过的工程中复制一份boar.c、rtconfig.h到app目录下。
修改Libraries.mk,把新加进来的文件加入
修改board.h,添加app_main.h头文件引用。
添加systick回函函数与初始化:
注释inrerrupts_cw32l083.c下的HardFault_Handler函数与void PendSV_Handler(void),避免函数的重复定义。
到此,我们的移植就告一断落,我们编后显示无警告,无错误:
在主函数中添加rtthread.h的头文件,同时添加两个任务,在主函数中启动,用于测试:
struct rt_thread thread1;
struct rt_thread thread2;
char thread1_stack[512];
char thread2_stack[512];
void thread1_entry(void*param)
{
while (1)
{
//printf("thread1 is runningrn\r\n");
GPIO_TogglePin(CW_GPIOC, GPIO_PIN_3);
rt_thread_mdelay(1000);
}
}
void thread2_entry(void*param)
{
while (1)
{
GPIO_TogglePin(CW_GPIOC, GPIO_PIN_2);
rt_thread_mdelay(500);
}
}
void thread1_init(void)
{
rt_err_t fd=rt_thread_init(&thread1,"thread1",&thread1_entry,0,&thread1_stack[0],sizeof(thread1_stack),10,10);
if(fd < 0)
{
printf("thread2 init is fail \r\n");
}
rt_thread_startup(&thread1);
}
void thread2_init(void)
{
rt_err_t fd=rt_thread_init(&thread2,"thread2",&thread2_entry,0,&thread2_stack[0],sizeof(thread2_stack),10,10);
if(fd < 0)
{
printf("thread2 init is fail \r\n");
}
rt_thread_startup(&thread2);
}
编译后下载,就可以看到两个LED闪灯同时以不同的速度闪烁,达到预期效果。附工程:
cw32l083_gcc.zip
(2.08 MB)
|