您尚未登录。

#1 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 今天 12:29:53

@echo
好从来没有联系过ST问任何问题,他家的文档、资料已经足够。
你联系过ST官方吗?

#3 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » FreeRTOS运行Lvgl,应该如何设计框架的? » 2024-10-15 11:52:39

ui界面应该和其它逻辑分离,要做到关闭ui线程,程序仍然正常工作,只是无法与用户交互。

#5 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-11 13:55:34

nes模拟器难度很高,目前流行的模拟器都不算完美。他们运行在屏幕精灵特别多的画面时,会有卡滞和闪烁问题;再好的电脑性能都无用。
相比之下,反而后来的街机、掌机模拟器表现更佳。nes模拟器开发是极具挑战的高难度技术活。

#6 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-09 21:03:33

xboot 说:

关于图像拉升缩放,这个对于NES用传统的拉伸缩放算法,对于像素级游戏简直就是灾难,有很多缩放算法专门针对像素级游戏的,这些都值得深入研究。

缩放算法确实很多,街机模拟器中有很多缩放选项。SDL内置的是线性插值算法,看起来比直接方块放大要好一点。

#7 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-09 21:00:05

@xboot
确实如此,mapper基本上是游戏厂家在卡带中扩展出来的,甚至就是为个别游戏而设计的,没有通用性可言;游戏没有玩家就完全没必要折腾了。

#8 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-09 20:57:50

尼古拉斯黑球球 说:
armstrong 说:

各种mapper是有标准的吗?还是全靠逆向分析出来的?

可以参考这里https://www.nesdev.org/wiki/Mapper

好全的nes资料啊,多谢分享

#10 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-09 15:26:20

大佬window_context_update()函数里的缩放与拉伸处理何不交给SDL_BlitSurface()来处理呢?
那两个NULL参数是源矩形和目标矩形,可以自动缩放拉伸的。surface底层是directdraw可以硬件加速的。
改成SDL_UpdateTexture和SDL_RenderCopy组合也能获得硬件加速。

#11 Re: 全志 SOC » libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。 » 2024-10-09 14:48:58

jiaowoxiaolu 说:

大佬精力无限,羡慕赚钱养家之外还能有时间搞业余爱好的人

其实除了精力,最主要还是能力问题!我是精力无限,奈何能力有限啊!=D

#13 Re: 工业芯 匠芯创 » 请教下Linux下研发的工具和各种文档 » 2024-09-18 20:05:02

所以厂商应该提供全平台开发工具,照顾每一个开发者的使用习惯!

#14 Re: 工业芯 匠芯创 » 请教下Linux下研发的工具和各种文档 » 2024-09-18 20:04:24

你好 最近因工作需要开始研究D213系列 也收到一个 D213ECV-V4的开发板测试

现在最主要的问题是本人使用MACOS工作 而官方的文档也好 工具也好很多都对此欠缺支持 另外感觉官方的开源很敷衍

比如各种工具的那个git仓库 直接当网盘提供了各种工具的压缩包 结果里面还是exe的
再比如说qemu倒是带了for macos 结果又依赖特定的libjpeg之类的动态库 当然这些都是可以忍受的
最难忍受的是烧录工具这么基本的没专门提供 需要自己去慢慢摸索

#16 Re: 全志 SOC » F1C100s用DMA加速spiflash启动 » 2024-09-03 19:55:59

DOUT+DMA模式,太快了!若SPI时钟设为100MHZ,能达到25MB/S;保险起见设置SPI为50MHZ,也有12.5MB/S。
启动个RTOS应用简直了。

#include <stdint.h>
#include <string.h>
#include "f1c100s/reg-ccu.h"
#include "io.h"

#define SPI_USE_DMA (1)

enum {
  SPI_GCR = 0x04,
  SPI_TCR = 0x08,
  SPI_IER = 0x10,
  SPI_ISR = 0x14,
  SPI_FCR = 0x18,
  SPI_FSR = 0x1c,
  SPI_WCR = 0x20,
  SPI_CCR = 0x24,
  SPI_MBC = 0x30,
  SPI_MTC = 0x34,
  SPI_BCC = 0x38,
  SPI_TXD = 0x200,
  SPI_RXD = 0x300,
};

#if SPI_USE_DMA > 0

enum {
  DMA0 = 0,
  DMA1,
  DMA2,
  DMA3,
};

enum {
  NDMA = 0,
  DDMA,
};

#define NDMA_TRANS_LEN  (128u*1024)
#define DDMA_TRANS_LEN  (16u*1024*1024)

/********** DMA info *************/
#define DMA_NO        (DMA0)
#define DMA_MODE      (NDMA)  /* SPI only support NDMA */
#define DMA_TRANS_LEN ((DMA_MODE == NDMA) ? (NDMA_TRANS_LEN) : (DDMA_TRANS_LEN))

#define DMA_BASE              (0x01C02000)

#define DMA_ICR               (DMA_BASE + 0x00)
#define DMA_ISR               (DMA_BASE + 0x04)
#define DMA_PCR               (DMA_BASE + 0x08)

#define NDMA_CR(dma_n)        (DMA_BASE + 0x100 + 0x20*dma_n + 0x0)
#define NDMA_SRC_ADDR(dma_n)  (DMA_BASE + 0x100 + 0x20*dma_n + 0x4)
#define NDMA_DES_ADDR(dma_n)  (DMA_BASE + 0x100 + 0x20*dma_n + 0x8)
#define NDMA_BCR(dma_n)       (DMA_BASE + 0x100 + 0x20*dma_n + 0xC)

#define DDMA_CR(dma_n)        (DMA_BASE + 0x300 + 0x20*dma_n + 0x0)
#define DDMA_SRC_ADDR(dma_n)  (DMA_BASE + 0x300 + 0x20*dma_n + 0x4)
#define DDMA_DES_ADDR(dma_n)  (DMA_BASE + 0x300 + 0x20*dma_n + 0x8)
#define DDMA_BCR(dma_n)       (DMA_BASE + 0x300 + 0x20*dma_n + 0xC)
#define DDMA_PR(dma_n)        (DMA_BASE + 0x300 + 0x20*dma_n + 0x18)
#define DDMA_GD(dma_n)        (DMA_BASE + 0x300 + 0x20*dma_n + 0x1C)

static void sdelay(int loops)
{
loop_again:
  __asm volatile {
    SUBS loops, loops, #1
    BNE loop_again
  }
}

static void sys_dma_init(void)
{
  /* Enable gate for DMA clock, and perform softreset */
  write32(F1C100S_CCU_BASE + CCU_BUS_CLK_GATE0, read32(F1C100S_CCU_BASE + CCU_BUS_CLK_GATE0) | (0x1 << 6));
  write32(F1C100S_CCU_BASE + CCU_BUS_SOFT_RST0, read32(F1C100S_CCU_BASE + CCU_BUS_SOFT_RST0) & (~(0x1 << 6)));
  sdelay(20);
  write32(F1C100S_CCU_BASE + CCU_BUS_SOFT_RST0, read32(F1C100S_CCU_BASE + CCU_BUS_SOFT_RST0) | (0x1 << 6));
}

static void sys_dma_deinit(void)
{
  write32(F1C100S_CCU_BASE + CCU_BUS_CLK_GATE0, read32(F1C100S_CCU_BASE + CCU_BUS_CLK_GATE0) & (~(0x1 << 6)));
}

static uint32_t sys_dma_transfer_len_get(void)
{
  return DMA_TRANS_LEN;
}

static void sys_spi_dma_set(void* dst, void* src, uint32_t len)
{
  uint32_t val;

  write32(NDMA_SRC_ADDR(DMA_NO), (uint32_t)src);
  write32(NDMA_DES_ADDR(DMA_NO), (uint32_t)dst);
  write32(NDMA_BCR(DMA_NO), len);

  val = (1u << 31) | (0x11 << 16) | (0x1 << 5) | (0x4 << 0);
  write32(NDMA_CR(DMA_NO), val);
}

static void sys_spi_dma_start(uint32_t len)
{
  uint32_t reg_base = 0x01c05000;
  uint32_t val;

  write32(reg_base + SPI_MBC, len);
  write32(reg_base + SPI_MTC, 0);
  write32(reg_base + SPI_BCC, (1 << 28)); // dual-mode

  val = read32(reg_base + SPI_FCR);
  val |= (1 << 8) | (1 << 0);
  write32(reg_base + SPI_FCR, val);

  write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
}

