您尚未登录。

#1 Re: 全志 SOC » 分享一个F1C200S交叉编译工具包 » 2025-02-24 23:20:39

不同版本gcc编译的不兼容多说是因为gblic版本不同,同版本的gcc也可以用不同版本glibc,生成的gcc可能编译偶无法运行。

ARM平台终极解决办法:

1.用buildroot openwrt等生成gcc交叉编译工具, 它会自动编译系统rootfs kernel 等,再用这个gcc去编译应用。

2.如果buildroot编译过程 出现 错误就修改 kernel或者 package 里面的源码,添加补丁。

3.下载不同版本的buildroot替换package里面的内容修改软件版本,以适应新版本gcc。

4.大多数出现编译错误都可以在网上找到解决办法,或者kernel已经发布了补丁下载即可。

#2 Re: 全志 SOC » f1c100s/f1c200s 裸机程序。 » 2025-02-09 22:07:13

kmmyk 说:

请教大家,这个包里有个make download,因为我没有编译成功linux下的sunsi,所以我用windows的sunxi-fel下载到芯片,但串口没有任何响应,请问我的操作是否有误?

window 下操作,linux没测试过。需要先编译下载bootloader到 flash 0 ,然后下载例子到 flash 0x10000。串口使用的是 UART1输出。

download:$(BIN)
    ifeq ($(TARGET),bootloader)
		xfel spinor write 0 $(BIN)
    else
		xfel spinor write 0x10000 $(BIN)
    endif

#3 Re: 全志 SOC » 各位佬们,进来给个意见 » 2024-10-30 14:18:37

没有做过硬件最好从立创开源硬件直接下单别人测试好的工程PCB

1.先焊接电源测试没问题再焊接主控,

2.焊好不要直接通电,先万用表测试,

3上电的时候怕烧坏就用程控电源控制电流,限制电流值就不怕烧板子了。

#4 Re: 全志 SOC » f1c100s/f1c200s 裸机程序。 » 2024-10-25 11:52:22

1.已更新音频 audio,sd卡播放 wav音乐 例子。
2.vnes添加音频播放。
2.已完成FreeRTOS部分,移植过程:https://whycan.com/t_11538.html
freertos 编译

cd sources/examples/freertos/task
make all
make download

音频部分使用VeiLiang BoloRTT 工程的库文件

#5 全志 SOC » F1C100S/F1C200S 移植FreeRTOS全过程 GCC 版本 » 2024-10-25 11:40:04

nlive
回复: 2

原始工程使用f1c100s/f1c200s 裸机程序,参见 https://whycan.com/t_11525.html

工程构建:make
操作系统:windows

FreeRTOS没有ARM9的例子,ARM7和ARM9内核很相似,主要参考ARM7_LPC2000 移植。

FreeRTOS源码下载:
哇酷下载:RTOS-KernelV11.1.0.zip
github下载:https://github.com/FreeRTOS/FreeRTOS-Kernel/releases

一、文件目录结构搭建

1.解压重命名为FreeRTOS ,新建文件夹port

2.复制 FreeRTOS/portable/GCC/ARM7_LPC2000 下 port.c portISR.c portmacro.h 到 port目录下

3.复制FreeRTOS/portable/MemMang 到FreeRTOS/MemMang

4.复制 FreeRTOS/examples/template_configuration/FreeRTOSConfig.h 到 include目录下

5. 删除examples portable 文件夹。完成后的目录结构如下
目录结构


移植过程:

添加FreeRTOS 中断,修改工程文件 vectors.S,定义宏 USE_FREERTOS  , 修改 _software_interrupt 和  _irq 两个中断,

/*任务切换*/ 
_software_interrupt: 
#if defined (USE_FREERTOS)
    .word vPortYieldProcessor
#else
    .word software_interrupt
#endif

/*系统嘀嗒心跳*/ 
_irq:
#if defined (USE_FREERTOS) 
    .word vFreeRTOS_ISR
#else
    .word irq
#endif

port.c 和 portISR.c ,添加定时器初始化和定时器中断切换任务功能

port.c 添加头文件

#include "f1c100s_timer.h"
#include "f1c100s_intc.h"

定时器time0初始化:

/*
 * Setup the timer 0 to generate the tick interrupts at the required frequency.
 */
static void prvSetupTimerInterrupt(void)
{
    extern void vTickISR(void); 
 
    tim_init(TIM0, TIM_MODE_CONT, TIM_SRC_HOSC, TIM_PSC_1);
    tim_set_period(TIM0, 24000000UL/1000UL);//1ms中断
    tim_int_enable(TIM0); 
    intc_set_irq_handler(IRQ_TIMER0, vTickISR); 
    intc_enable_irq(IRQ_TIMER0); 
    tim_start(TIM0);
}

