移植一个操作系统,这个题目看上去有点怪怪的。我十分讨厌移什么植。我最理想的移植是象RTX那样勾一下就移植好了。
但这次的芯片RTX是灰色的。根本勾不了。
我把目光移到了OSAL,上次我拼命的搞定时器中断就是这个目地,但我看网上移也很麻烦,不是移不了。而是我移完之后怕用起来不爽。
我于是把目光转到了FREERTOS,我觉得也不不太好,考来考去地。
突然看到网友移植RT-THREAD NANO我觉得这个好,于是我又做了一下。特记录一下。
一、下载PACK
https://www.rt-thread.org/download/mdk/RealThread.RT-Thread.3.1.5.pack
二、双击下载的文件装到MDK上。
三,在绿钻石处,勾选rt-thread核。
四,屏蔽修改中断it.h文件里的:
//void HardFault_Handler(void)
//void PendSV_Handler(void)
五,编译一下,提示错误是一段EORR生名,也屏蔽掉。
//#error "TODO 1: OS Tick Configuration."
这时编译同过了。其实已经移成功了。
以下程序用来检验能否运行:
#include "gd32l23x.h"
#include "systick.h"
#include "rtthread.h"
static rt_thread_t led1_thr = RT_NULL;
static void thread_led1_entry(void *parameter);
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
{
systick_config();
/* enable the LED GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOC);
/* configure LED GPIO pin */
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7 | GPIO_PIN_8);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7 | GPIO_PIN_8);
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_6 | GPIO_PIN_7);
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
/* reset LED GPIO pin */
gpio_bit_reset(GPIOA, GPIO_PIN_7 | GPIO_PIN_8);
gpio_bit_reset(GPIOC, GPIO_PIN_6 | GPIO_PIN_7);
led1_thr = rt_thread_create( "led1", /*????*/
thread_led1_entry,/*??????*/
RT_NULL,/*????????*/
256, /*?????*/
4 , /*?????*/
20); /*?????*/
rt_thread_startup(led1_thr);
while(1) {
// /* turn on LED1, turn off LED4 */
// gpio_bit_set(GPIOA, GPIO_PIN_7);
// gpio_bit_reset(GPIOC, GPIO_PIN_7);
// delay_1ms(500);
// /* turn on LED2, turn off LED1 */
// gpio_bit_set(GPIOA, GPIO_PIN_8);
// gpio_bit_reset(GPIOA, GPIO_PIN_7);
// delay_1ms(500);
// /* turn on LED3, turn off LED2 */
// gpio_bit_set(GPIOC, GPIO_PIN_6);
// gpio_bit_reset(GPIOA, GPIO_PIN_8);
// delay_1ms(500);
// /* turn on LED4, turn off LED3 */
// gpio_bit_set(GPIOC, GPIO_PIN_7);
// gpio_bit_reset(GPIOC, GPIO_PIN_6);
// delay_1ms(500);
rt_thread_mdelay(100);
}
}
static void thread_led1_entry(void *parameter)
{
while(1)
{
gpio_bit_toggle(GPIOC,GPIO_PIN_7);
rt_thread_mdelay(1000);
}
}
就是闪个灯,编译下载,程序运行正常。
本帖最后由 ddllxxrr 于 2022-1-22 22:13 编辑