static void sys_dma_wait_end(void)
{
  /* when the dma end, it clear this bit automatically */
  while (read32(NDMA_CR(DMA_NO)) & (1u << 31));
}

#endif

void sys_spi_flash_init(void)
{
  uint32_t addr;
  uint32_t val;

  /* Config GPIOC0, GPIOC1, GPIOC2 and GPIOC3 */
  addr = 0x01c20848 + 0x00;
  val = read32(addr);
  val &= ~(0xf << ((0 & 0x7) << 2));
  val |= ((0x2 & 0x7) << ((0 & 0x7) << 2));
  write32(addr, val);

  val = read32(addr);
  val &= ~(0xf << ((1 & 0x7) << 2));
  val |= ((0x2 & 0x7) << ((1 & 0x7) << 2));
  write32(addr, val);

  val = read32(addr);
  val &= ~(0xf << ((2 & 0x7) << 2));
  val |= ((0x2 & 0x7) << ((2 & 0x7) << 2));
  write32(addr, val);

  val = read32(addr);
  val &= ~(0xf << ((3 & 0x7) << 2));
  val |= ((0x2 & 0x7) << ((3 & 0x7) << 2));
  write32(addr, val);

  /* Deassert spi0 reset */
  addr = 0x01c202c0;
  val = read32(addr);
  val |= (1 << 20);
  write32(addr, val);

  /* Open the spi0 bus gate */
  addr = 0x01c20000 + 0x60;
  val = read32(addr);
  val |= (1 << 20);
  write32(addr, val);

  /* Set spi clock rate control register, divided by 4 */
  addr = 0x01c05000;
  write32(addr + SPI_CCR, 0x00001001);

  /* Enable spi0 and do a soft reset */
  addr = 0x01c05000;
  val = read32(addr + SPI_GCR);
  val |= (1UL << 31) | (1 << 7) | (1 << 1) | (1 << 0);  // Transmit Pause Enable (TP_EN)
  write32(addr + SPI_GCR, val);
  while (read32(addr + SPI_GCR) & (1UL << 31));

  val = read32(addr + SPI_TCR);
  val &= ~(0x3 << 0);
  val |= (1 << 6) | (1 << 2);
  write32(addr + SPI_TCR, val);

  val = read32(addr + SPI_FCR);
  val |= (1UL << 31) | (1 << 15);
  write32(addr + SPI_FCR, val);

#if SPI_USE_DMA > 0
  sys_dma_init();
#endif
}

void sys_spi_flash_exit(void)
{
  uint32_t addr = 0x01c05000;
  uint32_t val;

  /* Disable the spi0 controller */
  val = read32(addr + SPI_GCR);
  val &= ~((1 << 1) | (1 << 0));
  write32(addr + SPI_GCR, val);

#if SPI_USE_DMA > 0
  sys_dma_deinit();
#endif
}

static void sys_spi_select(void)
{
  uint32_t addr = 0x01c05000;
  uint32_t val;

  val = read32(addr + SPI_TCR);
  val &= ~((0x3 << 4) | (0x1 << 7));
  val |= ((0 & 0x3) << 4) | (0x0 << 7);
  write32(addr + SPI_TCR, val);
}

static void sys_spi_deselect(void)
{
  uint32_t addr = 0x01c05000;
  uint32_t val;

  val = read32(addr + SPI_TCR);
  val &= ~((0x3 << 4) | (0x1 << 7));
  val |= ((0 & 0x3) << 4) | (0x1 << 7);
  write32(addr + SPI_TCR, val);
}

static void sys_spi_write_txbuf(uint8_t* buf, int len)
{
  uint32_t addr = 0x01c05000;
  int i;

  if (!buf)
    len = 0;

  write32(addr + SPI_MTC, len & 0xffffff);
  write32(addr + SPI_BCC, len & 0xffffff);
  for (i = 0; i < len; ++i)
    write8(addr + SPI_TXD, *buf++);
}

static int sys_spi_transfer(void* txbuf, void* rxbuf, int len)
{
  uint32_t addr = 0x01c05000;
  int count = len;
  uint8_t* tx = txbuf;
  uint8_t* rx = rxbuf;
  uint8_t val;
  int n, i;

  while (count > 0) {
    n = (count <= 64) ? count : 64;
    write32(addr + SPI_MBC, n);
    sys_spi_write_txbuf(tx, n);
    write32(addr + SPI_TCR, read32(addr + SPI_TCR) | (1UL << 31));

    while ((read32(addr + SPI_FSR) & 0xff) < n);
    for (i = 0; i < n; i++) {
      val = read8(addr + SPI_RXD);
      if (rx)
        *rx++ = val;
    }

    if (tx)
      tx += n;
    count -= n;
  }
  return len;
}

static int sys_spi_write_then_read(void* txbuf, int txlen, void* rxbuf, int rxlen)
{
  if (sys_spi_transfer(txbuf, NULL, txlen) != txlen)
    return -1;
  if (sys_spi_transfer(NULL, rxbuf, rxlen) != rxlen)
    return -1;
  return 0;
}

void sys_spi_flash_read(int addr, void* buf, int count)
{
  uint8_t tx[4];

  tx[0] = 0x03;
  tx[1] = (uint8_t)(addr >> 16);
  tx[2] = (uint8_t)(addr >> 8);
  tx[3] = (uint8_t)(addr >> 0);
  sys_spi_select();
  sys_spi_write_then_read(tx, 4, buf, count);
  sys_spi_deselect();
}

void sys_spi_flash_read_dualout(int addr, void* buf, int count)
{
  uint32_t reg_base = 0x01c05000;
  uint8_t* rxbuf = buf;
  uint8_t tx[5];
  int n, i, c;

  n = 0;
  tx[n++] = 0x3b;   // fast read dual-output
  tx[n++] = (uint8_t)(addr >> 16);
  tx[n++] = (uint8_t)(addr >> 8);
  tx[n++] = (uint8_t)(addr >> 0);
  tx[n++] = 0;
  sys_spi_select();
  write32(reg_base + SPI_MBC, n);
  write32(reg_base + SPI_MTC, n);
  write32(reg_base + SPI_BCC, n);
  for (i = 0; i < n; i++) {
    write8(reg_base + SPI_TXD, tx[i]);
  }
  write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
  while (read32(reg_base + SPI_TCR) & (1u << 31));
  write32(reg_base + SPI_FCR, read32(reg_base + SPI_FCR) | 0x80008000u);
  while (count > 0) {
    n = ((count <= 4096) ? count : 4096);
    write32(reg_base + SPI_MBC, n);
    write32(reg_base + SPI_MTC, 0);
    write32(reg_base + SPI_BCC, (1 << 28)); // dual-mode
    write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
    for (i = n; i > 0;) {
      if ((c = (read32(reg_base + SPI_FSR) & 0xff)) > 0) {
        i -= c;
        while (c-- > 0) {
          *rxbuf++ = read8(reg_base + SPI_RXD);
        }
      }
    }
    count -= n;
  }
  sys_spi_deselect();
}

#if SPI_USE_DMA > 0

void sys_spi_flash_read_dma(int addr, void* buf, uint32_t count)
{
  uint32_t reg_base = 0x01c05000;
  uint32_t dma_max_len;
  uint8_t* rxbuf = buf;
  uint8_t tx[5];
  uint32_t n, i;

  n = 0;
  tx[n++] = 0x3b;   // fast read dual-output
  tx[n++] = (uint8_t)(addr >> 16);
  tx[n++] = (uint8_t)(addr >> 8);
  tx[n++] = (uint8_t)(addr >> 0);
  tx[n++] = 0;
  sys_spi_select();
  write32(reg_base + SPI_MBC, n);
  write32(reg_base + SPI_MTC, n);
  write32(reg_base + SPI_BCC, n);
  for (i = 0; i < n; i++) {
    write8(reg_base + SPI_TXD, tx[i]);
  }
  write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
  while (read32(reg_base + SPI_TCR) & (1u << 31));
  write32(reg_base + SPI_FCR, read32(reg_base + SPI_FCR) | 0x80008000u);
  dma_max_len = sys_dma_transfer_len_get();
  while (count > 0) {
    n = ((count <= dma_max_len) ? count : dma_max_len);
    sys_spi_dma_set(rxbuf, (void*)(reg_base + SPI_RXD), n);
    sys_spi_dma_start(n);
    sys_dma_wait_end();
    rxbuf += n;
    count -= n;
  }
  sys_spi_deselect();
}