portISR.c 接管所有的中断,添加上下文切换保存和恢复,添加naked属性,禁用编译器上下文管理

/*__attribute__((naked)) 很关键 不加调度
 *使用naked属性可以告诉编译器不生成函数的prologue和epilogue代码,
 *这样任务切换函数可以自行管理寄存器的入栈和恢复,从而简化上下文管理*/
void vFreeRTOS_ISR(void) __attribute__((naked));
void vFreeRTOS_ISR(void)
{
    extern void irq_handler(void);
    /* Save the context of the interrupted task. */
    portSAVE_CONTEXT();
    /* irq all*/
    irq_handler();
    /* Restore the context of the new task. */
    portRESTORE_CONTEXT();
}

portISR.c 系统嘀嗒中断

#ifndef write32
#define write32(x, y) (*((volatile uint32_t *)(x)) = y)
#endif
#include "task.h"
void vTickISR(void)
{
    /* Increment the RTOS tick count, then look for the highest priority
     * task that is ready to run. */
    if (xTaskIncrementTick() != pdFALSE)
    {
        vTaskSwitchContext();
    }
    /* Ready for the next interrupt. */
    write32((0x01C20C00) + 0x04, (1 << 0));
}

portISR.c  添加 堆栈溢出 回调

#include "stdio.h"
void vApplicationStackOverflowHook(TaskHandle_t xTask,
                                   char *pcTaskName)
{
    printf("statck over flow:%s",pcTaskName);
}

FreeRTOSConfig.h 修改heap大小 和 位宽

#define configTOTAL_HEAP_SIZE                        512*1024
#define configTICK_TYPE_WIDTH_IN_BITS              TICK_TYPE_WIDTH_32_BITS

makefile 添加 CFLAGS+=-DUSE_FREERTOS
至此移植完成。

gcc和xfel:
usb下载工具 xfel 和USB驱动下载: xfel-v1.3.2
gcc:arm-none-eab-gcc-10.3
make rm工具在工程目录下


完整移植好的FreeRTOS 11.1工程下载:F1C200S_FreeRTOS.zip

编译: arm-none-eabi-gcc 和xfel添加到环境变量 ,打开cmd命令行 ,进入 F1C200S_FreeRTOS 目录下

make all
make download

#6 全志 SOC » f1c100s/f1c200s 裸机程序。 » 2024-10-21 17:57:02

nlive
回复: 4

整理了F1C200S的裸机学习过程,只实现了一些基础的应用。
直接上代码:

https://gitee.com/dmcus/F1C200S.git

使用make构建工程,编译工具 arm-none-eab-gcc 10.3 下载使用XBOOT 大神的 xfel
详细编译说明readme.md :https://gitee.com/dmcus/F1C200S/blob/master/README.md

没接触过make构建的参考学习例子:

https://gitee.com/dmcus/makefile-notes

开发板使用:LC-PI-200S Board CherryPi ,其他开发板未测试,请根据实际情况调整代码。

已实现功能:
外设:                GPIO I2C SPI UART USB-CDC DISPLAY  SD
移植其他开源库: SFUD LVGL8 LVGL9 FatFs infoNes VNes CherryUSB-CDC
外围设备:          GT911 24C02 W25Q128
RTOS:               RT-Thread 4.1 原版本使用scons构建,主要添加Makfe构建,移植RT-Thread Studio自动生成的代码。

暂未实现:音频、视频编解码、摄像头、麦克。


bootloader下载到flash 地址0,例子下载到 0x10000地址,运行后会拷贝到 DRAM 中运行,串口打印使用UART1。

目录结构

doc  ------文档和原理图 使用LCPI F1C200S 开发板 集成CH340E -> UART1
sources ---源码
    |bootloader -----SPL 烧录FLASH 0,log 使用 UART1
    |drivers---------f1c200s驱动
    |fc200s_brom ----sram运行的独立程序 烧录FLASH 0 支持串口
    |examples--------peripherals examples 外设样例,裸机程序 使用LCPI F1C200S 开发板
    |mksunxi --------.bin文件添加校验头工具
    |rtt-------------rt-thread 烧录到FLASH 0X10000 log 使用 UART1
tools -----make 工具 添加到环境变量
1.bootload下载
 cd sources/bootloader
   make all
   make download
 
2.i2c uart gpio 等例子编译下载
  cd sources/examples/uart
  make all
  make download

感谢大神们的无私奉献,主要参考以下开源工程。

https://github.com/nminaylov/F1C100s_projects.git
https://gitee.com/lhdjply/f1c200s_library
https://github.com/VeiLiang/BoloRTT.git

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn