这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425

共4条 1/1 1 跳转至

【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425

助工
2024-04-11 19:44:30   被打赏 40 分(兑奖)     打赏

【目的】
移植tobudOS到雅特力ATF425开发板。
【硬件】
雅特力AT-START-F425 V1.0
【开发环境】
MDK5.38
【移植步聚】
1、下载tobandOS源码,https://atomgit.com/OpenAtomFoundation/TobudOS
2、使用ATF425官方库。复制一份工程中的printf工程。

image.png

3、把源码的目录复制到工程的os目录下面:

image.png

4、添加一个TOS-CONFIG的文件夹,制一个示例中的配置文件到该目录下面:

5、打开keil,新建os/arch分组,官方没有雅特力方面的资料,网上也没有相关的帖子,我查看了atf425的数据手册,他是arm-v7m\cortex-m4下面的内核,因此把他下面的库加入到arch工程分组中。把r\arch\arm\arm-v7m\cortex-m4\armcc目录下面的prot_c.c、port_s.S下面添加进去,在添加时要注意下面选所有文件,才能看到.S的文件。同时把os\arch\arm\arm-v7m\common下面所有的C文件都添加进工程分组:

image.png

image.png

6、新建kernel分组,把\kernel\core路径下所有的.c文件添加\os\kernel的工程分组中。

image.png

7、添加头文件的引用到工程中,如下图所示:

image.png

8、注释掉at32f425_int.c中的PendSV_Handler,以免跟tos的系统中重复函数。

image.png

9、atf423_init.c中加入tos_k.h,注意,有些移植的教程中是tos.h,系统升级后更改为这个文件。同时在atf425_init.c中的systick中断函数中添回心跳包:

/**
  * @brief  this function handles systick handler.
  * @param  none
  * @retval none
  */
void SysTick_Handler(void)
{
	if(tos_knl_is_running())
	{
		tos_knl_irq_enter();
		tos_tick_handler();
		tos_knl_irq_leave();
	}
}

10、编译一下,通过

image.png

如果有报错,记录钩选c99

image.png

10、编写测试代码:

k_task_t task;

k_stack_t task_stack[1024];

void test_task1(void *Parameter)
{
	while(1)
	{
		at32_led_toggle(LED2);
		tos_task_delay(1000);
	}
}

void test_task2(void *Parameter)
{
	while(1)
	{
		at32_led_toggle(LED3);
		tos_task_delay(500);
	}
}
/**
  * @brief  configure button exint
  * @param  none
  * @retval none
  */
void button_exint_init(void)
{
  exint_init_type exint_init_struct;

  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE);

  scfg_exint_line_config(SCFG_PORT_SOURCE_GPIOA, SCFG_PINS_SOURCE0);

  exint_default_para_init(&exint_init_struct);
  exint_init_struct.line_enable = TRUE;
  exint_init_struct.line_mode = EXINT_LINE_INTERRUPUT;
  exint_init_struct.line_select = EXINT_LINE_0;
  exint_init_struct.line_polarity = EXINT_TRIGGER_RISING_EDGE;
  exint_init(&exint_init_struct);

  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  nvic_irq_enable(EXINT1_0_IRQn, 0, 0);
}

/**
  * @brief  button handler function
  * @param  none
  * @retval none
  */
void button_isr(void)
{
  /* delay 5ms */
  delay_ms(5);

  /* clear interrupt pending bit */
  exint_flag_clear(EXINT_LINE_0);

  /* check input pin state */
  if(SET == gpio_input_data_bit_read(USER_BUTTON_PORT, USER_BUTTON_PIN))
  {
    if(g_speed == SLOW)
      g_speed = FAST;
    else
      g_speed = SLOW;
  }
}

/**
  * @brief  exint0 interrupt handler
  * @param  none
  * @retval none
  */
void EXINT1_0_IRQHandler(void)
{
  button_isr();
}

/**
  * @brief  main function.
  * @param  none
  * @retval none
  */
int main(void)
{
	k_err_t err;
  system_clock_config();

  at32_board_init();

  button_exint_init();
		tos_knl_init();
	
	err = tos_task_create(&task,
												"task1",
												test_task1,
												NULL,
												2,
												task_stack,
												1024,
												20);
		
	
	err = tos_task_create(&task,
												"task2",
												test_task1,
												NULL,
												2,
												task_stack,
												1024,
												20);
	tos_knl_start();


下载到开发板后,可以看到两个灯不周期的闪。






关键词: AT32F425     TobudOS     开源    

工程师
2024-04-20 17:44:29     打赏
2楼

学习了。谢谢分享。


专家
2024-05-17 00:24:45     打赏
3楼

谢谢分享


专家
2024-05-20 06:58:21     打赏
4楼

学习了。谢谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]