#endif

#17 Re: 全志 SOC » [请教] 如何在F1C100S上移植过FreeRTOS? GCC版本 » 2024-08-01 13:16:13

有别人的轮子不用,非得自己造吗?除非自己水平更高,造得更好。

#18 Re: 全志 SOC » F133B DDR初始化 » 2024-06-23 09:44:12

做得不足还不能发批评发牢骚,真是正能量社会啊

#19 Re: 全志 SOC » 真是渣渣,T113-S3 tplayerdemo 测试播放1280x720视频,两小时就挂了 » 2024-05-17 13:54:37

扩大VideoConf.nVbvBufferSize参数,是不是能延长到4小时才挂掉?

#20 Re: 全志 SOC » F1C100S DMA » 2024-05-16 17:18:04

完全可以,而且可以一次性把整屏像素都送出去

#21 Re: ESP32/ESP8266 » 乐鑫的工具链做得好吗? » 2024-05-11 12:40:35

我就做到idf4.2.4和idf5.2.1共存了,只是你不会而已。

#22 Re: ESP32/ESP8266 » 乐鑫的工具链做得好吗? » 2024-05-11 11:31:31

我觉得IDF做的很好了。好几个环境要共存,无非就是对应写几个cmd文件,在cmd文件里设置对应的环境变量,然后start命令行窗口而已。

#23 Re: ESP32/ESP8266 » 请教下ESP32 S3的USB HOST接口是否可以扩展以太网有线网卡? » 2024-05-11 11:23:43

Leotian 说:

目前ESP32 S3无法跑Linux系统,通过USB HOST拓展有线网卡不现实,但有其它方案:比如通过SPI形式拓展有线网卡芯片如W5500之类的能实现,理论上可以实现数据转发

恐怕CH390更适合这种场景,而不是W5500

#24 Re: 工业芯 匠芯创 » 请问,rgb888和argb8888,区别大吗? » 2024-05-11 10:34:45

rgb888,argb8888这种表达的是像素在内存里的布局,其中rgb888可以是3字节,也可以是4字节(最高字节忽略);而argb8888是4字节(最高字节是透明度)。他们送到显示屏时都是24位色。内存像素布局和显示屏RGB信号没有必然对应的关系!
比如内存布局是rgb888,通过LCD控制器也可以输出RGB565的颜色信号,同时也可以翻转R/B。

#25 Re: 全志 SOC » Linux时间戳到2038年后怎办? » 2024-05-09 19:09:21

假如我的产品规划寿命是15年,那么2038回退15年就是2023年;也就是我现在必须已经解决2038问题!

#26 Re: 全志 SOC » Linux时间戳到2038年后怎办? » 2024-05-09 11:39:46

这个问题必须提前解决的。假如某个产品一旦出去就要用个10年以上,那么就要在2028年之前解决该问题。根本不能拖到2038年再说。

#27 全志 SOC » F1C100s启动应用加速:SPI启用DOUT模式(无需启用DMA) » 2024-05-06 19:23:59

armstrong
回复: 1

在spl代码中,用下面的代码替代sys_spi_flash_read函数,就可以最大速度加载app到ram执行。
我的AHB频率是200MHZ,SPI配置为50Mhz(100Mhz不太稳定),下面的代码启用DOUT模式传输,所以理论读取速度是12.5MB/秒。
BROM加载SPL大约150ms,而这段代码加载3MB的app代码仅需250ms,总共400毫秒就能启动3MB的应用程序。

void sys_spi_flash_read_dualout(int addr, void* buf, int count)
{
  uint32_t reg_base = 0x01c05000;
  uint8_t* rxbuf = buf;
  uint8_t tx[5];
  int n, i, c;

  n = 0;
  tx[n++] = 0x3b;   // fast read dual-output
  tx[n++] = (uint8_t)(addr >> 16);
  tx[n++] = (uint8_t)(addr >> 8);
  tx[n++] = (uint8_t)(addr >> 0);
  tx[n++] = 0;
  sys_spi_select();
  write32(reg_base + SPI_MBC, n);
  write32(reg_base + SPI_MTC, n);
  write32(reg_base + SPI_BCC, n);
  for (i = 0; i < n; i++) {
    write8(reg_base + SPI_TXD, tx[i]);
  }
  write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
  while (read32(reg_base + SPI_TCR) & (1u << 31));
  write32(reg_base + SPI_FCR, read32(reg_base + SPI_FCR) | 0x80008000u);
  while (count > 0) {
    n = ((count <= 4096) ? count : 4096);
    write32(reg_base + SPI_MBC, n);
    write32(reg_base + SPI_MTC, 0);
    write32(reg_base + SPI_BCC, (1 << 28)); // dual-mode
    write32(reg_base + SPI_TCR, read32(reg_base + SPI_TCR) | (1u << 31));
    for (i = n; i > 0;) {
      // 这里代码看起来很累赘,但是这样却能快速读空RXFIFO!
      if ((c = (read32(reg_base + SPI_FSR) & 0xff)) > 0) {
        i -= c;
        while (c-- > 0) {
          *rxbuf++ = read8(reg_base + SPI_RXD);
        }
      }
    }
    count -= n;
  }
  sys_spi_deselect();
}

#28 Re: 全志 SOC » 对于V3s 和 H3 上面 Jtag 的疑问 » 2024-04-30 12:26:38

论坛里个个都是人才,我超喜欢在这里~

#32 Re: 全志 SOC » sunxi-fel uboot到底是怎么样的过程 » 2024-04-25 01:21:27

看了这个文件里的代码你会清晰的理解:
fel.zip

#34 Re: 工业芯 匠芯创 » 工业级芯片之三问三答:可靠性和稳定性是匠芯创产品在软件端的核心指标 » 2024-04-24 14:39:53

文档还是在线的好。官方可以直接修改和增加内容,变更直达用户,不会碎片化。
像乐鑫这样的在线文档系统可以借鉴以下:
https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/index.html

#35 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2024-04-24 13:41:37

好多人喜欢开源的LVGL,那就随手加个演示吧,代码在gitee上。
https://gitee.com/xuyao2020/F1C100s_with_Keil_RTX4_emWin5.git
(打开FELinside-LVGL.uvproj项目文件编译得到如下视频演示的bin)

#36 Re: 全志 SOC » f1c200s自制 win10 USB显示屏 » 2024-04-21 18:10:09

@香酥肉饼
按照这样算起来:480*272*2*60大约要15MB/S的传输速度呀,是这样吗?如果每一帧压缩成jpg,那么到F1C100s这头要解码后显示,会节省带宽,但会增加延时并影响帧率,是吗?

#37 Re: 全志 SOC » 求一个编好的支持32Mflash烧录的sunxi-fel,F1S100S的 » 2024-04-20 11:35:22

belen 说:

在16Mflash下正常,现在换成32M了。在论坛上下了几个支持32M的烧了程序都不能正常运行,代码下到ram中能正常运行。谁能共享一下编好的exe文件呀。
万分感谢!!

xman(xboot作者)的xfel已经支持32M了,而且还支持spi-nand呢。

#38 Re: 全志 SOC » OOM炸了,DRAM不够,SWAP来凑 » 2024-04-20 11:33:28

@晕哥
原来如此,那我理解错了。
我以为“护栏”指的是:某种防范措施,能实现发生OOM时应用不被杀,而仅仅是malloc返回NULL。

#39 Re: 全志 SOC » OOM炸了,DRAM不够,SWAP来凑 » 2024-04-19 11:09:09

请教晕哥,你演示的无护栏测试代码中,已经判断了指针是否为NULL,这个做法是应用程序普遍的处理方式;即便这样应用还是会被杀。
那如何编写有护栏的应用呢?要求即便内存oom发生,应用程序也不会被杀。是通过signal()函数实现吗?请教晕哥。

#40 Re: 全志 SOC » 模仿stm32标准库风格写的库文件(f1c100s/f1c200s),且已移植了rt-thread、lvgl、fatfs、cherryusb » 2024-04-11 20:51:18

lanlanzhilian 说:

gcc编译环境对于习惯了STM32的老人真是太难了,抽空移植到了keil,有需要的可以联系,目前因boot跟公司其他产品通用,暂时没有开源
https://whycan.com/files/members/8049/微信截图_20240329133209.jpg

大佬,请给我一份你截图中的工程,谢谢!我的邮箱是:26750452@qq.com

#41 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2024-01-29 11:10:40

hpxzw520 说:

@armstrong
大佬,这个5.46的库,使用1920x1080,RGB565会有问题,不出界面,
f1c100s用1920x1080,RGB888,屏闪很严重,

RGB565是不是有什么bug?

应该换方案了,f1c100s上FHD有点强人锁男呀。emwin在这方面是没有限制的,你的问题另有原因。

#43 Re: Openwrt/LEDE/AR9331/MT7688/RT5350 » 我想做一个无线桥接器, 有什么解决方案? » 2024-01-10 21:44:12

把电脑的网线拔下来,接到交换机A,然后把你的硬件也接到交换机A上,再拿一根新网线,把电脑也接到交换机A上,就这样。

#44 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2024-01-09 22:57:33

@海石生风
我说的“兆易除外”是对兆易的肯定,兆易(GD)的芯片不比他模仿的对象(ST)便宜,可兆易的文档还算完整,所以他们的芯片贵点我照样有好感。

#45 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2024-01-09 17:11:44

@echo
厂家和开发者是合作关系,互相依赖互相获益。你这说法满满的对立关系啊,这样的厂家恐怕真不应该活着

#46 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2024-01-09 17:09:01

@echo
楼主说的是资料,资料仅包括文档、库、示例,这些东西,是可以复制的东西。你就偷换概念,说成技术支持了,技术支持需要耗费无限的人力、物力。说还没个自知之明呢,买个几块钱的东西,还要负责培训到会用?过度设想了吧!

#47 Re: RK3288/RK3399/RK1108 » 为什么瑞芯微公开资料这么少呢 » 2024-01-09 17:04:29

echo 说:

因为大量的个人用户会占用宝贵的技术支持资源,并且不产生价值

你这说法不对,个人用户并不需要他们的技术支持,只需要他们开放文档而已,开发者自己会研究。
我看现实原因是他们根本拿不出像样的技术文档,更别谈开不开放了。国内多数厂家(兆易除外)就这尿性!

#49 Re: 全志 SOC » 熬了几百个通宵,终于搞定V3S裸奔(从boot写起,到程序运行) » 2023-12-29 13:51:10

楼主的yiyiya os是什么类型的OS?是posix接口的OS吗?为什么称之为裸机呢?

#52 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 花了小半天 搭了个全新版本 eclipse + gcc ... » 2023-12-26 13:54:13

@musich
我也喜欢IAR的简洁高效。可目前还得不到risc-v的和谐,只能是限制版;请问楼主有经验分享吗?

#53 Re: ESP32/ESP8266 » ESP32S3真愁死了,升级到4.4.4后wifi总是报auth -> init (200) » 2023-03-19 18:56:22

我用idf-v4.2.4在华硕双频路由器下也出现这个问题,但是连接其它多款tp-link路由器都正常。匪夷所思。
补充:我的芯片是ESP32

#54 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » F1C100s 求ST7789屏幕 » 2023-03-05 13:00:02

淘宝上搜“中景园”,他家屏幕性价比高,接受定制。

#64 Re: 全志 SOC » 发现一个有意思的东西,4.3寸触摸屏,用的F1C200S » 2022-04-28 16:58:39

@Gentlepig
不考虑下SSD201/202吗?
SSD201官方售价28元/片,双核A7,64MB DDR2,邮票孔核心板51元/片。

#68 Re: 全志 SOC » F1C200S显示问题 » 2022-04-02 16:53:47

到网上找一个/dev/fb0的纯色刷屏源码编译起来就可以测试了。

#69 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » GUI前端与C后端多线程的问题 » 2022-03-22 09:01:02

多线程是不能运行两个独立的可执行程序的,进程和线程是不同的概念。

#70 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » GUI前端与C后端多线程的问题 » 2022-03-22 08:59:38

后端是已经编译好的可执行文件吗,还是C库?
如果是可执行文件,就作为子进程执行,用进程通信的方法沟通;
如果是C库就简单些,直接用P/invoke。

#71 Re: Cortex M0/M3/M4/M7 » 一个GD32的CAN外设硬件bug » 2022-03-12 19:12:58

如果卖出去的产品依赖此功能,那就是真的被坑了。芯片厂家号称完全兼容的前提下,开发者忽略这个细节的测试是完全合理的,这是厂家说话说过头了。

#74 Re: 全志 SOC » f1c100s跑rttt+lvgl画面有撕裂感 » 2021-12-16 17:31:16

lvgl\examples\porting\lv_port_disp_template.c

void lv_port_disp_init(void)
{
    /*-------------------------
     * Initialize your display
     * -----------------------*/
    disp_init();

    /*-----------------------------
     * Create a buffer for drawing
     *----------------------------*/

    /**
     * LVGL requires a buffer where it internally draws the widgets.
     * Later this buffer will passed to your display driver's `flush_cb` to copy its content to your display.
     * The buffer has to be greater than 1 display row
     *
     * There are 3 buffering configurations:
     * 1. Create ONE buffer:
     *      LVGL will draw the display's content here and writes it to your display
     *
     * 2. Create TWO buffer:
     *      LVGL will draw the display's content to a buffer and writes it your display.
     *      You should use DMA to write the buffer's content to the display.
     *      It will enable LVGL to draw the next part of the screen to the other buffer while
     *      the data is being sent form the first buffer. It makes rendering and flushing parallel.
     *
     * 3. Double buffering
     *      Set 2 screens sized buffers and set disp_drv.full_refresh = 1.
     *      This way LVGL will always provide the whole rendered screen in `flush_cb`
     *      and you only need to change the frame buffer's address.
     */

    /* Example for 1) */
    static lv_disp_draw_buf_t draw_buf_dsc_1;
    static lv_color_t buf_1[MY_DISP_HOR_RES * 10];                          /*A buffer for 10 rows*/
    lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10);   /*Initialize the display buffer*/

    /* Example for 2) */
    static lv_disp_draw_buf_t draw_buf_dsc_2;
    static lv_color_t buf_2_1[MY_DISP_HOR_RES * 10];                        /*A buffer for 10 rows*/
    static lv_color_t buf_2_1[MY_DISP_HOR_RES * 10];                        /*An other buffer for 10 rows*/
    lv_disp_draw_buf_init(&draw_buf_dsc_2, buf_2_1, buf_2_1, MY_DISP_HOR_RES * 10);   /*Initialize the display buffer*/

    /* Example for 3) also set disp_drv.full_refresh = 1 below*/
    static lv_disp_draw_buf_t draw_buf_dsc_3;
    static lv_color_t buf_3_1[MY_DISP_HOR_RES * MY_DISP_VER_RES];            /*A screen sized buffer*/
    static lv_color_t buf_3_1[MY_DISP_HOR_RES * MY_DISP_VER_RES];            /*An other screen sized buffer*/
    lv_disp_draw_buf_init(&draw_buf_dsc_3, buf_3_1, buf_3_2, MY_DISP_VER_RES * LV_VER_RES_MAX);   /*Initialize the display buffer*/

    /*-----------------------------------
     * Register the display in LVGL
     *----------------------------------*/

    static lv_disp_drv_t disp_drv;                         /*Descriptor of a display driver*/
    lv_disp_drv_init(&disp_drv);                    /*Basic initialization*/

    /*Set up the functions to access to your display*/

    /*Set the resolution of the display*/
    disp_drv.hor_res = 480;
    disp_drv.ver_res = 320;

    /*Used to copy the buffer's content to the display*/
    disp_drv.flush_cb = disp_flush;

    /*Set a display buffer*/
    disp_drv.draw_buf = &draw_buf_dsc_1;

    /*Required for Example 3)*/
    //disp_drv.full_refresh = 1

    /* Fill a memory array with a color if you have GPU.
     * Note that, in lv_conf.h you can enable GPUs that has built-in support in LVGL.
     * But if you have a different GPU you can use with this callback.*/
    //disp_drv.gpu_fill_cb = gpu_fill;

    /*Finally register the driver*/
    lv_disp_drv_register(&disp_drv);
}

#75 Re: 全志 SOC » f1c100s跑rttt+lvgl画面有撕裂感 » 2021-12-16 17:22:57

不过,仅靠软件上是不能解决撕裂感的。双缓存的前后台切换需要与硬件的帧同步信号(游戏里叫垂直同步)配合才行。

#76 Re: 全志 SOC » f1c100s跑rttt+lvgl画面有撕裂感 » 2021-12-16 17:16:51

启用全尺寸双缓存,需要这个标志
display_driver.full_refresh = 1;  /* 双完整帧缓存模式需要置1 */

#77 Re: 全志 SOC » f1c100s性能和stm32哪个型号性能差不多啊 » 2021-12-15 12:28:30

你的M7什么配置?多大SDRAM,32位还是16位数据总线?

#78 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 有朋友玩过阻抗么? » 2021-12-10 13:51:24

玩过,起初很好玩,后来玩得想吐,现在谁提我就想跟谁玩命。

#79 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2021-12-09 19:01:54

吴助建 说:

你们说的都对,都是我的错。
我只是建议而已,听不听不在于我。
我以后少来就是了,就没那么多烦心事。
估计也没人希罕我来。

别这么说嘛,其实你挺有主见的。
网络虽大,能交流的地方不多了。

#80 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2021-12-09 17:02:52

站长听着:大家到饭店里来,是来找饭吃、找好酒、和朋友聊聊天的,酒店里的饭菜酒水,全部需要付钱才能给吃,这不符合大家的愿望,得改。

#81 Re: 全志 SOC » 网站需要改革,放开文件下载权限(不需要与积分挂钩) » 2021-12-09 17:00:25

吴助建 说:

记得有个叫amobbs的,现在基本上不去了。

是基本上不去,还是基本不去上?

#82 Re: Cortex M0/M3/M4/M7 » 自制三菱PLC-(暂支持27条基本指令,平台:cortex-m3) » 2021-12-08 09:30:56

什么是emGE?这界面怎么这么像野火的emXGUI和刘巍的作品呢?

#86 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 请教大家,fb RGB565 color key与ARGB1555问题 » 2021-11-22 20:09:47

dgtg 说:

@armstrong

谢谢大神分析,我也知道是这个原因。
所以来请教下大家是如何处理的? ARGB1555有可能解决此问题吗?

不行的。ARGB1555顾名思义是bit15作为是否透明的标记,而没有透明度,跟关键色一个德行。

#87 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 请教大家,fb RGB565 color key与ARGB1555问题 » 2021-11-22 16:07:43

关键色是精确匹配的单一颜色,你这个现象是因为字体的抗锯齿算法混合了关键色,形成了与关键色接近的颜色,但它却不是关键色。显然这里用关键色无法达到你要的效果,这就是为什么许多屏幕的OSD都是非抗锯齿的,或者索性osd内容限制在一个不透明矩形内。

#88 Re: 全志 SOC » f1c100s+lvgl 渐变色显示效果那么差的吗, » 2021-11-22 15:20:58

我估计是touchgfx的开发工具的功劳,它转换过程中用了dither算法,图片就会很自然。
而lvgl的转换工具没有这么牛逼。

#89 Re: 全志 SOC » f1c100s+lvgl 渐变色显示效果那么差的吗, » 2021-11-22 12:36:23

上图是电脑截屏,下图是实际LCD屏,效果明显不同。

#90 Re: 全志 SOC » 能否移植lakka系统(一个游戏模拟器系统)到f1c200s上呢? » 2021-11-19 12:01:02

我用树莓派zero跑lakka,性能够呛。f1c200s还不如树莓派zero,别折腾了。

#92 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Linux下如何通过dlopen和dlsym使用C++编译好的so动态库中的类 » 2021-11-16 16:46:09

大家都知道gdi+是用于C++开发的,我看了一下mingw下的gdi+,它是在一堆头文件里重新定义了C++对象,而对象的构造函数和析构函数分别调用相关资源的create和delete函数。也就是说,gdi+的dll导出的标号仍然是C标号,声明在gdiplusflat.h文件里,而非C++。只是靠头文件封装成了C++类而已。

#94 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Linux下如何通过dlopen和dlsym使用C++编译好的so动态库中的类 » 2021-11-16 16:25:54

Qt有动态库so,里面都是Qt类;它是如何实现的呢?是不是需要一个导入库,像Windows的gdi++那样?
我估计dlopen系列api只能用于C,用于C++不合适;C++对象不只有方法,还有对象内存块本身,还涉及到构造器和析构器和重载,太复杂。
你在C中引用了它,却无法调用new和delete操作,对象何去何从呢?是不是一堆bug等着你呢?

#95 Re: RISC-V » 联盛德W806 MCU使用LVGLv8 刷8bit ST7789屏 » 2021-11-15 15:48:28

看了你的ST7789驱动:
并口驱动使用CPU传输的,所以送屏幕和lvgl下一帧渲染无法并行,双缓冲并没有起作用。
串口驱动虽使用DMA传输,但也是CPU忙等其结束,情况和并行驱动一样,双缓冲不起作用。
要提高帧率,一定要使数据送显和lvgl下一帧渲染并发执行!这是lvgl双缓冲的要义所在。

楼主理解一下这幅图的意思:
155433p5ppzxzfpvkvbts5.jpg

#97 Re: 全志 SOC » XFEL已支持spi nand flash烧写 » 2021-11-03 10:54:59

aozima 说:

大佬一个人顶一个团队!

想让xfel支持SD卡读写,可行不?从哪下手?想尝试下!

从xfel源码入手,是电脑和MCU沟通的桥梁。

#99 Re: Cortex M0/M3/M4/M7 » GD32F1x0的非零等待闪存运行速度测试 » 2021-10-26 11:30:58

如果没有cache,SDRAM用于XIP都是半残废;何况串行Flash啊。

#100 Re: Cortex M0/M3/M4/M7 » GD32F1x0的非零等待闪存运行速度测试 » 2021-10-26 11:30:01

这类慢速flash作为XIP,除非有cache扶持,否则就是废材。
ESP32的QSPI-Flash有cache;STM32H7的QSPI-Flash也有cache,NXP的Cortex-M7也都有cache,这些才是合理设计。

#101 Re: Cortex M0/M3/M4/M7 » GD32F1x0的非零等待闪存运行速度测试 » 2021-10-26 11:27:02

很早以前就有人把GD芯片开盖分析过了。
GD的片内闪存是串行flash而非并行,类似于SIP工艺。
其零等待的实现方法就是RAM映射(这部分RAM覆盖flash地址空间,用户无法直接写入),对用户透明。
RAM覆盖的部分flash就是零等待闪存,RAM覆盖不到的flash就是巨慢flash,比ST的并行flash差几个数量级。

#102 Re: BLDC电机驱动 » 这板块人好少,想问问大家现在对变频器开发的看法。 » 2021-10-25 19:18:43

单独购买的控制板都还不便宜啊。市场上还没有通用的控制板,都是产品里定制的。

#104 Re: 人工智能,深度学习,神经网络,OpenAI,阿里通义 » 论坛有那么些人问了几年的问题…… » 2021-10-16 22:37:19

是不是跟挖坑网杠上了?阴魂不散的,这语无伦次的发言一看就想起那货。

#105 Re: 全志 SOC » debian10自动添加了屏幕终端? » 2021-10-05 20:43:12

树莓派里是在cmdline文件里加入fbcon=map:3就能解决。

#106 Re: ESP32/ESP8266 » 为什么在ESP32上做大内存项目,在剩余内存还有70-80KB的时候单片机直接重启了? » 2021-09-28 15:26:37

定义全局数组不就是把连续内存保留出来吗,这时留给动态管理的内存就相应减少了。

#108 Re: 全志 SOC » f1c200s(tiny200) linux+emwin稳定运行 » 2021-08-16 13:54:31

楼主大人,新塘的emWin on linux已经更新到V6.10f.4,请求再用你高超的技艺把它办了。

#110 Re: 全志 SOC » 乡下老鼠与城里老鼠交了个朋友,我来试试PWM直驱喇叭 » 2021-07-15 12:18:03

是的,3D音效是个大课题。像生化危机2重制版这种大作,支持5.1或7.1音效输出,可惜大部分玩家都没有这么豪华的音响系统配套。头戴式耳机只有两个扬声器,是无法还原出5.1声场的。

#111 Re: 全志 SOC » 乡下老鼠与城里老鼠交了个朋友,我来试试PWM直驱喇叭 » 2021-07-14 23:03:12

请问楼主,混音算法如何实现的?如果两个音源的采样率不一致又该怎么办好。
我始终想不明白如何低消耗高质量的算法是怎样的。

#112 Re: 全志 SOC » 利用xfel及mkz工具实现一机一镜像量产方案 » 2021-06-28 11:53:49

没有完美的加密方案,做到让破解者望而却步,或者掉几层皮就算可行。

#115 Re: 华为鸿蒙OS OpenHarmony » 看看余大嘴第二波鸿蒙128M-4G版本实际啥样了?? » 2021-06-14 18:25:46

套用SNMP那一套:MIB,ASN,BER,OID这些,只是把它换成了TCP作为传输通道。做所谓的软总线不难!

#116 Re: 全志 SOC » V3S 成功运行dotnet core 5.0 » 2021-05-25 22:10:06

用c语言写个函数编译为.so,它负责打开/dev/fb0,并mmap后返回指针。
然后在C#中p/invoke这个函数so中的函数,就可以愉快地用C#开发directui了。

#117 Re: 全志 SOC » VGA module & baremetal programming » 2021-05-25 08:56:45

楼主好强大啊,能把腐朽变传奇!

#118 Re: RISC-V » 神奇的x0寄存器 ---- 说说RISC-V的x0寄存器(转) » 2021-05-14 13:25:09

既然这么好,可x0寄存器能在内存寻址空间访问吗?它能作为数据源提供给DMA硬件,实现无需CPU搬运的memclr吗?

#120 Re: 全志 SOC » 用F1C100S开发了一个项目,原始技术实现,裸奔XUI GUI框架 » 2021-04-25 11:57:54

理解立即模式好难啊。
普通GUI的界面元素都是对象,对象拥有一些属性和方法,对象用树状结构管理,这很好理解。
立即模式该怎么理解呢?

#122 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » ucgui3.98源码【转】 » 2021-03-14 14:27:03

uc/gui-3.98在15年前就网上轻易能下载到了,而且没有内存设备和抗锯齿字体支持的。对目前来说已经太古老了。
还是用这个吧,emWin5.06源代码,组件更多代码更新:
emWin506-Src.7z

#123 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 不明白rtt的这个for迭代是如何实现的。 » 2021-03-14 10:33:59

楼主参看linux源码包的include/linux/list.h文件,一切都出自这里。

#125 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 技术人的误区 » 2021-03-08 19:49:58

whyabc666 说:
armstrong 说:
whyabc666 说:

各行各业的技术都是为了养家糊口!就像生态系统中各种动物的生存本领!多学技术多条路,量变到质变,从基层玩到管理玩到金字塔顶端……似乎现实都是外行领导内行,富人学管理,穷人学技术……摊贩个体户学钻营……老板学资本运作,经济管理……狗贼学用各种套路……

是二楼把你召唤过来的吗?

学生是怎么被带入电子嵌入式大坑的?

我觉得是因为男生本来就喜欢玩电子类技术;怪就怪自己贪玩,玩物丧志!

#126 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 技术人的误区 » 2021-03-08 19:22:31

whyabc666 说:

各行各业的技术都是为了养家糊口!就像生态系统中各种动物的生存本领!多学技术多条路,量变到质变,从基层玩到管理玩到金字塔顶端……似乎现实都是外行领导内行,富人学管理,穷人学技术……摊贩个体户学钻营……老板学资本运作,经济管理……狗贼学用各种套路……

是二楼把你召唤过来的吗?

#128 Re: 全志 SOC » F1c100S 的性能到底如何?怎么看天梯图ARM9只相当于M0的性能 » 2021-03-03 09:04:14

ARM9是ARMv5架构,M0是ARMv6架构。倘若主频相同,还真是有可能M0胜出;毕竟ARM9过时了。

#131 Re: SigmaStar/SSD201/SSD202/SSD212 » 小伙伴们SigmaStar有自己的官方社区了 » 2021-01-29 19:07:10

恭喜恭喜!有论坛方便多了,技术讨论你一句我一句,再也不会消失。

#133 Re: 全志 SOC » 这果然很linux » 2021-01-27 20:18:42

设定了7天网盘分享期,快下载吧:
链接:https://pan.baidu.com/s/1r10leghUsPluVRCVnKFYxw
提取码:1jwt

2021-01-27_201813.png

#135 Re: SigmaStar/SSD201/SSD202/SSD212 » 请问 SSD201 与 SSD202 有什么区别呢? » 2021-01-26 17:46:39

SSD201是64MB的DDR2;SSD202是128MB的DDR3,不打诳语!

#137 Re: 全志 SOC » 求助:f1c100s vscode下驱动编写 老是编译不过, » 2021-01-21 18:47:36

把$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) kernel_modules
改成$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
试试

#138 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 试一试 直接用 win32 api 运行 OpenGL 程序 » 2021-01-18 18:53:48

搬出我多年前的收藏给楼主助威吧,NEHE OpenGL 教学例程,例程个个精美:
nehegl.zip

#141 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 从今天起我要加倍重视自己的价值 » 2021-01-09 16:03:27

把老板叫到跟前,令其给百万年薪留住自己;否则炒了看不顺眼的老板,然后放飞自我!

#142 Re: 全志 SOC » 嵌入式linux是做驱动好还是应用好? » 2021-01-05 11:00:30

做应用更有深远意义;驱动是在给芯片厂商打杂,喝点别人的剩汤而已。
别听楼上样样精通之说,其实人的精力有限,样样精通想起来美好事实上是样样平庸。

#143 Re: 全志 SOC » [慢更]小白探索如何使用V3s播放音乐  » 2021-01-04 19:31:42

楼主所描述的心理活动,仿佛看透了我的内心!

#144 Re: SigmaStar/SSD201/SSD202/SSD212 » 有坛友玩SSD201的吗? » 2020-12-30 12:50:40

飘溢芳香 说:

有人去搞下开发板就好,,,

widora正在搞,就快高潮了。

#145 Re: SigmaStar/SSD201/SSD202/SSD212 » SSD202开源在线文档( 含搭建、SDK开发、API参考、调试) » 2020-12-30 12:49:07

虽然我手上已经有了启明的4.3寸和7寸开发板,但widora出的板子还是要入一块吃灰的。

#148 Re: ESP32/ESP8266 » esp32s2移植VSF,顺便跑起USB主机协议栈 » 2020-12-24 15:06:47

我看过别人公司做的产品的源码,那是不堪入目啊!稍微有点强迫症就会被它雷到重伤!

#149 Re: ESP32/ESP8266 » esp32s2移植VSF,顺便跑起USB主机协议栈 » 2020-12-24 15:05:42

楼主公司好牛逼!一般公司都是抓一把码农上来就是各种复制粘贴,拼凑出产品就是目的。
只有上了层次的少数公司才执着的开发让自己让别人都满意的框架!
看了vsf的源码,这风格、质量都属上层了,厉害!

#150 Re: 全志 SOC » F1C100S U盘速度 » 2020-12-17 18:46:41

看来太多人还是放不下裸机编程啊

#152 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 记录一下常用易忘的Linux日常操作 » 2020-12-11 22:33:05

dd if=/dev/zero of=xxx bs=1M count=yyy
tar xvf file [-C destfolder]
ln -s target symlink
df -m
ls -la

#155 Re: 全志 SOC » 说好的分享V3S R11的SPL,无需uboot SPI DMA直接启动kernel » 2020-11-28 16:26:37

启动时间大多耗在内核解压和运行,uboot的影响太小了。这就像刮了腿毛就可以拿短跑冠军了。

#156 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 一个跨越5年的业余项目LineWatch » 2020-10-26 16:15:40

ESP32出了V3版新制程芯片,目前很便宜;证明5年前的选型很正确。
如果改用F1C100s那就没优势了,毕竟手表不需要大内存;再说linux开发方式也很难有app生态。

#158 Re: 全志 SOC » 计划手写一份纯C版AI深度学习推理引擎,并支持硬件加速接口,大家有啥意见及建议,还请不吝惕教。 » 2020-10-19 12:02:49

这个项目做到领先,楼主就能在物联网时代留下浓重一笔;也就不负自己的技术知识了。

#159 Re: 全志 SOC » codesourcery的gcc toolchain停更了,linaro的gcc工具链没有arm926ej-s/armv5te的版本 » 2020-10-09 12:05:23

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain
以上A配置和RM配置的都支持armv5te,内置none-eabi的newlib库用于生成裸机程序。
能编译linux内核和uboot,但不能编译linux应用程序和rootfs工具集。

#161 Re: 全志 SOC » 能裸机调用GPU吗? » 2020-09-18 16:47:13

jiangchun9981 说:

搞深度学习的吗? 

可以关注K210这个芯片,基本算裸机的,算力好像有1T OPS,基本是秒杀目前大部分SOC的GPU了,包括骁龙845,855这种等级的

RK1808也有3T的算力,目前好像的跑LINUX,但基本也算轻量级

请问:算力的具体意义是什么,有统一标准吗?

#162 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 微信支付成功后, 这个服务器通知本机(notify)协议, 感觉不合理 » 2020-09-18 08:06:18

楼主理解错误吧。
两个http请求之间是没有记忆的;但是同一个http请求和应答是成对的。也就是http总是一个request对应一个response,而且是在同一个TCP连接里。

#163 Re: 全志 SOC » F1C100S Dram 出错 » 2020-09-09 10:48:48

其实厂家对开发者根本就没有支持,网上的资料绝大多数是网友辛苦摸索出来的

#164 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 跟上时代,记录一下刚刚看视频学会的 php + 微信公众号开发 » 2020-08-31 21:22:50

深表赞同!

dfherj 说:

不久的新闻有人微信被封,付出了生命的代价,还不放弃微信。不要过渡依赖微信,要是经营多年的公众号哪天被封搞个鸡儿。

什么平台都不要过渡依赖。那年渣浪被整改,清空了所有用户网盘存的东西,我多年在渣浪积累的无形资产文档都没了。

网友存档

https://info.williamlong.info/2016/04/blog-post_25.html

不要徒方便把自己的无形资产交给平台,搞公众号不如学哇酷站长搞个网站,牢牢拽在自己手里的无形资产。

#165 Re: 全志 SOC » 为了V3S不吃灰,移植NES游戏 » 2020-08-20 21:21:03

感谢分享!infones-linux on lichee-zero

#166 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-07-03 19:40:08

spl-separated分支,就是文档中的"f1c100s-uboot"。

逗倪豌儿 说:

文档说的另外两个工程是不是码云上没有,没有开源?

#167 Re: 全志 SOC » f1c200s(tiny200) linux+emwin稳定运行 » 2020-06-28 08:40:24

流氓兔 说:

骚话不想多说了,楼主还是传授我祖传破解小技巧吧。

不需要破解的,只要自定义一个GUI_DEVICE_API,然后传递给GUI_DEVICE_CreateAndLink()即可。
别用nuvoton内置的GUIDRV_LIN_16、GUIDRV_LIN_24、GUIDRV_LIN_32这类驱动就行。

#170 Re: 全志 SOC » 荔枝派Nano联网???? » 2020-06-17 08:33:34

嵌入式冲 说:

https://whycan.cn/files/members/4270/22_20200617-0127.png

为什么明明在里面也不能。颜色有什么含义吗

是不是应该这样“./iwlist”

#171 Re: 全志 SOC » 基于RTThread的F1C100s开发(带boot启动+硬件多图层+硬件游标+LVGL+SDIO) » 2020-06-15 19:04:30

rf 说:

执行mksunxi.exe 时候 报出找不到MSVCR120D.dll,找了个msvcr120d.dll和mksunxi.exe放到一块,弄好了。。。。。

换个版本的mksunxi.exe吧,你这个不是mingw编译的;mingw编译的不会依赖这个dll。
用这个:
mksunxi.7z

#172 Re: 全志 SOC » 求个F1C的工程师 » 2020-06-12 18:25:30

期待那个饿汉的出现,大家围观 wink

#175 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-06-04 12:50:18

chenshengwei 说:

这个可以通过DMA加快速度吗?

能减少传输的空隙时间,从而加快加载速度。

#176 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-06-03 10:09:06

myxiaonia 说:

可以用类似我开头那种做法,完全可以一次性读完,不需要64字节分组收发嘛,就是不知道为何不对:(

试试看这样写行不?

void sys_spi_flash_read(int addr, void* buf, int count)
{
    uint8_t *p = (uint8_t *)buf;
    
    sys_spi_select();

    SPI0->MBC = 4;
    SPI0->MTC = 4;
    SPI0->BCC = 4;
    SPI0->TXD = 0x03 | util_rev(addr);
    SPI0->TCR |= SPI_TCR_XCH;
    while (SPI0->FSR & 0xff) < 4);
    read8((uint32_t)&SPI0->RXD);
    read8((uint32_t)&SPI0->RXD);
    read8((uint32_t)&SPI0->RXD);
    read8((uint32_t)&SPI0->RXD);

    SPI0->MBC = count;
    SPI0->MTC = 0;
    SPI0->BCC = 0;
    SPI0->TCR |= SPI_TCR_XCH;
    while (count > 0) {
      if((SPI0->FSR & 0xFF) > 0)
      {
          *p++ = read8((uint32_t)&SPI0->RXD);
          count -= 1;
      }
    }

    sys_spi_deselect();
}

#177 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-06-02 17:28:37

myxiaonia 说:

读FIFO时,SPI是停止的;这里的确浪费了传输机会。
不过,count循环中并不会重复发送4字节命令和地址,因为在读取数据时,sys_spi_transfer函数的txbuf参数是NULL,所以循环内的sys_spi_write_txbuf函数会立即返回,没有实际数据发送的。
https://whycan.cn/files/members/1592/2020-05-29_100040.png

我还没用逻辑分析仪测量过。要把这些时间省下来,就只能靠DMA了。

#178 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-05-29 12:06:42

myxiaonia 说:

这个确实是,那就是只有2个字节的开销,看上去也比较小

我看了手册,F1C100s不支持SPI双线接收模式【即4个clk传输8位的模式】,所以没多少优化空间了。

#179 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-05-29 10:07:54

myxiaonia 说:

感谢Armstrong的亲临指导,我今天再去测试一下原来代码spi读写的情况,spi频率太高了示波器太烂丢脉冲,不过应该可以发现问题的

原来的代码相当于将总的数据收发切割成64字节成组收发,并且读取rxfifo时候还是spi停止的
64+4字节收发->读rxfiofo,然后再重复这个过程

读FIFO时,SPI是停止的;这里的确浪费了传输机会。
不过,count循环中并不会重复发送4字节命令和地址,因为在读取数据时,sys_spi_transfer函数的txbuf参数是NULL,所以循环内的sys_spi_write_txbuf函数会立即返回,没有实际数据发送的。
2020-05-29_100040.png
上层的flash读函数实际上这样解释:

static int sys_spi_write_then_read(void* txbuf, int txlen, void* rxbuf, int rxlen)
{
  // 发送命令+地址
  if (sys_spi_transfer(txbuf, NULL, txlen) != txlen)
    return -1;
  // 连续接收纯数据
  if (sys_spi_transfer(NULL, rxbuf, rxlen) != rxlen)
    return -1;
  return 0;
}

#180 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-28 21:49:56

cccsk 说:

楼主,屏幕有没有链接?

随便买哪个都行,不过还是tiny200开发起来更便利些。
tiny200.jpg
lichee-nano.jpg

#181 Re: 全志 SOC » f1c100s spi不能使用burst模式??? » 2020-05-28 21:32:20

F1C100s的SPI模块有64字节接收FIFO和64字节发送FIFO。
上面的代码把count分成多份接收,每份最多接收64字节,这是充分利用接收FIFO;发送同理。
每次往TXD寄存器只写1个字节,没试过你这样往TXD一次写4字节。
其实即便一次写4字节,也不能提高速度的;因为处理器写1字节的时间远小于SPI传送1字节的时间,所以最终瓶颈还是在SPI传输上。

#182 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 求版主开放下载权限 » 2020-05-27 14:34:17

lhc200 说:

我在淘宝买的商品
下载rom镜像还要回帖,真是麻烦

求版主开放下载

你是不是搞错了,淘宝上的开发板跟这里的版主(/站长?)不是同一个人吧?
我跑到营业厅大喊:我手机都买好了,还要另外花钱买话费?真tm麻烦,赶紧给我话费!

#183 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 强磁场对信号有没有干扰? » 2020-05-26 21:25:20

Quotation 说:

产品里有一处需要用到磁铁。磁铁旁边几mm处是显示屏的FPC排线,上面走几十MHz的SPI信号。
请问磁铁会不会干扰SPI信号?
如果有,有什么屏蔽的方法?
一般的铜箔胶带是不是只能屏蔽电磁,对纯磁场无效?

高速运动的电子在磁场里会改变运动方向的,所以电子可能会脱离导线崩到板子上或者其它芯片上!为了防止这种事情发生,可以在导线上敷上厚厚一层热熔胶,这样电子就不会跑出来了。

#184 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » ARM裸机的cache效率问题 » 2020-05-23 11:17:43

xsxusen05 说:

没有用,只是测试一下而已。

如果没用双缓冲,这个现象就是正常的。无法说明CPU慢之类的。

#185 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-22 13:43:59

armstrong 说:

这不是你的错,你的姿势很美!淘宝现在跟百度一个样,成了流氓,不交钱就别想被搜索到!

#186 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-22 13:43:16

vvi 说:

看了楼主的介绍想买片tiny200v2试试,淘宝上搜tiny200一个没有,搜荔枝派只有Zero LicheePi Zero  、nano。
是我搜索的时候姿势不对?

这不是你的错,你的姿势很美!淘宝现在跟百度一个样,成了流氓,不交钱就别想被搜索到!

#187 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » ARM裸机的cache效率问题 » 2020-05-22 12:26:06

xsxusen05 说:


直接写显存的象素,用的是720MHzCPU频率,代码基于达克罗德大神的minimal_f1c100s_framebuff,屏幕是4.3寸480*272。
看这个刷新速度一点也不正常哇。

做个双缓存帧同步切换,就不会这样了。

#188 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-21 10:13:56

gary 说:

能支持MCU的2.8寸屏吗?8位或16位数据接口的

这芯片没有片外SRAM接口;因而需要用IO口模拟来实现,当然效率会很低。
这么小的屏幕,通常都选择SPI接口的,就可以用硬件SPI。

#189 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-21 09:49:36

mirkerson 说:

楼主 可以分享个支持触摸屏的源码吗

找找看本站有没有相关资源;若有,自己整合一下吧。只要有IIC+NS2009+TSLIB驱动,再写个5点校准窗口。
我把扩展的功能作为打赏的福利,以节约网友的开发时间,所以不能公开。

#190 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-05-20 15:39:53

ling 说:

大佬,这个裸机用的什么下载器下载的呀,求推荐

不用下载器,一根micro-USB连接线足矣。

#191 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 谁有emwin的arm9 gcc linux版本的静态库? » 2020-05-13 18:23:05

找了下资料,没看到GNU-ld有redirect功能;而【mdk的】armlink和【IAR的】ilinkarm都有!

#192 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 谁有emwin的arm9 gcc linux版本的静态库? » 2020-05-13 18:06:34

用链接器的redirect功能,把库里的某几个函数旁路掉,自己写函数代替。
或者索性自己写个GUI_DEVICE_API,别用内置<GUIDRV_Lin.h>文件里的驱动就行。
自定义驱动形式如下,有模板的,不难实现,针对内存操作的更简单:

const GUI_DEVICE_API GUIDRV_Template_API = {
  //
  // Data
  //
  DEVICE_CLASS_DRIVER,
  //
  // Drawing functions
  //
  _DrawBitmap,
  _DrawHLine,
  _DrawVLine,
  _FillRect,
  _GetPixelIndex,
  _SetPixelIndex,
  _XorPixel,
  //
  // Set origin
  //
  _SetOrg,
  //
  // Request information
  //
  _GetDevFunc,
  _GetDevProp,
  _GetDevData,
  _GetRect,
};

#194 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 15:35:07

tomyqg 说:

好的,感谢,我先把sunxi-fel源代码看看

这两种实现思路,只要任意一个实现,那都是造福其他玩家的好东西。

#195 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 15:24:09

tomyqg 说:

思路没问题就好了,USB从机论坛大神不是已经搞定了吗,研究下应该可以搞好。另外这个f1c100s-spl_uart0.bin是从其他工程编译出来的吗?

f1c100s-spl_uart0.bin是项目里的spl部分抽出来单独编译起来的,你只要删除无用代码编译一下就能制作出来。
之所以分为f1c100s-spl_uart0.bin和f1c100s-spl_uart1.bin,是因为tiny200v1和v2是用不同的串口。
Blinky-f1c100s和FELinside-f1c100s都有spl部分,去掉其他代码剩下spl即可。

#196 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 15:22:00

tomyqg 说:

思路没问题就好了,USB从机论坛大神不是已经搞定了吗,研究下应该可以搞好。另外这个f1c100s-spl_uart0.bin是从其他工程编译出来的吗?

完成同样功能,还有个思路就是自己添加sunxi-fel功能,因为sunxi-fel可以通过usb接口传输一段ARM指令到设备,然后执行它;目前的任何sunxi-fel功能都是这么实现的。可以通过这种方式增加写tf卡和sd-nand的功能;不用模拟成u盘。扩展后的命令形如:
sunxi-fel -p sdnand-write 0 xxx.bin

#197 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 15:13:30

tomyqg 说:

我的意思是这个f1c100s-spl_uart0.bin是从那个工程编译出来的,FELinside这个工程如果直接出来DRAM U盘就可以将spl和app文件写入SD卡,spl里面只要能读写SD卡就可以加载app了吧

f1c100s-spl_uart0.bin是项目里的spl部分抽出来单独编译起来的,你只要删除无用代码编译一下就能制作出来。
之所以分为f1c100s-spl_uart0.bin和f1c100s-spl_uart1.bin,是因为tiny200v1和v2是用不同的串口。

#198 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 15:10:36

tomyqg 说:

比如我想从SD NAND(贴片SD卡)里启动,要么在SD NAND 焊到板子上之前将程序烧进去,要么焊到板子上再烧程序上去,这时如果能将DRAM模拟成U盘,直接在电脑上将spl和app拖进去,然后将spl和app烧录进SD NAND,实现程序烧录

嗯,懂了。理论上你可以基于FELinside-f1c100s或者f1c100s-uboot制作出这么个东西来,尚且称它未fel-boot吧。
fel-boot由sunxi-fel送入ddr运行,负责把dram模拟成u盘,等着用户把uboot和linux内核放进“u盘”。但我没搞定usb呢,做不了啊。
我看这东西做起来即使不开源,对别人也是很有用的。
完成同样功能,还有个思路就是自己添加sunxi-fel功能,因为sunxi-fel可以通过usb接口传输一段ARM指令到设备,然后执行它;目前的任何sunxi-fel功能都是这么实现的。可以通过这种方式增加写tf卡和sd-nand的功能;不用模拟成u盘。扩展后的命令形如:
sunxi-fel -p sdnand-write 0 xxx.bin

#199 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 14:50:55

tomyqg 说:

我的意思是这个f1c100s-spl_uart0.bin是从那个工程编译出来的,FELinside这个工程如果直接出来DRAM U盘就可以将spl和app文件写入SD卡,spl里面只要能读写SD卡就可以加载app了吧

我理解不了“FELinside这个工程如果直接出来DRAM U盘就可以将spl和app文件写入SD卡”这句?

#200 Re: 全志 SOC » 哇酷网友都乐于分享:为大家制作了F1C100s的RTX4+emWin5稳定项目! » 2020-04-28 14:26:42

tomyqg 说:

洪工,这个spl(f1c100s-spl_uart0.bin)是那生成的啊,另外FELinside这个工程可以直接在DDR运行,后面如果加上usb dram U盘及SD驱动功能,是不是可以做SD NAND启动的SPL了啊

spl负责配置cpu主频,初始化ddr,然后从spi flash中加载app剩余部分;它尚未支持从nand或者sd卡加载。
要真想从nand或sd加载,那板子上还得留spi-flash,然后基于f1c100s-uboot项目做一个bootloader,来负责从nand或sd加载。

页脚

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

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