您尚未登录。

#2 Re: 感芯科技 » 老电脑装Linux能恢复青春吗? » 2025-01-21 21:14:35

xubuntu能让旧电脑起飞(装轻量级软件),我的老电脑16g硬盘,2g内存,cpu是n2840。主要是用作测试机。不做ui的话,ubuntu server是最佳选择。

#4 Re: RISC-V » CH32V003上使用多任务FORTH » 2024-09-26 20:47:48

我没用openocd,找到了个minilink软件也能debug,不过有些bug,单步不太好用。
https://github.com/cnlohr/ch32v003fun
这个项目不错,有minilink的使用方法。
https://github.com/cnlohr/rv003usb
汇编实现了usb协议栈

#5 Re: RISC-V » CH32V003上使用多任务FORTH » 2024-09-21 08:22:49

我是来学习ch32v003汇编的,不知道gdb如何使用linke调试汇编代码?大神有gdb调试ch32v003的经验吗?

#6 Re: 全志 SOC » musb编程指南中文版 » 2024-06-01 08:58:58

俄罗斯和乌克兰这些国家的黑客是真的牛逼,跟地理环境是不是有关系,天气太冷只能宅在家里研究电脑,哈哈。

#12 Re: 司徒开源 » RK3588 开源掌机 16+256 » 2024-03-09 10:06:04

@mlpzaq9998
主板版1300,不包含外壳啥的吗?主板1300吗?

#13 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2024-01-19 13:45:55

gosunxifel.zip
关于闪退问题,将exe文件替换成这个,应该就可以了

#14 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2024-01-19 12:50:46

可能时时区包问题,有时间我更新一下

#15 RISC-V » 关于ch32v003链接脚本的问题 » 2023-10-27 14:51:57

kekemuyu
回复: 1

下面的连接脚本,有很多段不是很明白,有大佬能解释一下吗?比如.fini_array ,.ctors,  .dtors

ENTRY( jump_reset )

MEMORY
{
  FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 16K
  RAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 2K
}

SECTIONS
{
  .init :
  { 
    _sinit = .;
    . = ALIGN(4);
    KEEP(*(SORT_NONE(.init.jump)))
    KEEP(*(SORT_NONE(.init.vectors)))
    . = ALIGN(4);
    _einit = .;
  } >FLASH AT>FLASH

  .text :
  {
    . = ALIGN(4);
    *(.text)
    *(.text.*)
    *(.rodata)
    *(.rodata*)
    *(.gnu.linkonce.t.*)
    . = ALIGN(4);
  } >FLASH AT>FLASH 

  .fini :
  {
    KEEP(*(SORT_NONE(.fini)))
    . = ALIGN(4);
  } >FLASH AT>FLASH

  PROVIDE( _etext = . );
  PROVIDE( _eitcm = . );  

  .preinit_array :
  {
    PROVIDE_HIDDEN(__preinit_array_start = .);
    KEEP(*(.preinit_array))
    PROVIDE_HIDDEN(__preinit_array_end = .);
  } >FLASH AT>FLASH 
  
  .init_array :
  {
    PROVIDE_HIDDEN(__init_array_start = .);
    KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
    KEEP(*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
    PROVIDE_HIDDEN(__init_array_end = .);
  } >FLASH AT>FLASH 
  
  .fini_array :
  {
    PROVIDE_HIDDEN(__fini_array_start = .);
    KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
    KEEP(*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
    PROVIDE_HIDDEN(__fini_array_end = .);
  } >FLASH AT>FLASH 
  
  .ctors :
  {
    KEEP(*crtbegin.o(.ctors))
    KEEP(*crtbegin?.o(.ctors))
    KEEP(*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP(*(SORT(.ctors.*)))
    KEEP(*(.ctors))
  } >FLASH AT>FLASH 
  
  .dtors :
  {
    KEEP(*crtbegin.o(.dtors))
    KEEP(*crtbegin?.o(.dtors))
    KEEP(*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP(*(SORT(.dtors.*)))
    KEEP(*(.dtors))
  } >FLASH AT>FLASH 

  .dalign :
  {
    . = ALIGN(4);
    PROVIDE(_data_vma = .);
  } >RAM AT>FLASH  

  .dlalign :
  {
    . = ALIGN(4); 
    PROVIDE(_data_lma = .);
  } >FLASH AT>FLASH

  .data :
  {
    . = ALIGN(4);
    *(.gnu.linkonce.r.*)
    *(.data .data.*)
    *(.gnu.linkonce.d.*)
    . = ALIGN(8);
    PROVIDE( __global_pointer$ = . + 0x800 );
    *(.sdata .sdata.*)
    *(.sdata2*)
    *(.gnu.linkonce.s.*)
    . = ALIGN(8);
    *(.srodata.cst16)
    *(.srodata.cst8)
    *(.srodata.cst4)
    *(.srodata.cst2)
    *(.srodata .srodata.*)
    . = ALIGN(4);
    PROVIDE( _edata = .);
  } >RAM AT>FLASH

  .bss :
  {
    . = ALIGN(4);
    PROVIDE( _sbss = .);
    *(.sbss*)
    *(.gnu.linkonce.sb.*)
    *(.bss*)
    *(.gnu.linkonce.b.*)    
    *(COMMON*)
    . = ALIGN(4);
    PROVIDE( _ebss = .);
  } >RAM AT>FLASH

  PROVIDE( _end = _ebss);
  PROVIDE( end = . );
  PROVIDE( _eusrstack = ORIGIN(RAM) + LENGTH(RAM));	
}

#16 Re: Cortex M0/M3/M4/M7 » 有没大佬在STM32H7上跑通了Linux » 2023-10-12 12:43:37

可以考虑nuttx,拥有Posix标准。移植linux应用比较简单

#17 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » bl808资料汇总 » 2023-07-20 18:46:52

芯片都买不到,博流的bl808、bl616、bl618芯片没有公开售卖吗?

#19 Re: 全志 SOC » CoreMark Benchmark » 2023-06-15 07:35:09

f1c100s的跑分不低呀!想看一下它在1Ghz下的coremark

#20 Re: RISC-V » MilkV duo 有人玩吗? » 2023-05-26 09:12:35

MilkV 似乎要做一系列riscv的sbc,支持了一下就拼团买了4个due

#22 Re: Cortex M0/M3/M4/M7 » 国产M7来了,分享datasheet » 2023-05-12 08:40:42

频率600mhz,可以可以,就看价格了

#24 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2023-04-15 23:31:24

@yjmwxwx
谦虚了,看了内阻测试仪的代码,能写几千行汇编的人现在不多了

#28 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 屌炸天的技术(cpu偷梁换柱) » 2023-03-11 10:55:17

畅想应用场景:嵌入式系统受限cpu、内存、硬盘和网络等资源匮乏问题困扰,无法联网,无法编译,无法apt。但有了cpu命令这些问题迎刃而解,嵌入式系统所有文件系统挂载到了强大的桌面电脑上,在电脑上你拥有了嵌入式系统的所有资源,相当于给嵌入式系统换了个强大的cpu,可以任意编译上网apt了。

#29 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 屌炸天的技术(cpu偷梁换柱) » 2023-03-11 10:43:01

kekemuyu
回复: 11

首先介绍一下背景:以下是plan9的故事

例一、替换 CPU

假想一下我们有一台日常使用但性能不佳的笔记本,和一台不在本地但性能强劲的服务器。 我们当然能够使用远程计算机的强劲的 CPU 运行一些计算量特大的程序。这不是什么难事,因为几乎所有操作系统都支持登陆到远程的机器。然而,麻烦的是,如果在远程运行程序需要读写本地的文件,或者访问挂载在本地笔记本上的打印机,扬声器麦克风之类设备,我们除了在本地和远程之间把文件传来传去之外,并没有什么好方法。特别的,如果我们想借用另一台计算机上强劲的 CPU 做音频和视频解码,来播放一个放在本机光盘驱动器里的电影文件的话,我们是不可能指望远程计算机既能读本地的光驱,又能把音频投递到本机的扬声器上的。

Plan 9 中,有一个简单的 cpu 命令,能够让用户自然地使用一个其他机器上的 CPU 运行程序,且仍然能够访问本地的所有文件和设备。也就是说,我们可以用远程计算机上强劲的 CPU 做图像处理,媒体解码等任务,并且可以直接把声音播放到本地的扬声器。cpu 命令给人的感觉,是除了给机器换个了 cpu 外,其他一切都和原来一样。这个看似 “神奇” 的功能,其实在 Plan 9 里实现起来一点都不复杂: cpu 指令首先连接服务器上,然后将本地的所有资源和文件系统,包括窗口管理器,光盘驱动器,扬声器等设备(别忘了他们都是文件),一股脑儿挂载到服务器上,成为服务器上的资源。这样,在服务器上运行的程序,就可以“自然地”使用本地的键盘鼠标和显示器完成交互,还可以访问你本地的显示器扬声器等设备。

cpu 命令真的就是名副其实的换掉了本地计算机的 cpu (其实还有内存)而保留其他一切设备。Plan 9 的这个 cpu 命令,带有强烈的分布式操作系统的特征,而我们平时接触的操作系统都不是分布式操作系统,因此 cpu 这个命令至今在现代主流操作系统上没有完全等价物。

现在这个牛逼的cpu命令移植到了linux系统,它是完全用go实现的。

请看以下简介:
The u-root cpu command
Do you want to have all the tools on your linuxboot system that you have on your desktop, but you can’t get them to fit in your tiny flash part? Do you want all your desktop files visible on your linuxboot system, but just remembered there’s no disk on your linuxboot system? Are you tired of using scp or wget to move files around? Do you want to run emacs or vim on the linuxboot machine, but know they can’t ever fit? What about zsh? How about being able to run commands on your linuxboot machine and have the output appear on your home file system? You say you’d like to make this all work without having to fill out web forms in triplicate to get your organization to Do Magic to your desktop?

Your search is over: cpu is here to answer all your usability needs.
The problem: running your program on some other system
People often need to run a command on a remote system. That is easy when the remote system is the same as the system you are on, e.g., both systems are Ubuntu 16.04; and all the libraries, packages, and files are roughly the same. But what if the systems are different, say, Ubuntu 16.04 and Ubuntu 18.10? What if one is Centos, the other Debian? What if a required package is missing on the remote system, even though in all other ways they are the same?

While these systems are both Linux, and hence can provide Application Binary Interface (ABI) stability at the system call boundary, above that boundary stability vanishes. Even small variations between Ubuntu versions matter: symbol versions in C libraries differ, files are moved, and so on.

What is a user to do if they want to build a binary on one system, and run it on another system?

The simplest approach is to copy the source to that other system and compile it. That works sometimes. But there are limits: copying the source might not be allowed; the code might not even compile on the remote system; some support code might not be available, as for a library; and for embedded systems, there might not be a compiler on the remote system. Copy and compile is not always an option. In fact it rarely works nowadays, when even different Linux distributions are incompatible.

The next option is to use static linking. Static linking is the oldest form of binary on Linux systems. While it has the downside of creating larger binaries, in an age of efficient compilers that remove dead code, 100 gigabit networks, and giant disks and memory, that penalty is not the problem it once was. The growth in size of static binaries is nothing like the growth in efficiency and scale of our resources. Nevertheless, static linking is frowned upon nowadays and many libraries are only made available for dynamic linking.

Our user might use one of the many tools that package a binary and all its libraries into a single file, to be executed elsewhere. The u-root project even offers one such tool, called pox, for portable executables. Pox uses the dynamic loader to figure out all the shared libraries a program uses, and place them into the archive as well. Further, the user can specify additional files to carry along in case they are needed.

The problem here is that, if our user cares about binary size, this option is even worse. Deadcode removal won’t work; the whole shared library has to be carried along. Nevertheless, this can work, in some cases.

So our user packages up their executable using pox or a similar tool, uses scp to get it to the remote machine, logs in via ssh, and all seems to be well, until at some point there is another message about a missing shared library! How can this be? The program that packaged it up checked for all possible shared libraries.

Unfortunately, shared libraries are now in the habit of loading other shared libraries, as determined by reading text files. It’s no longer possible to know what shared libraries are used; they can even change from one run of the program to the next. One can not find them all just by reading the shared library itself. A good example is the name service switch library, which uses /etc/nsswitch.conf to find other shared libraries. If nsswitch.conf is missing, or a library is missing, some versions of the name service switch library will core dump.

Not only must our user remember to bring along /etc/nsswitch.conf, they must also remember to bring along all the libraries it might use. This is also true of other services such as Pluggable Authentication Modules (PAM). And, further, the program they bring along might run other programs, with their own dependencies. At some point, as the set of files grows, frustrated users might decide to gather up all of /etc/, /bin, and other directories, in the hope that a wide enough net might bring along all that’s needed. The remote system will need lots of spare disk or memory! We’re right back where we started, with too many files for too little space.

In the worst case, to properly run a binary from one system, on another system, one must copy everything in the local file system to the remote system. That is obviously difficult, and might be impossible if the remote system has no disk, only memory.

One might propose having the remote system mount the local system via NFS or Samba. While this was a common approach years ago, it comes with its own set of problems: all the remote systems are now hostage to the reliability of the NFS or Samba server. But there’s a bigger problem: there is still no guarantee that the remote system is using the same library versions and files that the user’s desktop is using. The NFS server might provide, e.g., Suse, to the remote system; the user’s desktop might be running Ubuntu. If the user compiles on their desktop, the binary might still not run on the remote system, as the Suse libraries might be different. This is a common problem.

Still worse, with an NFS root, everyone can see everyone’s files. It’s like living in an apartment building with glass walls. Glass houses only look good in architecture magazines. People want privacy.
https://github.com/u-root/cpu
https://book.linuxboot.org/cpu/

#32 RISC-V » 为什么mcu厂家还是用gcc而不是llvm » 2023-03-10 11:39:10

kekemuyu
回复: 8

听说llvm很强大灵活,有个万能的llvm ir中间语言,可看看周围的mcu厂家还是喜欢用基于gcc修改的编译器。如果你说是因为gcc的惯性吧,近些年新的架构riscv刚刚出来,大家都是新的起点,为什么还是用gcc的多?

#33 Re: ESP32/ESP8266 » 乐鑫要发的新芯片esp32-P4 » 2023-01-07 20:25:24

@david
coremark/mhz对比, esp32c3比esp32单核还高,所以riscv架构比lx6优秀。总的coremark,160mhz的esp32c3差90就赶上240mhz的单核esp32了。
202438.png

#34 Re: ESP32/ESP8266 » 乐鑫要发的新芯片esp32-P4 » 2023-01-06 12:16:59

发现乐鑫网站英文版比中文版更新快

#36 Re: 全志 SOC » 平头哥云上实验室,可以申请远程测试大量芯片或开发板 » 2023-01-05 19:53:23

很有意思,但是卡死了咋办,最好可以远程重新上电。加上远程机械臂操作更有意思。

#39 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 杰里芯片官网开始拥抱社区了吗 » 2023-01-04 10:39:18

@村民
可能知道烂,所以让社区填坑。看新闻杰里在蓝牙音频领域是绝对霸主呀,全球32亿杰里占了27亿。

#40 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 杰里芯片官网开始拥抱社区了吗 » 2023-01-04 08:58:30

我是在京东买了个ikf king pro头戴耳机,搜索拆解视频,里面用到的主控是杰里ac700系列芯片。

#43 Re: 上海航芯 » ACM32H5新产品需求及意见收集 » 2022-12-17 21:32:01

脱离应用场景谈功能就是耍流氓。芯片的价格,适用场景,功能,开发环境,开发是否友好等综合考虑,想要一款或一个系列芯片搞定所有场景是不现实的,面面俱到结果是一无是处。这点需要向st学学,它的芯片和市场需求把脉的很准。

#47 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-11-02 00:51:33

看资料应该会出py32f002a系列,去掉了dma和比较器等。价格应该。。。
Screenshot2022-11-02004728.png

#48 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-11-02 00:30:03

今天测试了一下py32f003L18S6的串口,发现这个芯片功耗控制的挺好的。因为是用usb功率计,粗略计算基本和手册一直一致。
Screenshot2022-11-02002844.png

#49 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-11-01 22:35:29

看了一下普冉最新的20221024日期的资料,isp软件不能烧写py32f003的芯片了,8月份的资料还能看到003系列芯片。不过我想到另外的解决办法,上电gpio先初始化为sw烧写口,然后延时几秒后再用作其他功能,这样芯片上电应该还是可以sw烧写的。
Screenshot2022-11-01223133.png

#50 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-10-31 22:29:48

@echo
关于py32f003的isp烧录,我在网上找到了个方法,还没实际操作过不知道行不行。主要是这句话:上电1s内默认是isp编程模式。
https://blog.csdn.net/firseve/article/details/126661827
Screenshot2022-10-31222919.png

#51 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-10-31 18:30:50

@echo
真的假的,8脚的无法恢复了吗?这设计有点...
avr的tiny13a可以任意使用io,并不影响isp下载

#54 RISC-V » 博流智能将要推出杀手级芯片bl808(可以跑linux) » 2022-10-27 19:58:28

kekemuyu
回复: 42

这价格如果在10元左右,f1c100s可以退休了
https://www.cnx-software.com/2022/10/10/pine64-ox64-sbc-bl808-risc-v-multi-protocol-wisoc-64mb-ram/
SoC – Bouffalo Lab BL808 with:
CPU
Alibaba T-head C906 64-bit RISC-V core @ 480MHz
Alibaba T-head E907 32-bit RISC-V core @ 320MHz
Memory – 64MB embedded DRAM
AI accelerator – NPU BLAI-100 (Bouffalo Lab AI engine) for video/audio detection/recognition
Wireless
2.4 GHz 802.11 b/g/n Wi-Fi  4
Bluetooth 5.x dual mode (classic + BLE)
IEEE 802.15.4 for Zigbee
Display
Up to 4-lane MIPI DSI
Up to 8-bit MIPI DBI
16-bit MIPI DPI
QSPI
Audio Codec – 2x ADC, 1x DAC, sample rate: 8 to 192KHz, 24-bit
Camera
2-lane MIPI CSI and DVP interfaces
MJPEG and H.264 encoder up to 1920×1080 @ 30fps + 640×480 @ 30fps
Package – 88-pin QFN
Storage
16Mbit (2MB) or 128Mbit (16MB) XSPI NOR flash
MicroSD socket with support for SDHC and SDXC
Camera & audio – 2-lane MIPI CSI co-located with USB-C port for camera module including microphone and speaker
Antenna – 2.4GHz chip antenna soldered on board, footprint for u.FL connector
USB – 1x USB 2.0 OTG Type-C port with MIPI CSI “alternative” mode
Expansion – 2x 20-pin headers with castellated holes with GPIO, SPI, I2C, and UART, possible I2S and GMII expansion
Debugging – 5-pin JTAG header
Misc – BOOT button, red power LED
Power Supply – 5V/0.5A via USB Type-C port or micro USB port
Dimensions – 51 x 21 x 19mm
Screenshot95457.png

#56 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-10-22 08:12:59

WCH的ch32v003据说5毛,不知道铺货后还能不能是这个价格

#57 Re: Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-10-19 11:01:22

别被图片骗了,只是举了个例子,普冉各种型号都有的

#58 Re: RISC-V » WCH又搞了个性价比王炸CH32V003 » 2022-10-15 15:31:19

看在5毛的份上,实在不行上汇编

#60 Cortex M0/M3/M4/M7 » 国产王炸中的战斗机-普冉py32f003/py32f030(价格6毛起步) » 2022-10-13 16:22:38

kekemuyu
回复: 155

8位机可以淘汰了,这玩意竟然有64k/8k,还能keil开发

828415aa4a5d39d810e5186d87924280.jpg

#61 Re: RISC-V » WCH又搞了个性价比王炸CH32V003 » 2022-10-13 15:55:00

开发板已经玩起来了,这价格还要啥自行车呀!不知道铺货后还能保持这价格不

#63 Re: 全志 SOC » 开源一个F1C200S的实用向板,极限压榨这片子的功能 » 2022-08-08 17:08:32

很完整了,不过还是喜欢跑debian,然后通过pc联网这样想装啥apt就搞定了。f1c的声卡驱动是怎么配置的

#64 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 装一台Linux主机 » 2022-08-02 11:25:47

性价比高的推荐amd的5600g,我搞了台万元的5900x+rtx3060 12g性能有点过剩了

#65 Re: RISC-V » 看到rode无线麦克的拆解用到的芯片是炬芯ats2833 » 2022-07-23 21:52:58

雨中狐狸 说:

我问过了,SDK不提供给客户,只提供给代理商,只能走固件定制的流程。没意思,还是看看高通跟nordic的吧。我要到了datasheet,你要可以给你。

没人玩没意思,不折腾了。wireless go 2代已购入,各方面都很均衡的机器,这个价位很不错了。

#66 Re: ESP32/ESP8266 » VSF linux应用移植系列 -- libuvc(一)初步移植 » 2022-06-28 21:03:31

vsf还是走自己的应用路线吧,移植linux应用想扩大生态是徒劳的。我能在linux上跑,为什么还需要vsf呢?

#69 Re: 全志 SOC » 分享一个自己试着写的裸机BootLoader,和编写过程中的大坑 » 2022-05-24 23:30:08

谢谢大佬,搞清了地址。下一步想把boot和应用分开编译、烧录,因为应用部分是用go语言编写生成的elf文件,只需要boot从指定地址将应用拷贝到ddr跳转执行。

#70 Re: 全志 SOC » 分享一个自己试着写的裸机BootLoader,和编写过程中的大坑 » 2022-05-24 14:03:01

@f_Endman
感谢分享,学到了。更进一步的想到__image_file_start的地址在不同介质都是一样的吗?spi flash,nand flash,sd卡,如果应用是在其他两种介质,代码拷贝程序需要做相应移植吧。

#71 Re: 全志 SOC » 分享一个自己试着写的裸机BootLoader,和编写过程中的大坑 » 2022-05-24 10:30:22

@f_Endman
和实验不符呀,改成0x80000000,似乎没有进入ddr启动应用。是不是可以用ida pro分析二进制程序,找到__image_start 的实际地址

#72 Re: 全志 SOC » 分享一个自己试着写的裸机BootLoader,和编写过程中的大坑 » 2022-05-23 10:32:47

有个地方不太理解:

__image_file_start = .;

    .text : AT(__image_file_start)       //就是这里,表示代码链接到DDR内,但编译时存放在文

这里有几个地址没有想明白,依我看启动过程是:brom程序从spi flash拷贝固定大小(不记得是多大了)的二进制文件到sram中,cpu开始从sram的0地址执行指令,指令中有个拷贝代码的程序如下:

/* 加载程序 */
void Boot_Load_Code(void)
{
    Boot_SPI0_Init();
    Boot_SPI_Flash_Read((unsigned int)&__image_file_start, &__image_start, &__image_end - &__image_start);
    Boot_SPI0_Exit();
}

__image_file_start是spi flash的存放位置,二进制程序被拷贝到ddr的地址起始位置,然后cpu跳转到ddr开始执行。

我所不理解的是__image_file_start如果是二进制文件在spi flash的存储位置,那__image_start应该是ddr的开始位置

    .text : AT(__image_file_start)
    {
        PROVIDE(__image_start = .);
        Obj/start.o (.text)
        Obj/main.o (.text)
        *(.text)
		*(.note.gnu.build-id)
    } > ddr

那__image_start的地址具体是多少呢?为何不把二进制程序拷贝到ddr的起始位置呢?由于对链接脚本不太熟,决定做实验验证:先直接修改链接脚本,把__image_start 的地址直接修改成0x80000000

#73 Re: 全志 SOC » 初玩全志 T113-S3, 原来1GHz是极限.... » 2022-05-16 13:55:09

musich 说:
kekemuyu 说:

估计核心电压加压才行,f1c100s经过加压保守都干到1.5g了

真能跑到1.5G 吗? 估计不大可能。

手上 刚好有个荔枝派,吃灰好多年了,抽空 也跑一下。

有点不大信。

135403.png

#74 Re: 全志 SOC » 初玩全志 T113-S3, 原来1GHz是极限.... » 2022-05-16 10:31:14

估计核心电压加压才行,f1c100s经过加压保守都干到1.5g了

#76 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 一枚萌新瑟瑟发抖,发起求救! » 2022-04-08 10:56:09

找自己喜欢的干就完了,喜欢港人的名言:“做人,最重要的是开心吗?”

#77 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-04-04 21:39:11

同样的linux源码和配置文件,只是换了个宿主系统,内核编译出来体积翻倍。
Screenshot213711.png

#78 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-04-04 20:04:35

宿主内核系统api更新导致,把sys/socket.h改为linux/socket.h即可

#79 Re: 全志 SOC » 尝试从零构建F1C100s开发环境 » 2022-04-04 19:57:51

从lz的虚拟机中把linux源码拷贝到我的ubuntu中,编译就报错了:
Screenshot195518.png

#80 Re: 全志 SOC » go语言裸机编程探索 » 2022-03-22 10:39:37

go官方的issue中很多人提出希望添加嵌入式支持,官方没答应,理由是硬件太多,工作量巨大,因为官方需要保证go的一致性和稳定性,可以理解,而且go的应用场景重点不在这方面。其实早期go的版本是支持裸机的,goos=tinygo,后来给删除了。

#81 Re: 全志 SOC » go语言裸机编程探索 » 2022-03-21 22:29:34

比c大个10几倍有怎样,一个程序自带了多线程和gc,基本上是跑了个操作系统了

#82 Re: 全志 SOC » go语言裸机编程探索 » 2022-03-21 15:05:11

另外还可以参考https://git.sr.ht/~eliasnaur/unik/tree,eggos作者就是受这个项目启发做的。两者原理是一样的

#83 Re: 全志 SOC » go语言裸机编程探索 » 2022-03-21 15:01:30

xboot 说:

eggos本质是模拟各种linux的syscall吗?

应该是这样,没有详细看,你可以看看eggos的源码,由于go runtime自带内存管理和任务调度,干了很多操作系统的活。只要实现很少的系统调用和中断管理就能移植runtime,eggos的架构图:
145734.png
eggos的kernel目录是他的核心,可以看到代码量很小:
145931.png

#84 Re: 全志 SOC » go语言裸机编程探索 » 2022-03-21 13:49:02

@xboot
同感,tinygo等于发明了另一种语言,还是跟随官方go比较好。TamaGo就是增加GOARCH GOOS的方案。但是我更倾向eggos的方案,不用修改官方编译器,他是模拟了linux的中断和系统调用。具体原理请参考这篇博文:https://zhuanlan.zhihu.com/p/265806072

#85 全志 SOC » go语言裸机编程探索 » 2022-03-17 10:22:51

kekemuyu
回复: 25

go和c现在是我工作中的主力语言。go在很多领域发挥了强大作用,那go适合嵌入式吗?当前并不适合,但go具有控制硬件的能力,虽然有些繁琐。
本帖最终目的是在全志f1c100s/200s或者说是arm9系列芯片直接运行go程序,主要是把go runtime移植到arm9上。本帖主要是受github的开源项目https://github.com/icexin/eggos的启发,此项目已成功将go runtime移植到x86上。开篇先建立环境:
虚拟环境是qemu-system-arm
先在上面跑个gnu汇编热热身。
arm.zip
155152.png

#87 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 利用光敏电阻识别数码管 » 2022-03-07 18:21:45

@xboot
深度学习硬件成本就上去了,就是想读个数,当然深度学习适用范围更广,不论数码管大小都可以。

#89 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 利用光敏电阻识别数码管 » 2022-03-05 16:38:08

kekemuyu
回复: 6

主控stm32G030F6P,6个cd4051用作io选通,6个ad通道轮询读取光敏电阻压降。识别准确率很高,加上遮光片几乎可以100%准确。

webwxgetmsgim3.jpg
webwxgetmsgim1.jpg
webwxgetmsgimgseg.jpgwebwxgetmsgimg4.jpg

#93 Re: 全志 SOC » f1c200快速启动验证研究 » 2022-01-12 09:11:14

2s进ui太牛了,是用的spi falsh吗?

#95 Re: ESP32/ESP8266 » 打造极致性价比 乐鑫科技发布 ESP32-C2 » 2021-12-24 19:00:45

除了价格,只是简化版的c3,期待h2上市,ble功耗终于降下来了

#96 ESP32/ESP8266 » 精致小板系列之esp32c3 » 2021-12-11 01:13:56

kekemuyu
回复: 5

c3是自带蓝牙和wifi最具性价比的芯片,为此精心设计了tiny小板,尺寸仅为18*32大小。c3自带usb jtag和虚拟串口,可用来调试和下载固件用。虽然自带usb可下载固件,还是预留了usb转ttl的芯片ch340e的位置。已验证可以运行micropython,并且已经支持arduino、platformio、idf等平台开发。
Untitled_20211211-0106.png

#97 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » waft框架是未来iot设备的应用开发模式 » 2021-12-05 11:02:14

kekemuyu
回复: 2

当前应用的开发模式逐渐都在web化,无论是从桌面端到移动端,都从本地app转向web开发。具体地说,之前桌面端开发模式主要有delphi、qt、vs等,现在正在向electron、nodejs、渐进式Web 应用(PWA)转移。移动端从android和ios本地应用,逐渐被小程序和轻应用替代。这种种迹象已经表明web正在吞噬一切。而最近几年有一个关键技术备受关注,那就是WebAssembly。web应用的一个最大问题是运行速度,WebAssembly的引入使得web应用速度得到很大提升。而且可以支持多种语言编程编译成WebAssembly。
      从sipeed买了d1的哪咤计算条,看到介绍waft。深入了解发现waft非常有前途,可能是未来iot设备应用的开发形态。ui开发的一个痛点就是定制化,想要灵活多变很耗时间。而web模式的开发就是多变,可以轻松实现定制化需求。最近今年各种小程序层出不穷,但都是基于android或ios的大厂app之上构建。但这种情况正在逐渐发生变化,微信有了小程序硬件框架,阿里有了waft。把小程序的依赖环境从app分离,直接把依赖安装到其他系统或硬件之上,使得小程序可以适用的范围不断扩大。相信不久小程序如果哪一天跑在了串口屏上也不要太过惊讶,这只是未来iot应用开发模式的初级阶段。我们经历了功能机走向智能机,同样在5G技术和万物互联的影响下,又一次技术革命拉开了序幕。

#101 Re: RISC-V » 【新玩具get】博流智能BL702(RISC-V+FPU+2.4G+USBD) » 2021-10-28 18:12:42

@arphone
问题已解决,使用了内部flash引脚引起的电流过大

#102 Re: RISC-V » 国产riscv芯片汇总 » 2021-10-28 17:44:26

@Blueskull
文章里说rv是针对rv64做了优化,32位没有。所以从理论上rv32代码密度就天生的低,指令集太精简也是有代价的。

#103 Re: Cortex M0/M3/M4/M7 » 基于STM32探讨单片机软件架构设计问题 » 2021-10-27 08:41:20

程序的通用和性能是不可兼得的。想要通用性,驱动层和应用层之间加适配层(统一接口),层与层之间函数调用消耗cpu。要性能就直接操作硬件,没有通用可言。

#106 Re: RISC-V » 国产riscv芯片汇总 » 2021-10-26 14:44:12

w806已经买了,回头试试是否支持riscv汇编

#107 Re: RISC-V » 国产riscv芯片汇总 » 2021-10-26 13:12:41

@XIVN1987
不管是8系列还是9系列都是c-sky指令集,可能版本不同分别对应v2和v3。c-sky基于riscv构建,兼容riscv。这是官方的技术特征里写明的,除非文档有误。

#108 Re: RISC-V » 国产riscv芯片汇总 » 2021-10-26 07:38:35

XIVN1987 说:

w806是c-sky,不是risc-v

兼容

#110 Re: RISC-V » 国产riscv芯片汇总 » 2021-10-23 10:57:54

junyee 说:

有几家资料缺乏,不开放,一点都不好玩.
如第4/7个.

还行吧,入门还是没问题,外设例子基本都有

#111 RISC-V » 国产riscv芯片汇总 » 2021-10-22 20:28:07

kekemuyu
回复: 54

riscv架构发展迅速,riscv芯片日益增多。
汇总一下以备以后选型用。有知道小伙伴请跟贴接龙。

1.esp32-c3,160mhz,乐鑫
2.bl702,144mhz,博流智能
3.ch573/571,南京沁恒
4.w806,240mhz,北京联盛德
5.gd32vf系列,兆亿创新
6.d1/f133-A,全志阿里
7.AB32VG1,中科蓝讯
8.k210,嘉楠科技

#116 Re: ESP32/ESP8266 » 除了ESP32/ESP8266还有其它厂家用Xtensa的核心吗? » 2021-09-15 01:56:28

@echo
左侧导航栏有大量的芯片公司在用(有连接具体芯片型号可跳过去查看),视觉处理dsp,hifi音频解码dsp,ai等都是基于Xtensa架构。

没错,dsp用的指令集也是xtensa,这是官网说明:

Every Tensilica DSP and processor includes the same base Xtensa ISA that delivers modern, high-performance RISC processor benefits. Shipping at a rate of over 4 billion cores per year, Cadence’s Tensilica processor and DSP portfolio is the number 2 volume 32-bit processor in the market.

维基百科看到,微软Hololens的协处理器就是用的Tensilica dsp做的。从这些例子可以看到xtensa架构很适合做dsp等复杂密集型数字信号处理应用

#117 Re: ESP32/ESP8266 » 除了ESP32/ESP8266还有其它厂家用Xtensa的核心吗? » 2021-09-14 12:07:45

echo 说:

比如?哪个厂的什么产品?

kekemuyu 说:

其他厂家并不像乐鑫一样开放,所以我们不了解。国外很多大厂在用

官网: https://www.cadence.com/en_US/home/tools/ip/tensilica-ip/partners.html#siliconservices

#118 Re: ESP32/ESP8266 » 除了ESP32/ESP8266还有其它厂家用Xtensa的核心吗? » 2021-09-14 09:17:42

其他厂家并不像乐鑫一样开放,所以我们不了解。国外很多大厂在用

#119 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 第一次做四层板(还是BGA主控) » 2021-09-03 08:41:40

TeveT 说:

可以涂敷薄薄一层焊油,直接吹焊

sunxiang 说:

BGA封装如何焊接呢,我只会焊接LQPF,下周再试试焊接QFN封装。BGA焊接是用钢网刷锡膏,然后放芯片在PCB上,然后上热风枪吗?

置球是关键,芯片是拆板的

#120 Re: Cortex M0/M3/M4/M7 » 输入捕获能够捕捉最小周期为2us的pwm波吗? » 2021-08-30 14:24:55

无意间搜到sigrok和plusview项目,打算入坑开源逻辑分析

#121 Re: Cortex M0/M3/M4/M7 » 输入捕获能够捕捉最小周期为2us的pwm波吗? » 2021-08-27 01:37:38

用逻辑分析仪抓了一下,周期大概15us,高电平2us。
Untitled_20210827-0134.png

#122 Re: Cortex M0/M3/M4/M7 » 输入捕获能够捕捉最小周期为2us的pwm波吗? » 2021-08-26 20:04:39

需要测量脉冲宽度,相当于做个3通道逻辑分析仪

#123 Re: Cortex M0/M3/M4/M7 » 输入捕获能够捕捉最小周期为2us的pwm波吗? » 2021-08-26 14:59:51

逻辑分析仪抓了一下,时钟信号好高电平大概只持续了1us多。采样要2m或更高才行

#126 Re: ESP32/ESP8266 » 乐鑫 ESP32-C3 功能介绍 » 2021-08-23 00:44:35

echo 说:

刚刚买了个ESP32-C3板子,这芯片居然还带CAN和USB。主要是芯片价格太香了,评估下做个备胎。

usb似乎只能jtag,can有吗?

#127 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » nrf52系列开发日志 » 2021-08-11 17:27:53

nrf蓝牙芯片有个很有意思的外设ppi,可编程外设互联。进一步了解得知nrf系列的外设的寄存器很不一样,nRF52832 的寄存器分为下面的三种类型。

Task :任务寄存器,可以由程序或事件触发。
Event:事件寄存器,事件可以产生中断或触发任务。
Register:普通寄存器,和一般单片机的寄存器一样。

Task 和 event 使得操作片上外设十分方便简洁,只需进行少量的配置,即可轻松运用各种外设。同时,Task 和 event 能有效减少 CPU 的占用时间,降低 CPU 的负荷。

Task 和 Event 更多的是用来和 PPI(可编程外设互连)配合使用,通过 PPI 将某个 Event和 Task 连接起来,连接后,该 Event 即可触发对应的 Task 执行相应的功能。

不知道其他蓝牙芯外设是否有同样设计,这是第一次发现这样有趣的设计,应该是为低功耗而生的设计。最近发现很多mcu芯片开始集成一些fpga类似的功能,比如rp2040的可编程io,这次的ppi也有异曲同工之妙。估计以后的芯片设计方向都会加入类此的外设。

#128 Re: ESP32/ESP8266 » ESP32DOWD外扩ESP-PSRAM64H不识别的问题 » 2021-08-11 14:23:13

@491990741
不好意思,驱动不太懂。我只是按照https://github.com/micropython/micropython/tree/master/ports/esp32编译后生成的固件就直接支持psram了。

make BOARD=UM_TINYPICO

#129 Re: ESP32/ESP8266 » ESP32DOWD外扩ESP-PSRAM64H不识别的问题 » 2021-08-10 15:46:17

@491990741
我也不太了解,电路参考了tinypico的https://www.tinypico.com/tinypico-nano。具体代码实现,我知道的是在micropython里有针对tinypico的设置,你可以看一下。

#130 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » nrf52系列开发日志 » 2021-08-09 13:12:12

ble点灯程序功耗实测,官方的例程中有四个led和四个按键,需要把不需要的按键注释掉,只保留一个led,如下:

int main(void)
{
    // Initialize.
    log_init();
		NRF_LOG_INFO("Blinky example started.");
    leds_init();
    timers_init();
    //buttons_init();
    power_management_init();
    ble_stack_init();
    gap_params_init();
    gatt_init();
    services_init();
    advertising_init();
    conn_params_init();

    // Start execution.
    NRF_LOG_INFO("Blinky example started.");
    advertising_start();

    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }
}

sdk_config.h中开启dcdc使能,由于模块没有外接32k晶振,使能内部rc(内部rc要比外部晶振功耗增加几个ua)。
重点优化功耗的几个参数:
  广播间隔越大, 功耗越低;
广播持续时间越长,功耗越大

蓝牙BLE设备联结后,蓝牙主机会向BLE设备发送连接事件(Connection Events),BLE设备接收到连接事件后,会进行回复,以通知蓝牙主机连接通路正常。而这是BLE设备连接后最耗电的工况,所以增加连接间隔时间会降低BLE设备的功耗,但是需要注意的是,改变连接间隔时间就相应地会改变蓝牙的通讯速度。
从机延时(Slave Latency)次数,就是在连接时忽略连接事件的次数。
                             

#define APP_ADV_INTERVAL                640                                      /**< The advertising interval (in units of 0.625 ms; this value corresponds to 40 ms). */
#define APP_ADV_DURATION                BLE_GAP_ADV_TIMEOUT_LIMITED_MAX//BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED   /**< The advertising time-out (in units of seconds). When set to 0, we will never time out. */


#define MIN_CONN_INTERVAL               MSEC_TO_UNITS(1000, UNIT_1_25_MS)        /**< Minimum acceptable connection interval (0.5 seconds). */
#define MAX_CONN_INTERVAL               MSEC_TO_UNITS(2000, UNIT_1_25_MS)        /**< Maximum acceptable connection interval (1 second). */
#define SLAVE_LATENCY                   0                                       /**< Slave latency. */
#define CONN_SUP_TIMEOUT                MSEC_TO_UNITS(6000, UNIT_10_MS)         /**< Connection supervisory time-out (4 seconds). */

这些参数需要综合考虑,因为参数之间是有关联的,设置不当反而会适得其反,以上设置的参数可能并不是最优的甚至是错误的,需要学习这些参数的具体原理。以下是官方给出的功耗优化建议:
https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/optimizing-power-on-nrf52-designs

由于测试条件有限,万用表并不适合测量这么低功耗的射频芯片。功率分析仪可能会好些,大概用万用表测了一下,广播电流在15ua左右(有跳动但是太快测不出,官方有个理论评估在线工具:
https://devzone.nordicsemi.com/nordic/power/w/opp/2/online-power-profiler-for-ble
简单评估了一下广播功耗大概23ua:
Screenshot130834.png

#131 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » nrf52系列开发日志 » 2021-08-09 12:24:05

功耗测试,看到nrf52811的手册功耗参数有点吓人,1mhz运行功耗是34.4 µA,经过实测基本符合手册,官方的点灯程序修改一下测得是2.69ma,然后除以64mhz,平均功耗是42ua,可能需要优化才能达到官方数据吧,不管了,42ua的运行功耗也是很优秀了。

#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "boards.h"

/**
 * @brief Function for application main entry.
 */
int main(void)
{
    /* Configure board. */
    //bsp_board_init(BSP_INIT_LEDS);

    /* Toggle LEDs. */
    while (true)
    {
//        for (int i = 0; i < LEDS_NUMBER; i++)
//        {
//            bsp_board_led_invert(i);
//            nrf_delay_ms(500);
//        }
    }
}

#132 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » nrf52系列开发日志 » 2021-08-08 16:47:23

kekemuyu
回复: 3

作为全球蓝牙份额占比最大的nordic公司,其nrf52系列非常经典,广泛用于物联网、可穿戴设备。而且其协议栈紧跟蓝牙标准,怀疑nordic中有人参与标准的制定。开发环境非常亲民,keil、gcc、ses(SEGGER公司开发)等,开贴记录一下填一下坑。


1.keil环境下,直接用pack installer把对应的包在线安装即可
2.从nrf官方下载sdk
3.点灯
4.ble点灯

官方sdk中有examples,其中大多数例子是基于nrf52840或nrf52832的。由于我买的是nrf52811模块,所以例子需要做一些修改。
例子中的pca10056是nrf52840,pca10056e对应的是nrf52811(是官方从pca10056复制并修改了一些配置)。


点灯程序很顺利,按照自己的板子修改一下io即可。
ble点灯就不是很顺利了,遇到的问题是日志无法打印,无法发现蓝牙设备,开始以为是协议栈烧录有问题,反复折腾还是不行。后来拆开模块屏蔽罩发现没有32.768k的晶振,而协议栈工作是需要低速时钟的,由于官方例子默认是外部晶振,所以修改配置后解决问题。至此,蓝牙可以完美工作。

内部rc修改步骤:
其中source是时钟源,rc_ctiv是校准定时器间隔,rc_temp_ctiv是恒温下的软装置校准计时器间隔,accuracy是外部时钟的精度。

与四个结构体成员相关的宏定义在sdk_config.h文件下,修改相关的宏就可以设置低频时钟的来源。

1).source的宏:NRF_SDH_CLOCK_LF_SRC,置0选择NRF_CLOCK_LF_SRC_RC----内部RC振荡,置1选择NRF_CLOCK_LF_SRC_XTAL ----外部晶振。
2).rc_ctiv的宏:NRF_SDH_CLOCK_LF_RC_CTIV,选择内部RC时值为16,选择外部晶体时值为0.
3).rc_temp_ctiv:NRF_SDH_CLOCK_LF_RC_TEMP_CTIV,选择内部RC时值为2,选择外部晶体时值为0.
4).accuracy:NRF_SDH_CLOCK_LF_ACCURACY,内部RC时置选择NRF_CLOCK_LF_ACCURACY_500_PPM,选择外部晶体时根据实际参考精度设置。

ble点灯视频:

#133 Re: RISC-V » juiceVm risc-v虚拟机在esp32上运行linux kernel » 2021-08-07 16:45:18

xiaohui 说:
kekemuyu 说:

同样是WROVER-B,cpu ram init到99.60%的时候,速度突然变慢,而且卡在了下图:
https://whycan.com/files/members/1315/Screenshot121824.png

这里是在解压,压缩率有点高,解压有点慢。

感觉有点不正常啊,几个小时了,才解压31%。就像我说的在ram init到99.60%的时候突然变慢,似乎有在此时就不正常了。

Screenshot151709.png

#134 Re: RISC-V » juiceVm risc-v虚拟机在esp32上运行linux kernel » 2021-08-07 12:18:48

同样是WROVER-B,cpu ram init到99.60%的时候,速度突然变慢,而且卡在了下图:
Screenshot121824.png

#135 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » esp32的arduino环境移植lvgl » 2021-08-07 11:21:30

移植过程比较简单,不用按照官方文档(有点跟不上代码更新的速度),过程如下:
1.在arduino的ide中下载三个库:lvgl和lvgl_examples,驱动库TFT_eSPI
Screenshot112527.png
2.修改TFT_eSPI的User_Setup_Select.h文件,使能对应的驱动芯片
Screenshot113044.png
修改TFT_eSPI\User_Setups的驱动文件,修改对应管脚。
Screenshot113119.png
3.复制lvgl中的lv_conf_template.h改名为lv_conf.h并移植到lvgl上层目录,同样复制lvgl_examples中的lv_demo_conf_template.h改名为lv_demo_conf.h并移植到lvgl_examples上层目录
Screenshot112821.png
4.修改lv_conf.h和lv_demo_conf.h这两个文件,这个就是使能或禁用某些参数,按需配置即可
5.最后编译arduino对应的demo,可能或报错,说找不到某些文件,应该是lvgl_examples中的某些文件引用的路径不对,修改一下即可。
Screenshot114227.png
路径报错需要修改的文件
Screenshot114411.png

#136 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » esp32的arduino环境移植lvgl » 2021-08-07 11:16:21

kekemuyu
回复: 1

屏幕是2.4寸的ili9341,跑了一下官方的demo,效果不错,尤其是透明图层很给力,就是屏幕素质太差,由于没有触摸,下一步移植一下按键的功能。
IMG_2021078887.jpg

#137 RISC-V » 看到rode无线麦克的拆解用到的芯片是炬芯ats2833 » 2021-07-24 09:57:07

kekemuyu
回复: 7

这参数太猛了,adda都是24位的,dsp核心400mhz。可惜不提供sdk,需要签协议。

O1CN01Yh8v0R1WuQfoy4n92206596232848.png
O1CN01yc4y0z1WuQg2elHbT_!!2206596232848.jpg

#138 Re: RISC-V » 自制博流bl702精致小板 » 2021-07-23 21:16:42

@qwert1213131
sipeed tb店,实测和手册基本一致
@metro
Gerber_PCB_LineTinyBL702.zip

#139 RISC-V » 自制博流bl702精致小板 » 2021-07-23 11:06:31

kekemuyu
回复: 26

32位144MHZ的带浮点riscv架构cpu
蓝牙ble5.0
内嵌512K SPI FLASH,内置rom 192k
132k RAM
自带USB烧录模式
700ma 3.3V LDO
锂电池管理
低功耗可电池供电,pds最低仅15ua左右电流,hbn最低1.5ua
15个GPIO接口
可插面包板
大小仅32mm X 18mm


Screenshot104729.png
IMG_20210723_105423.jpgIMG_20210723_105449.jpg

#140 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-07-23 00:14:55

后面的跟贴内容可能会一直涉及编译原理的内容,有些晦涩,只有对编译原理感兴趣的同学才会感兴趣吧!无论如何编译原理是了解计算机本质的一种途径,它涉及到计算体系的各个方面,学之受益无穷。今天就让编译原理这个大棒降维打击一下表达式的求解。

让程序求解一个表达式如123+234*(12/2),应该如何出处理呢?不同的思路可能有不同的答案,这里用编译原理这把牛刀宰它。

整体思路:
词法分析->语法分析->语义分析

其中需要说明的是语义分析是包含在语法分析中的,因为用的是语法制导翻译方法。

0.文法
  E->T E1
  E1->op1|T fun1 E1|null
  T->F T1
  T1->op2 F fun1 T1| null
  F->(E)|-F fun2|I
  I->const fun3
  op1->+fun4|-fun5
  op2->*fun6|/fun6
1.词法分析
   词法分析是比较简单,主要分为三类:
   数字:0-9
   界符:(  )
   运算符:+,-,*,/
 
   建立词法分析表(只是举例和代码并不匹配):
    Screenshot234905.png
   由词法分析表驱动词法解析程序,效果如下:

   token结构是:
type Token struct {
    Kind    int  //类型
    Content string //值
    RowNum  int  //行数
}

 
 

 [{1 123 0} {2 + 0} {1 234 0} {2 * 0} {3 ( 0} {1 12 0} {2 / 0} {1 2 0} {3 ) 0}]
  

 

2.语法分析
 
  核心框图:
  IMG_20210723_000350.jpg
  由文法规则获取first集和follow集,进而建立语法分析表:
 

var sParseTable = [8][8]string{
	//    +      -        *      /    const   (      )    $
	{"err", "T,E1", "err", "err", "T,E1", "T,E1", "err", "err"},                      //E
	{"op1,T,fun1,E1", "op1,T,fun1,E1", "err", "err", "err", "err", "null", "null"},   //E1
	{"err", "F,T1", "err", "err", "F,T1", "F,T1", "err", "err"},                      //T
	{"null", "null", "op2,F,fun1,T1", "op2,F,fun1,T1", "err", "err", "null", "null"}, //T1
	{"err", "-,F,fun2", "err", "err", "I", "(,E,)", "err", "err"},                    //F
	{"err", "err", "err", "err", "const,fun3", "err", "err", "err"},                  //I
	{"+,fun4", "-,fun5", "err", "err", "err", "err", "err", "err"},                   //op1
	{"err", "err", "*,fun6", "/,fun7", "err", "err", "err", "err"},                   //op2
}

   分析器核心程序:
 

func (c *Calc) Parse() bool {
	iListPos := 0

	var ival DataStack
	for c.ParseStack.Len() != 0 && iListPos < len(c.TokenList) {
		el := c.ParseStack.Back()
		ival = el.Value.(DataStack)
		c.ParseStack.Remove(el)

		if ival.Kind == "VT" { //非终结符
			icol := "$"
			if c.TokenList[iListPos].Kind == TOKEN_KIND_CONST {
				icol = "const"
			} else if c.TokenList[iListPos].Kind == TOKEN_KIND_OPRATOR {
				icol = c.TokenList[iListPos].Content
			} else if c.TokenList[iListPos].Kind == TOKEN_KIND_SPLITE {
				icol = c.TokenList[iListPos].Content
			}
			if v, ok := c.ParseTables[Pcell{ival.Data, icol}]; ok { //查询语法分析表

				if v.Data == "err" {
					log.Fatal("row,col:", ival.Data, c.TokenList[iListPos])
				} else if v.Data == "null" {
					continue
				} else {
					tmp := strings.Split(v.Data, ",")
					for k, _ := range tmp {
						re := tmp[len(tmp)-k-1]
						kind := ""
						if isVT(re) {
							kind = "VT" //非终结
						} else if isFUN(re) {
							kind = "FUN" //语义部分
						} else {
							kind = "VN" //终结
						}
						ds := DataStack{
							Data: re,
							Kind: kind,
						}

						c.ParseStack.PushBack(ds) //反序入栈

					}
				}

			} else {
				log.Fatal("row,col:", ival.Data, c.TokenList[iListPos])
			}

		} else if ival.Kind == "VN" { //终结符
			fmt.Println("VN:", ival)
			iListPos += 1 //下一个输入流
		} else if ival.Kind == "FUN" { //语义处理
			fmt.Println("FUN:", ival)

			switch ival.Data {
			case "fun1":
				c.fun1()
			case "fun2":
				c.fun2()
			case "fun3":
				c.fun3(c.TokenList[iListPos-1].Content)
			case "fun4":
				c.fun4()
			case "fun5":
				c.fun5()
			case "fun6":
				c.fun6()
			case "fun7":
				c.fun7()
			}
			// fmt.Println("FUN END:", c.OprateDataStack.Back().Value, c.OprateSplitStack.Back().Value)

		}

		ps := make([]string, 0)
		for i := c.ParseStack.Back(); i != nil; i = i.Prev() {
			ps = append(ps, i.Value.(DataStack).Data)
		}
		fmt.Println("ps:", ps)
	}

	if c.ParseStack.Len() == 0 && iListPos == len(c.TokenList) {
		c.Result = c.OprateDataStack.Back().Value.(string)
		return true
	} else {
		return false
	}

}

现在代码还有点乱,等整理后会上传至github。有词法分析和语法制导翻译的知识可以基本写一个简单的avr汇编器了。

#142 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-07-19 19:22:20

go语言开发的avr汇编器之词法分析已完成,主要流程是建立词法的状态转换表,表建成工作基本完成80%,整个流程就是表驱动。
Screenshot191800.png

#144 Re: RISC-V » juiceVm risc-v虚拟机在esp32上运行linux kernel » 2021-07-16 17:36:42

esp32最大支持16m的falsh和8m的psram,但esp32-s2支持1G的flash和1G的ram,esp32-s2硬件资源是够了,lz重新定义了能跑linux最廉价的riscv板子。

#145 Re: RISC-V » juiceVm risc-v虚拟机在esp32上运行linux kernel » 2021-07-16 17:18:33

超赞的项目!找个大flash的esp32开发板,可以跑些应用,看性能怎么样。

#146 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-07-15 22:13:20

@yesiraperfect
圣剑传说玛娜传奇 超频后能玩吗?

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

司徒大佬好像搞过音频驱动,miyoo横米就是自己写的

#149 Re: RISC-V » 【新玩具get】博流智能BL702(RISC-V+FPU+2.4G+USBD) » 2021-07-12 00:22:29

开发板rv-debugger-plus
bl702 32mhz实测电流
测试工具是福禄克15b+

running 23.6ma
wfi 23.1ma
pds 92.2ua
hbn 79.7ua

这个参数和手册差得也太大了:

Screenshot002122.png

#151 Re: RISC-V » 【新玩具get】博流智能BL702(RISC-V+FPU+2.4G+USBD) » 2021-07-11 13:11:50

买了RV-Debugger Plus,测得电流很大呀,跑了power的例子,功耗30ma,和描述中的5ma差距很大呀。是RV-Debugger Plus其他电路影响吗?
Screenshot131039.png

#152 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-07-08 11:40:01

去掉保护玻璃,屏幕看起来好多了。

#153 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-07-07 22:17:19

我将所有的ps1游戏上传到了阿里云盘,如何私信分享给你呢?
Screenshot221603.png

#154 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-07-07 20:08:09

圣剑传说玛娜传奇,超频后能玩吗? 横米在不超频时,总是会卡

#155 Re: 全志 SOC » 求助BGA焊接教程,以全志H3为例子,用钢网?风枪?焊油?锡膏? » 2021-06-28 21:16:31

开始最好不要用带ddr的主控,成功率太低。选用内带ddr的主控练手,等熟练掌握bga,再开始外置ddr的主控。

#156 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » IOT管家小程序添加mqtt客户端 » 2021-06-25 23:56:42

kekemuyu
回复: 1

家庭物联网中心基本成型,树莓派4搭建mqtt服务器,加上蓝牙网关,未来根据需求网关会加入lora等。树莓派再将数据上传至阿里云,手机平板等可远程实时查看和控制物联网设备。

#157 君正Ingenic/X1000/X2000/T10/T20/T30 » 第一次做四层板(还是BGA主控) » 2021-06-23 21:01:38

kekemuyu
回复: 8

板子回来了,就等器件。大家猜第一次焊接BGA能不能成功呢?  顺便吐槽一下最近芯片涨价,常用的电源ldo芯片都翻了几倍,什么时候价格才能恢复呀!!!
IMG_20210623_204617.jpg

#158 Re: RISC-V » 【新玩具get】博流智能BL702(RISC-V+FPU+2.4G+USBD) » 2021-06-23 12:39:21

bl602和bl702 芯片在哪能买到,x宝都搜不到,学了有啥用。

#159 Re: ESP32/ESP8266 » ESP32DOWD外扩ESP-PSRAM64H不识别的问题 » 2021-06-23 12:33:02

这是之前做过成功驱动spiram的,芯片和你的不一样,不知道有没有参考价值。
Screenshot123020.png

#160 Re: RISC-V » RISC-V代码密度相比Cortex-M差距明显 » 2021-06-22 18:06:04

这样比没有用的,编译器的因素影响太大。都用汇编还好点,不过理论上thum2的代码密度确实比riscv的精简指令要高。

#161 Re: RISC-V » 用汇编学习risc-v指令集,并在线仿真,点亮led » 2021-06-20 14:46:17

模拟器右下角,可以给作者提个issue。这么大个bug,应该会修复
Screenshot144436.png

#162 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-06-18 21:24:04

@司徒
只是引导linux,坛子里有人做过了。代码才3k,https://whycan.com/t_5060.html

#163 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-17 16:50:58

atiny13没有硬件串口,用软件模拟。发送模拟比较简单,接收就有点复杂了,先做发送。汇编模拟串口发送:

;
; ***********************************
; * (Add program task here)         *
; * (Add AVR type and version here) *
; * (C)2019 by Gerhard Schmidt      *
; ***********************************
;
.nolist
.include "tn13adef.inc" ; Define device ATtiny13A
.list
;
; **********************************
;        H A R D W A R E
; **********************************
;
; (F2 adds ASCII pin-out for device here)
;
; **********************************
;  P O R T S   A N D   P I N S
; **********************************
;
; (Add symbols for all ports and port pins with ".equ" here)
; (e.g. .equ pDirD = DDRB ; Define a direction port
;  or
;  .equ bMyPinO = PORTB0 ; Define an output pin)
;
; **********************************
;   A D J U S T A B L E   C O N S T
; **********************************
;
; (Add all user adjustable constants here, e.g.)
 .equ clock=9600000 ; Define the clock frequency
 .equ baudRate=115200
 .equ TX_DELAY = (clock / baudRate - 9) / 3;
 ;.equ cycle_t = 1000000 / clock
 .equ wait_cnt_10us = 10 ;10 / cycle_t / 10

;
; **********************************
;  F I X  &  D E R I V.  C O N S T
; **********************************
;
; (Add symbols for fixed and derived constants here)
;
; **********************************
;       R E G I S T E R S
; **********************************
;
; free: R0 to R14
.def rSreg = R15 ; Save/Restore status port
.def rmp = R16 ; Define multipurpose register
; free: R17 to R29
; used: R31:R30 = Z for ...
;
.def TX_BITS_NBR_TMP = R18
.def WAIT_NBR_TMP = R19
.def  BYTE_TO_TRANSMIT = R24
.def WAIT_NBR = R22
; **********************************
;           S R A M
; **********************************
;
.dseg
.org SRAM_START
; (Add labels for SRAM locations here, e.g.
; sLabel1:
;   .byte 16 ; Reserve 16 bytes)
;
; **********************************
;         C O D E
; **********************************
;
.cseg
.org 000000
;
; **********************************
; R E S E T  &  I N T - V E C T O R S
; **********************************
	rjmp Main ; Reset vector
	reti ; INT0
	reti ; PCI0
	reti ; OVF0
	reti ; ERDY
	reti ; ACI
	reti ; OC0A
	reti ; OC0B
	reti ; WDT
	reti ; ADCC
;
; **********************************
;  I N T - S E R V I C E   R O U T .
; **********************************
;
; (Add all interrupt service routines here)
;
; **********************************
;  M A I N   P R O G R A M   I N I T
; **********************************
;
Main:
	ldi rmp,Low(RAMEND)
	out SPL,rmp ; Init LSB stack pointer
; ...
;	sei ; Enable interrupts
;
; **********************************
;    P R O G R A M   L O O P
; **********************************
;
  ldi WAIT_NBR,TX_DELAY
  ldi BYTE_TO_TRANSMIT,0x0A
  rcall  SerialAsmTx_4

Loop:
    ldi WAIT_NBR,TX_DELAY
  ldi BYTE_TO_TRANSMIT,0x0A
  rcall  SerialAsmTx_4
  ldi r28,50
  rcall delay_500ms

	rjmp loop
;
; End of source code

SerialAsmTx_4:
	cli
	sbi DDRB, PB4
	ldi TX_BITS_NBR_TMP, 10
	com BYTE_TO_TRANSMIT
TxLoop_4:
        brcc Tx1_4
        cbi PORTB, PB4
Tx1_4:
        brcs TxDone_4
        sbi PORTB, PB4
TxDone_4:
        mov WAIT_NBR_TMP, WAIT_NBR
TxDelay_4:
        dec WAIT_NBR_TMP
        brne TxDelay_4
        lsr BYTE_TO_TRANSMIT
        dec TX_BITS_NBR_TMP
        brne TxLoop_4
		reti
;10 cycles,per loop
delay_500ms:
  ldi r25,wait_cnt_10us
  ldi r26,100
  ldi r27,10
loop1:
  nop
  nop
  nop
  nop
  nop
  nop
  nop
  dec r25
  brne loop1
  dec r26
  ldi r25, wait_cnt_10us
  brne loop1
  ldi r26,100
  dec r27
  brne loop1
  ldi r27,10
  dec r28
  brne loop1
  ret

;
; (Add Copyright information here, e.g.
; .db "(C)2019 by Gerhard Schmidt  " ; Source code readable
; .db "C(2)10 9ybG reahdrS hcimtd  " ; Machine code format
;

#165 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-06-15 12:49:55

如果不介意编程语言,我推荐《编译器设计之路》这本书。这是一本实战的书,里面有pascal编译器的完整实现及源码。代码量不大,很适合入门。
这个编译器的源码是c++实现,源码地址:https://sourceforge.net/projects/neopascal/
860062803.jpg

#166 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-06-15 00:01:53

从来不以功利目的去学习技术,只是跟随兴趣。学习汇编也是对计算机底层的兴趣,从学编程的第一天开始就对操作系统、编译原理感兴趣。
最近研究汇编也是为了学习写汇编器、编译器。前几天刚把avr的汇编器的词法分析部分写完。写汇编器之前,想参考一下开源的汇编器,发现除了gcc的,很少有人专门写一个汇编器了(除了cpu设计公司,甚至他们也是给gcc写个后端)。有意思的是看到了一个avr的开源汇编器是pascal写的,分析了一下竟然没有按照编译原理写,硬是靠自己的想法堆出来了。它的地址:http://www.avr-asm-tutorial.net/gavrasm/index_en.html,有兴趣可以看一下。

#167 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-06-14 21:08:20

发现司徒的测试代码都是汇编,最近在研究汇编,向大神看齐

#168 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-14 19:25:45

单独学一种汇编不过瘾,顺便和其他架构汇编对比学习更有意思。今天看到arm架构比较有意思,37个寄存器,但有很多同名的寄存器,在不同工作模式加以区分。不知道为什么当初这样设计,7种工作模式,不同模式可访问寄存器是一般是不一样的。

#170 Re: 司徒开源 » 研究FC3000掌機的開源可行性 » 2021-06-13 22:38:15

非常欣赏司徒的探索精神,比打怪升级还过瘾!!!  持续关注

#172 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-04 22:46:25

从开始学编程就对操作系统、编译器这些东西感兴趣,大学时学8051汇编时就想用汇编写个调度器,最后写出了个简单的虚拟机跑在8051上

#173 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-04 22:30:28

最近想研究一下单片机的汇编器,发现开源的汇编器非常少,基本上只有gnu家的,看来底层的东西很少人碰了。gcc的汇编器太复杂,毕竟他需要统筹考虑众多架构芯片,提取出了很多共有代码,看起来太费力。arm自家的汇编器又不开源,只能自己慢慢研究。可能cpu厂家也是为了省事,直接基于gcc写个新cpu的目标代码生成器就马上上市。没必要再单独再开发一个汇编器,毕竟现在最低层有人用的也是c语言。

#174 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 为什么mcu的第一条指令必须是跳转指令 » 2021-06-04 21:50:27

算了,还是正常的跳过中断吧:

.cseg 
.org $0
        rjmp start
.org $000A
start:
	sbi DDRB,DDB0
	sbi PORTB,PB0
Loop:
	rjmp loop

#175 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 为什么mcu的第一条指令必须是跳转指令 » 2021-06-04 21:45:52

abigpad 说:

看来楼主不是学电子的出身,学过51的,应该都知道,前面几个地址被中断占了。

发帖前确实忘了中断了,但是看到文档,试验了一下在0地址把中断关掉,还是跑飞
Screenshot214515.png

#176 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-04 21:29:13

挖掘avr手册,发现保留寄存器,可以当作普通寄存器存储数据。


Screensho202212657.png

#177 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 玩一玩avr汇编,探究计算机的本质 » 2021-06-04 21:22:40

kekemuyu
回复: 14

avr单片机是很经典的8位mcu,因为arduino的火爆,直到现在依然很流行。在8位单片机开创性的引入了32个寄存器,两级流水线,risc结构直接降维打击了同时代的8051。以avr为例,探究一下计算机的本质。研究计算机原理可以看书,也可以做试验。我选择从试验开始,这样更有趣一些。现在做实验简单多了,各种虚拟环境和ide非常丰富。我选择用真机做实验,这样更实用和真实一些。

首先介绍一下用到的工具:
1.atmel studio,主要用它编译和仿真汇编代码
2.硬件,一个avr最小系统,我选择attiny13,研究汇编够用了
3.烧写器usb isp,以及烧写工具智峰下载器
4.avr汇编指令集手册,以及attiny13的手册

开篇上点灯程序:

.cseg 
.org $0
        rjmp start
.org $000A
start:
	sbi DDRB,DDB0
	sbi PORTB,PB0
Loop:
	rjmp loop

机器码对照:

                                 .cseg 
                                 .org $0
000000 c009                              rjmp start
                                 .org $000A
                                 start:
00000a 9ab8                      	sbi DDRB,DDB0
00000b 9ac0                      	sbi PORTB,PB0
                                 Loop:
00000c cfff                      	rjmp loop

hex格式

:020000020000FC
:0200000009C035
:06001400B89AC09AFFCF6C
:00000001FF

flash memery快照:

prog 0x0000  09 c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff b8 9a c0 9a 
prog 0x0018  ff cf ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

hex格式解释:
  数据个数   地址      类型    数据          crc校验
: 00           0000     00     000000...    00

下载器使用hex文件烧录数据到avr,中间经过了解析hex文件的过程。主要是取出机器码并烧录到flash。
avr的汇编格式是:
操作码---操作数/地址/空---操作数/地址/空
整条指令是16位或是32位(32位很少)

avr整个工作过程是,从mcu上电开始,pc指向flash的0地址,开始取指-执行重复下去,直至结束。我们每天使用的电脑办公、手机刷视频,在cpu看来都是一堆01010101。

我们可以用汇编开发mcu,也可以直接用机器码开发。上古计算机就是机器码编程,那时候是没有falsh,直接把01代码用纸带打孔的方式来表示,也就是说纸带相当于falsh。即使现在用机器码开发,比那时候也简单多了,直接在电脑上查询寄存器的地址并转为相应的机器码,然后烧进falsh即可。

#178 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 为什么mcu的第一条指令必须是跳转指令 » 2021-06-04 18:37:14

kekemuyu
回复: 4

今天研究了一下avr的汇编指令,发现第一条指令必须要是rjmp或其他跳转(跳转到主程序),否则程序就跑飞了。把主程序放到falsh的$0000000位置也不行。
cpu不是从flash的0位置顺序读取指令执行吗?  为什么第一条必须是跳转才行?

正确代码:

.org 000000
	rjmp start
	nop
start:
	ldi r16,0xFF
	out DDRB,r16
	sbi PORTB,PB0
Loop:

	rjmp loop

错误:

start:
	ldi r16,0xFF
	out DDRB,r16
	sbi PORTB,PB0
Loop:

	rjmp loop

#180 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Raspberry Pi开售RP2040微控制器芯片 售价1美元 » 2021-06-01 23:02:26

kekemuyu
回复: 5

今年早些时候,Raspberry Pi基金会宣布推出4美元的Raspberry Pi Pico和RP2040微控制器用于嵌入式开发。现在,RP2040芯片正在通过他们的经销商以仅1美元的价格出售,供那些想用这种树莓派芯片构建自己的电子产品的人使用。
1美元的RP2040芯片包含两个133MHz的ARM Cortex-M0+内核,可以运行FreeRTOS和MicroPython等软件。除了这两个嵌入式内核外,还自带264KB的内存和对这种类型的控制器的所有常见I/O接口的支持。

树莓派基金会宣布,他们今年已经运送了超过60万块Raspberry Pi Pico单板,还有另外70万块的订单等待交付。同时,更多的创作者和其他企业一直在寻求使用RP2040芯片建立自己的产品,这让他们现在可以以低至1美元的单件销售价格提供该芯片。

预计到今年秋天RP2040芯片将 "大量上市"。关于RP2040供应的更多细节请查阅RaspberryPi.org。

#181 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 龙芯指令集开放下载了 » 2021-06-01 22:28:03

听胡大大一讲,riscv指令集瞬间不香了。riscv指令集可能会一直不断扩展,最后碎片化严重。

#183 RISC-V » 用汇编学习risc-v指令集,并在线仿真,点亮led » 2021-06-01 20:39:36

kekemuyu
回复: 12

首先在线仿真地址:http://tice.sea.eseo.fr/riscv/,选择这个主要是因为比较好玩直观。

Screenshot203621.png
这个模拟器是支持gnu的编译器的,所以先安装编译器:

sudo apt install gcc-riscv64-unknown-elf

模拟器gpio寄存器:
Screenshot203803.png

点灯程序:

/*
 * Configure the GPIO with:
 * - Byte 0: 8 LEDs
 * - Byte 1: 8 toggle switches
 */

    .text

    .global __reset

__reset:
    j start

start:
    li x1, 0xd0000000
    /* Set first GPIO byte as outputs */
    sb x0, (x1)

    li x3, 0xff
    sb x3, 0x10(x1)
    j .

    .section gpio_config, "a"

leds: .byte 3, 3, 3, 3, 3, 3, 3, 3
sws:  .byte 2, 2, 2, 2, 2, 2, 2, 2

编译文件:

riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 -c -o led.o led.s

连接成elf文件:

riscv64-unknown-elf-gcc -march=rv32i -mabi=ilp32 -nostdlib -T rv32e.ld -o led.elf led.o

连接文件rv32e.ld

ENTRY(__reset)

MEM_SIZE    = 4K;
STACK_SIZE  = 512;
BITMAP_SIZE = 1K;

SECTIONS {
    . = 0x0;

    .text : {
        *(vectors)
        *(.text)
        __text_end = .;
    }

    .data   : { *(.data) }
    .rodata : { *(.rodata) }

    __global_pointer = ALIGN(4);

    .bss ALIGN(4) : {
        __bss_start = .;
        *(.bss COMMON)
        __bss_end = ALIGN(4);
    }

    . = MEM_SIZE - STACK_SIZE - BITMAP_SIZE;

    .stack ALIGN(4) : {
        __stack_start = .;
        . += STACK_SIZE;
        __stack_pointer = .;
    }

    .bitmap ALIGN(4) : {
        __bitmap_start = .;
        *(bitmap)
    }

    __bitmap_end = __bitmap_start + BITMAP_SIZE;
}

生成intel格式hex:

riscv64-unknown-elf-objcopy -O ihex led.elf led.hex

最后附上在线仿真器的文档说明:http://tice.sea.eseo.fr/riscv/doc/

#184 Re: 全志 SOC » 全志D1芯片之终极探索 » 2021-05-30 10:33:24

D1快被扒的裤衩都不剩了。。。

#187 Re: Cortex M0/M3/M4/M7 » 淘宝的stlink坏了,还能拯救一下吗?(已解决) » 2021-05-18 21:20:31

估计片子是stm32fcbt6,没有找到固件。但是找到了stm32f103c8t6的stlink固件,把bulepill开发板烧成stlink的固件,就变成了stlink了,注意pb12和pb14要短接。以后再也不用买stlink了,随便找个stm32f103的开发板就能当stlink用

#188 Cortex M0/M3/M4/M7 » 淘宝的stlink坏了,还能拯救一下吗?(已解决) » 2021-05-18 18:31:07

kekemuyu
回复: 5

芯片被打磨掉了,不知道哪位大神知道型号。问题是电脑突然不识别设备了,显示未知设备。可能是有一次调试芯片时正负接反了导致。
IMG_20210518_182405.jpgIMG_20210518_182413.jpgst

stm32f103c8t6的stlink固件:
ST-Link固件V2.J16.S4.hex.7z

#194 站务公告/网站建设 » 看不到当天的帖子回复 » 2021-05-15 20:21:17

kekemuyu
回复: 11

大家有没有发现,最近论坛好像看不到当天的帖子的回复了,在主题的列表里能看到有人回复,但进帖子详情页却看不到

#195 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 分布式串口透传服务器(开源) » 2021-05-15 18:26:44

kekemuyu
回复: 8

现在正在开发阶段,核心功能已完成。主要功能网口和多串口透传数据。
架构组成:
1.vined模块(运行在开发板),可任意扩展
2.vinelookup模块(可运行在开发板或pc),模块注册和发现
3.vineadmin模块(运行在pc),可视化管理,数据展示

硬件构成:任意可运行linux并且带串口和网口的板子
软件:go语言开发,跨平台

路线图和支持特性如下:
1.分布式,可任意平行扩展,模块化管理
2.数据监控,过滤,持久化
3.支持以http,tcp,udp等协议向指定串口透传数据
4.。。。。

测试效果如下,在win10虚拟4个串口,打开两个串口工具分别打开com2和com4,分别向vined模块发送数据,vined建立通串口和网络的透传通道,就可以获取串口数据:
Screenshot180658.png

仓库:https://github.com/vineio/vine

#196 Re: 全志 SOC » 用F1C100S开发了一个项目,原始技术实现,裸奔XUI GUI框架 » 2021-05-10 19:48:02

达克罗德 说:
kekemuyu 说:

声明式ui,还是流行的web前端比较合适(html,css,js三剑客)。sciter就是基于这种技术实现,体积也比较小,不过需要linux(gtk)。
https://whycan.com/files/members/1315/Screenshot211109.png

sciter不是完整实现,React和VUE都跑不起来的。
不过作为一个HTML引擎,sciter确实很小巧才几个MB。我也关注很久了,学生时代就关注过,那时候它还很简陋,现在强大多了

前端web不用框架开发桌面级程序也是很简单的.

#197 Re: ESP32/ESP8266 » esp32使用正则获取天气信息 » 2021-05-10 18:31:22

api当然可以,但大多数都是收费的或者有使用限制.

#199 Re: 全志 SOC » 用F1C100S开发了一个项目,原始技术实现,裸奔XUI GUI框架 » 2021-05-09 12:49:48

很多桌面软件都已经开始用前端技术来开发了,常用的网易云音乐pc端,vscode,微信小程序开发工具等。

#200 Re: 全志 SOC » 用F1C100S开发了一个项目,原始技术实现,裸奔XUI GUI框架 » 2021-05-08 22:40:51

在树莓派运行的demo,可以看到依赖的东西很少,只有一个scapp文件,其他都是前端的东西
Screenshot223846.png

#201 Re: 全志 SOC » 用F1C100S开发了一个项目,原始技术实现,裸奔XUI GUI框架 » 2021-05-08 21:09:42

声明式ui,还是流行的web前端比较合适(html,css,js三剑客)。sciter就是基于这种技术实现,体积也比较小,不过需要linux(gtk)。
Screenshot211109.png

#202 Re: ST/STM8/STM8S/STM8L » 请大家推荐一款 5V转3.3V的 低功耗LDO吗? » 2021-05-08 10:36:34

ti的tlv62569  电流最大2a 性价比高,虽然是dcdc,但静态功耗很低
Untitled_20210508-1036.png

#206 ESP32/ESP8266 » esp32使用正则获取天气信息 » 2021-05-03 17:36:23

kekemuyu
回复: 2

打开任何一个天气网站的首页,它会自动定位你的本地ip地址,并显示出你所在位置的天气信息。根据这个特性,我们可以从它的首页抓取天气信息。

import urequests
import ure

url="https://www.qweather.com/"

html=urequests.get(url)
text=html.text.replace(" ","")

text_length=len(text)

regex=ure.compile("condition__tmp.*<")
obj=None
index=0
while obj is None:
  if index>=text_length:

    break
  obj=regex.search(text[index:index+1000])
  index=index+1000
  print(index)

print(obj.group(0))

#209 Re: ESP32/ESP8266 » 精心设计的esp32小板 » 2021-04-30 11:48:56

作为电子diy,还是以模块化比较好。核心板加扩展模块方式很灵活,核心板可以复用,扩展版任意添加。

#210 Re: ESP32/ESP8266 » 精心设计的esp32小板 » 2021-04-29 20:17:16

湘楚浪子 说:

求淘宝链接

板子刚到,还没开始焊接

#211 Re: ESP32/ESP8266 » 精心设计的esp32小板 » 2021-04-29 20:16:39

raspberryman 说:

好漂亮,什么软件画的图?

用的 https://www.processon.com/ ,是个在线工具

#212 ESP32/ESP8266 » 精心设计的esp32小板 » 2021-04-29 20:02:23

kekemuyu
回复: 16

市面上大部分的esp32开发板太大,最重要的是很少能满足地功耗要求。在micropython的官网看到tinypico这款小板,很是喜欢,基本满足了我的需求。tinypico虽好但是万能宝需要的银子太多,只好diy。设计的引脚布局和tinypico一样,其他如电源、锂电充电能都是不一样的。


1.体积很mini,大概35*18mm
2.deepsleep时10ua左右。
3.自带锂电池充电
4.自带4mb的psram,满足复杂应用
5.type-c接口


linetinyesp32.png

#214 全志 SOC » 发现全志上线了官方的淘宝店 » 2021-04-28 15:40:17

kekemuyu
回复: 26

估计是为了推广最新的risc-v的D1芯片,现在上架的只有r329.
Screenshot53654.pngScreenshot153719.png

#215 ESP32/ESP8266 » 自制odroidgo掌机 » 2021-04-23 12:57:50

kekemuyu
回复: 5

复刻国外odroidgo开源掌机,原理图和源码都是开源的,我修改了电源部分和制作了新的外壳。esp32处理器,240mhz主频双核,16M的falsh,8m的psram,wifi,蓝牙。16g的tf卡。有需要者请联系wildgeek_mumu。
IMG_20210423_115132.jpgIMG_20210423_115242.jpgIMG_20210423_115105.jpgIMG_20210423_115059.jpgIMG_20210423_115116.jpg

制作视频:
https://www.bilibili.com/video/BV1Wf4y1s7df/

#216 Re: ESP32/ESP8266 » esp8266通过串口用作网卡使用 » 2021-04-21 10:46:26

我的tiny200s内核没有slip驱动,所以报了一下错误:

SLIP_set_disc(1): Invalid argument

将这个驱动编译进内核应该就可以了,当然还需要有slattach 和telnet这两个工具

#218 ESP32/ESP8266 » esp8266通过串口用作网卡使用 » 2021-04-21 01:13:56

kekemuyu
回复: 7

相对于spi或者sdio接口方式,串口的配置更加简单。已经通过笔记本验证,下次验证f1c100s。

https://github.com/martin-ger/esp_slip_router

Usage as STA
In this mode the ESP connects to the internet via an AP with ssid, password and offers at UART0 a SLIP interface with IP address 192.168.240.1. This default can be changed in the file user_config.h.

To connect a Linux-based host, start the firmware on the ESP, connect it via serial to USB, and use the following commands on the host:

sudo slattach -L -p slip -s 115200 /dev/ttyUSB0&
sudo ifconfig sl0 192.168.240.2 pointopoint 192.168.240.1 up mtu 1500
now

telnet 192.168.240.1 7777
gives you terminal access to the esp as router. On the ESP you then enter:

CMD>set ssid <your_ssid> 
CMD>set password <your_pw> 
CMD>set use_ap 0
CMD>save
CMD>reset
To get full internet access you will need aditionally a route:

sudo route add default gw 192.168.240.1
and a DNS server - add an appropriate entry (e.g. public DNS server) in /etc/resolv.conf, eg. by (as root):

echo "nameserver 9.9.9.9" > /etc/resolv.conf

#219 ESP32/ESP8266 » 自己做的line-esp32开发板 » 2021-04-18 17:47:05

kekemuyu
回复: 2

把line-watch功能拆分,做成了开发板。
line-esp32.jpg

开发板特点:

1.核心模块+扩展模块模式,灵活配置,释放你的想象力

2.依托于micropython平台和自建的iotbbs物联网应用市场(正在建设中),实现设备端下载安装应用的功能,更新颖的设备端软件开发方式

3.核心板已集成bm8563实时时钟,锂电池供电,oled1306屏幕,4个功能按键,10个io扩展口,一个l红色led。esp32芯片可以wifi和蓝牙。

4.硬件、软件以及涉及到的手机端工具软件完全开源。

https://iotbbs.vip/

#220 全志 SOC » 全志科技发布首颗 RISC-V 应用处理器「D1」 » 2021-04-16 19:24:08

kekemuyu
回复: 3

全志科技今日宣布推出「D1」处理器,其是全球首颗量产的搭载平头哥玄铁 906 RISC-V 的应用处理器,为万物互联 AIoT 时代提供了新的智能关键芯片。
https://weibo.com/ttarticle/p/show?id=2310474626222876328399

#222 ESP32/ESP8266 » 以micropython为平台搭建物联网应用市场 » 2021-04-11 15:04:29

kekemuyu
回复: 0

linewatch是生态建设的引子。未来会有更多硬件加入生态建设中,以micropython为中心,建立起一系列的物联网硬件设备。软件生态正在不短完善中,可能会出现越来越多的iot应用,也可能有小游戏的产品加入,还会有什么样的物联网产品加入谁知道呢?

西瓜视频详细讲解:
https://www.ixigua.com/6949787996174582285?logTag=c4d5450ed3ea8e7edd11

#223 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 微信小程序通过蓝牙采集温湿度 » 2021-04-11 15:01:50

3050311118 说:

这个小程序需要付给腾讯多少钱?貌似一年300?

不涉及支付,不需要付钱

#226 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 号外,发现一个在手机上安装完整linux(带桌面和ai开发环境)的好软件 » 2021-02-03 10:11:03

kekemuyu
回复: 17

软件名称:aidlearning
是国人开发,网址:http://www.aidlearning.net/

移动端AI开发第一平台
天生强大,Aid在Android上构架了一个支持图形化界面的完整Linux系统
几乎支持所有深度学习开发框架:caffe/mxnet/keras/torch/tensorflow/ncnn/opencv...
内置了强大的编程IDE和开发工具

在pc端可以访问手机端的aidlearning系统,效果如下:
Screenshot2021-02-0100023.pngScreenshot2021-02-03100101.png

#227 Re: 全志 SOC » 玩游戏机的想搞下f1c100s系列的掌机的内置spi芯片内容 不懂硬件...请问几个问题 » 2021-02-02 21:33:45

shawn.d 说:
kekemuyu 说:
qllbee 说:

我说错了 这个是横版的,确实一直更新, 竖版的需要刷机或者改机再刷  司徒的是竖版的老版本
我这不还没刷吗 需要先备份然后先折腾折腾原版系统....然而编程器不给力...
我的这个是最早版本的 得改机那种

所有版本都有的https://github.com/TriForceX/MiyooCFW
https://whycan.com/files/members/1315/2021-02-02145308.png

我可以很明确的告诉你,这个开源工程有很多问题,你烧录一下自己编译的就知道了,当然你直接下载他的镜像烧录是OK的,而且我跟作者联系过,我基本断定它并不是真的开源.掌机谈开源就是个笑话,想玩还是自己撸比猜别人的更简单.

是吗?这倒是没注意,是不是版本不对,他wiki里写的“Note: The source codes availables are only for Bittboy v3 or less. For Bittboy v3.5 or PocketGo the source code is not confirmed that will work yet.”

开源的游戏系统也不能说完全没有,RetroPie应该是完全开源的。

#228 Re: 全志 SOC » 玩游戏机的想搞下f1c100s系列的掌机的内置spi芯片内容 不懂硬件...请问几个问题 » 2021-02-02 14:54:24

qllbee 说:

我说错了 这个是横版的,确实一直更新, 竖版的需要刷机或者改机再刷  司徒的是竖版的老版本
我这不还没刷吗 需要先备份然后先折腾折腾原版系统....然而编程器不给力...
我的这个是最早版本的 得改机那种

所有版本都有的https://github.com/TriForceX/MiyooCFW
2021-02-02145308.png

#229 Re: 全志 SOC » 玩游戏机的想搞下f1c100s系列的掌机的内置spi芯片内容 不懂硬件...请问几个问题 » 2021-02-02 14:23:24

qllbee 说:
kekemuyu 说:

读spifalsh做什么? linux内核和文件系统都在tf卡里

有的是不在tf卡里....全在spi里面....

如果是为了获取最新的miyoo源码,这里有最新的,而且还在持续更新https://whycan.com/t_2998.html

#230 Re: 全志 SOC » 开源自己画的H3四层板打板只要50块 » 2021-02-02 14:18:53

学技术如果抱着太强的功利心,总是感觉学者也不好学那也没必要。如果是以兴趣为出发点,任何技术都可以为我所用。“做人嘛,最重要的是开心啦”,linus torvalds写过一本自传《just for fun》,所以说兴趣很重要。

#234 ESP32/ESP8266 » 在esp32上运行unix » 2021-01-27 17:36:26

kekemuyu
回复: 3

理论上来说只要是cpu都可以运行linux或unix,只要ram和falsh够大,原理是在单片机(无论是8bit,16bit,32bit,即使不带mmu)上模拟可以运行linux的cpu。

https://www-cnx--software-com.cdn.amppr … p32-soc%2F
The relatively popular Digital Equipment Corporation (DEC) PDP-11 16-bit minicomputers started selling in the 70s, and were still available in the earlier 90s. While being stuck in Europe due to COVID-19 restrictions, Jeroen Domburg (aka Sprite_tm) decided to design a tiny replica of a DEC VT102 PDP-11 terminal based on ESP32 wireless SoC and running 2.11 BSD UNIX through SimH PDP11 emulator.

#236 Cortex M0/M3/M4/M7 » 树莓派派基金会发布新产品raspberry pi pico » 2021-01-21 17:15:19

kekemuyu
回复: 8

https://www.raspberrypi.org/documentation/pico/getting-started/

pico-board-c87f938e4e889e9cbac0f5bc1ff27f30.png

Board Specifications
Raspberry Pi Pico is a low-cost, high-performance microcontroller board with flexible digital interfaces. Key features include:

RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz
264KB of SRAM, and 2MB of on-board Flash memory
Castellated module allows soldering direct to carrier boards
USB 1.1 with device and host support
Low-power sleep and dormant modes
Drag-and-drop programming using mass storage over USB
26 × multi-function GPIO pins
2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels
Accurate clock and timer on-chip
Temperature sensor
Accelerated floating-point libraries on-chip
8 × Programmable I/O (PIO) state machines for custom peripheral support

#237 Re: 全志 SOC » 跟贴从零构建f1c200s硬件开发板 » 2021-01-12 17:54:49

为什么一直在重复“从零开始构建”,感觉大量的工作没有被继承下来。希望大神们建个github,规范化建起来。这个项目必须由大神牵头才能搞起来,否则会一直有小白“从零开始”,我也是小白。

#239 Re: ESP32/ESP8266 » 发现乐鑫官方已经支持把esp32作为网卡来用了(支持linux和stm32) » 2021-01-11 17:37:26

Bosspoi 说:

看了下,固件是下载到ESP32铁皮模块的Flash里的,启动的时候加载。
ESP8089/ESP8266EX是每次启动的时候下载到ESP8089/ESP8266EX的RAM里。
也就是ESP32比ESP8089/ESP8266EX功能更多,bug更少,但是体积也更大(因为得要用铁皮模块)

”铁皮模块“这都不是事儿,esp32可以直接画在板子上

#240 ESP32/ESP8266 » 发现乐鑫官方已经支持把esp32作为网卡来用了(支持linux和stm32) » 2021-01-10 21:20:37

kekemuyu
回复: 17

https://github.com/espressif/esp-hosted

ESP-Hosted solution
ESP-Hosted project provides a way to use ESP32 or ESP32-S2 (termed as ESP peripheral) as a communication processor for Wi-Fi and Bluetooth/BLE connectivity. On the host side, ESP-Hosted offers a standard network interface for receiving and transmitting 802.3 frames. On top of the network interface, the host can use its own TCP/IP and TLS stack. For BT connectivity, a standard HCI interface is exposed to the Bluetooth host stack.

Please note that this project doesn't provide a standard 802.11 interface to the host. For the control path between the host and ESP peripheral, ESP-Hosted uses a custom implementation based on Protobuf.

Connectivity Support
ESP hosted solution provides following WLAN and BT/BLE features to host:

WLAN Features:
802.11b/g/n
WLAN Station
WLAN Soft AP
BT/BLE Features:
v4.2 BR/EDR and BLE
Supported Hosts
ESP-Hosted solution supports microprocessors running Linux as well as STM32 MCU (STM32F469I). It's possible to port this relatively easily on other MCUs too. We support Raspberry-Pi (3 Model B+, 4 Model B) and STM32 Discovery Board (STM32F469I-DISCO) out of the box.

Supported Transports
ESP-Hosted uses SDIO or SPI interface as a transport interface for data and control path. The host acts as SDIO or SPI host whereas ESP32 or ESP32-S2 acts as a corresponding ESP peripheral. Currently Raspberry Pi supports both SDIO and SPI transport and STM32 supports SPI transport. As a peripheral device, ESP32 supports both SDIO and SPI transport interfaces and ESP32-S2 supports SPI transport interface.

For detailed explanation, please go through -

Using Raspberry-Pi as a Linux host
Using STM32F469I-DISCO as a MCU host
Feature Matrix
Linux Host
Below table explains which feature is supported on which transport interface for Linux based host.

ESP device    Transport Interface    WLAN support    Virtual serial interface    BT/BLE support
ESP32    SDIO    Yes    Yes    Yes
ESP32    SPI    Yes    Yes    Yes
ESP32    UART    No    No    Yes
ESP32-S2    SDIO    NA    NA    NA
ESP32-S2    SPI    Yes    Yes    NA
ESP32-S2    UART    No    No    NA
MCU Host
Below table explains which feature is supported on which transport interface for MCU based host.

ESP device    Transport Interface    WLAN support    Virtual serial interface    BT/BLE support
ESP32    SDIO    No    No    No
ESP32    SPI    Yes    Yes    HCI interface can be implemented over virtual serial interface
ESP32    UART    No    No    No
ESP32-S2    SDIO    NA    NA    NA
ESP32-S2    SPI    Yes    Yes    NA
ESP32-S2    UART    No    No    NA

#241 Re: 全志 SOC » [慢更]小白探索如何使用V3s播放音乐  » 2021-01-04 23:08:59

有个开源的命令行工具musicbox可以在线听网易云音乐:
https://whycan.com/t_3114.html

#244 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 微信小程序通过蓝牙采集温湿度 » 2020-12-28 11:28:08

kekemuyu
回复: 4

设备端是esp32+sht30,程序源码:

import bluetooth
from ble_advertising import advertising_payload

from micropython import const
from sht30 import SHT30
import json

sensor = SHT30()


_IRQ_CENTRAL_CONNECT = const(1)
_IRQ_CENTRAL_DISCONNECT = const(2)
_IRQ_GATTS_WRITE = const(3)

_UART_UUID = bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")
_UART_TX = (
    bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E"),
    bluetooth.FLAG_NOTIFY,
)
_UART_RX = (
    bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"),
    bluetooth.FLAG_WRITE,
)
_UART_SERVICE = (
    _UART_UUID,
    (_UART_TX, _UART_RX,),
)

# org.bluetooth.characteristic.gap.appearance.xml
_ADV_APPEARANCE_GENERIC_COMPUTER = const(128)


class BLEUART:
    def __init__(self, ble, name="mpy-uart", rxbuf=100):
        self._ble = ble
        self._ble.active(True)
        self._ble.irq(handler=self._irq)
        ((self._tx_handle, self._rx_handle,),) = self._ble.gatts_register_services(
            (_UART_SERVICE,)
        )
        # Increase the size of the rx buffer and enable append mode.
        self._ble.gatts_set_buffer(self._rx_handle, rxbuf, True)
        self._connections = set()
        self._rx_buffer = bytearray()
        self._handler = None
        # Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
        self._payload = advertising_payload(name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
        self._advertise()

    def irq(self, handler):
        self._handler = handler

    def _irq(self, event, data):
        # Track connections so we can send notifications.
        if event == _IRQ_CENTRAL_CONNECT:
            conn_handle, _, _, = data
            self._connections.add(conn_handle)
        elif event == _IRQ_CENTRAL_DISCONNECT:
            conn_handle, _, _, = data
            if conn_handle in self._connections:
                self._connections.remove(conn_handle)
            # Start advertising again to allow a new connection.
            self._advertise()
        elif event == _IRQ_GATTS_WRITE:
            conn_handle, value_handle, = data
            if conn_handle in self._connections and value_handle == self._rx_handle:
                self._rx_buffer += self._ble.gatts_read(self._rx_handle)
                if self._handler:
                    self._handler()

    def any(self):
        return len(self._rx_buffer)

    def read(self, sz=None):
        if not sz:
            sz = len(self._rx_buffer)
        result = self._rx_buffer[0:sz]
        self._rx_buffer = self._rx_buffer[sz:]
        return result

    def write(self, data):
        for conn_handle in self._connections:
            self._ble.gatts_notify(conn_handle, self._tx_handle, data)

    def close(self):
        for conn_handle in self._connections:
            self._ble.gap_disconnect(conn_handle)
        self._connections.clear()

    def _advertise(self, interval_us=500000):
        self._ble.gap_advertise(interval_us, adv_data=self._payload)


def demo():
    import time

    ble = bluetooth.BLE()
    uart = BLEUART(ble)

    def on_rx():
      print("rx: ", uart.read().decode().strip())

    uart.irq(handler=on_rx)
    
    #nums = [4, 8, 15, 16, 23, 42]
    #i = 0

    try:
        while True:
          temperature, humidity = sensor.measure()
          print('Temperature:', temperature, '℃, RH:', humidity, '%')
            #uart.write(str(nums[i]) + "\n")
          uart.write(json.dumps({"temp":'%.2f' % temperature}))  #ble max len 20 bytes
          uart.write(json.dumps({"humi":'%.2f' % humidity}))
          time.sleep_ms(1000)
    except KeyboardInterrupt:
        pass

    uart.close()


if __name__ == "__main__":
    demo()

ble_advertising.py

# Helpers for generating BLE advertising payloads.

from micropython import const
import struct
import bluetooth

# Advertising payloads are repeated packets of the following form:
#   1 byte data length (N + 1)
#   1 byte type (see constants below)
#   N bytes type-specific data

_ADV_TYPE_FLAGS = const(0x01)
_ADV_TYPE_NAME = const(0x09)
_ADV_TYPE_UUID16_COMPLETE = const(0x3)
_ADV_TYPE_UUID32_COMPLETE = const(0x5)
_ADV_TYPE_UUID128_COMPLETE = const(0x7)
_ADV_TYPE_UUID16_MORE = const(0x2)
_ADV_TYPE_UUID32_MORE = const(0x4)
_ADV_TYPE_UUID128_MORE = const(0x6)
_ADV_TYPE_APPEARANCE = const(0x19)


# Generate a payload to be passed to gap_advertise(adv_data=...).
def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0):
    payload = bytearray()

    def _append(adv_type, value):
        nonlocal payload
        payload += struct.pack("BB", len(value) + 1, adv_type) + value

    _append(
        _ADV_TYPE_FLAGS,
        struct.pack("B", (0x01 if limited_disc else 0x02) + (0x18 if br_edr else 0x04)),
    )

    if name:
        _append(_ADV_TYPE_NAME, name)

    if services:
        for uuid in services:
            b = bytes(uuid)
            if len(b) == 2:
                _append(_ADV_TYPE_UUID16_COMPLETE, b)
            elif len(b) == 4:
                _append(_ADV_TYPE_UUID32_COMPLETE, b)
            elif len(b) == 16:
                _append(_ADV_TYPE_UUID128_COMPLETE, b)

    # See org.bluetooth.characteristic.gap.appearance.xml
    _append(_ADV_TYPE_APPEARANCE, struct.pack("<h", appearance))

    return payload


def decode_field(payload, adv_type):
    i = 0
    result = []
    while i + 1 < len(payload):
        if payload[i + 1] == adv_type:
            result.append(payload[i + 2 : i + payload[i] + 1])
        i += 1 + payload[i]
    return result


def decode_name(payload):
    n = decode_field(payload, _ADV_TYPE_NAME)
    return str(n[0], "utf-8") if n else ""


def decode_services(payload):
    services = []
    for u in decode_field(payload, _ADV_TYPE_UUID16_COMPLETE):
        services.append(bluetooth.UUID(struct.unpack("<h", u)[0]))
    for u in decode_field(payload, _ADV_TYPE_UUID32_COMPLETE):
        services.append(bluetooth.UUID(struct.unpack("<d", u)[0]))
    for u in decode_field(payload, _ADV_TYPE_UUID128_COMPLETE):
        services.append(bluetooth.UUID(u))
    return services


def demo():
    payload = advertising_payload(
        name="micropython",
        services=[bluetooth.UUID(0x181A), bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")],
    )
    print(payload)
    print(decode_name(payload))
    print(decode_services(payload))


if __name__ == "__main__":
    demo()

蓝牙数据格式是json的字符串:

{"temp":25.5}
{"humi":27.5}

Untitled.png
wxiot.jpg

#246 Re: ESP32/ESP8266 » TG7100C 也来了 » 2020-12-27 21:06:18

https://occ.t-head.cn/vendor/detail/index?id=3840454249402605568&vendorId=3706716635429273600&module=1#sticky
有数据手册和应用开发手册,手册信息不是很全。安信可的模组才6.9,这价格也是太给力

#247 Re: 全志 SOC » 200百左右DIY一个安卓板 » 2020-12-25 09:05:23

都扎堆玩h3呀,这芯片能耗比太低,比较看好rk3326

RK3326

Quad-core Cortex-A35 up to 1.5GHz
Mali-G31MP2 GPU
DDR4/DDR3/DDR3L/LPDDR3/LPDDR2
1080P H.265/H.264/VC-1/MPEG/VP8 video decoder
1080P H.264/VP8 video encoder
LVDS/MIPI-DSI/RGB interface
1x8ch I2S/TDM, 1x8ch PDM, 2x2ch I2S

#248 Re: 全志 SOC » 理了Miyoo LCD的线序 » 2020-12-17 16:35:59

miyoo不是有原理图吗?好像是在qq群看到过

#249 Re: 全志 SOC » 自制全志H3核心板 » 2020-12-09 18:21:54

h3这价格太诱人了,这让mcu情何以堪

#250 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 小米5刷了国际版可以再战5年 » 2020-12-08 11:43:09

kekemuyu
回复: 1

最开始时刷了开源的LineageOS,这个是最接近原生的android,不过适配还是不完整,而且android10不是太好。
Screenshot1208.png

#252 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 居然把不启动的树莓派2修好了 » 2020-12-04 14:21:56

kekemuyu
回复: 4

因为之前diy树莓派2,电源部分可能给烧坏了,怒气冲冲的把树莓派狠狠的摔了几下希望奇迹能发生,结果大家知道的,还是不启动。搁置了一年,现在突然想用一下树莓派2,因为手边只有zero,速度太慢,所以从树莓派官网下载了原理图,仔细测量后发现有一路电压输出短路,就是VDD_CORE没有了,如下图:
Screenshot140829.png
找到问题了,下一步就是更换NCP6343,可是这又是一个难题,6343居然是bga封装,之前没有焊接过bga,不管了买了6343,风枪一吹上电竟然有电压了。这下树莓派2又能再战几年。

#254 Re: 全志 SOC » 自制全志H3核心板 » 2020-12-01 11:08:22

6层板的价格高出了天际,四层板确实是30元
Screenshot110301.png

#256 Re: 全志 SOC » 自制全志H3核心板 » 2020-11-30 21:53:32

为啥我的两层板搞成02/0.4的过孔都不加费呢?难道是因为我选择了系统自动确认审核

#258 Re: ESP32/ESP8266 » ESP32-C3 来了 » 2020-11-24 13:05:14

有竞争对用户是好事,未来iot芯片会爆发式增长

#259 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » linewatch宣布开源 » 2020-11-12 18:20:53

kekemuyu
回复: 1

back.jpg
这个项目是业余玩的,断断续续已经5年。本想再完善一些开源,但是一个人能力和时间有限,而且追逐完美是永无止境的,还是早些开源和大家一起完善。这次公布的资料包括立创eda的工程和全部micropython的源码,以最开放的MIT License开源。对于某些内行来说,pcb和源码还有很多不足,还请大家谅解,也请大家积极的在github(https://github.com/kekemuyu/linewatch)提出issue,这个项目会一直跟进。
作者:wildgeek
https://www.bilibili.com/read/cv8335161
出处: bilibili

#260 Re: 全志 SOC » 第一次用f1c200s画板子成功进系统 » 2020-11-09 17:11:48

blade_cheng 说:

板子做的挺漂亮,按键可以用橡胶的那种啊,整个外壳刚好

按键内部已经集成硅胶,无声防水防尘,手感不错

#262 Re: 全志 SOC » 第一次用f1c200s画板子成功进系统 » 2020-11-09 10:52:06

微凉VeiLiang 说:

感谢分享,有外壳的么

这个可以有

#263 全志 SOC » 第一次用f1c200s画板子成功进系统 » 2020-11-08 00:16:05

kekemuyu
回复: 14

焊好后上电,串口没输出,检查了半天电路也没问题,最后补焊f1c200s搞定,成功进系统。
板子是物联网相关,lora、gps、sht30、rtc、oled1306、20个按键,可拼音输入。做好后软硬件彻底开源,敬请期待。
757961297.jpg

正面效果:
1651093948.jpg

#265 Re: 全志 SOC » MiYoo » 2020-10-30 18:20:24

f1c100s直接驱动,应该是rgb屏
拆机图
https://whycan.com/t_2608.html

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

armstrong 说:

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

前两年用的主控是avr

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

三木同子 说:

之前看到过一个DoWatch。
http://www.doyoung.net/works/DoWatch/index.html

5年了还没完善,确实挺业余的(指的是时间)。
5年还没放弃,也挺不容易的。

这5年,可能这些技能作者本身不具备,不断学习成长,也可能这些技术作者本身就会,划了5年水。

中间隔了一两年,没理这个项目,也就是有时间就玩会儿。只是最近把硬件做的比较完善了。项目一直在进化中,
不出意外,下一个版本将会采用f1c200s来做主控。

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

kekemuyu
回复: 5

B站
https://www.bilibili.com/video/BV18a411A7uZ/

从2015开始,经过3个主要版本的迭代,功能从
简单的计时到添加指南针和温度,再到时间自动
同步、天气、指南针、高度计、温湿度、水平仪、
自建应用。不仅仅是硬件的简单堆砌,还有软件
系统的构建,为了LineWatch和未来更多其它硬件
专门开发了应用分发网站https://iotbbs.vip
(正在开发中)和开发文档https://doc.iotbbs.vip。

为了能使手表可以连上wifi,还专门开发了微信小
程序"IOT管家",用手机把wifi的密码发送给手表
就可以联网了。
IMG_20201026_120430.jpg
IMG_20201026_112836.jpg

#270 全志 SOC » go语言开发f1c100s之t9拼音输入法 » 2020-10-16 17:28:51

kekemuyu
回复: 1

oled和矩阵键盘驱动直接操作gpio开发(c语言),然后提供接口给go语言调用。

t9输入法参考了原子哥,中文gbk字库也是自己生成。其实可以在linux系统安装中文字库,这样应该更简单。

造轮子:由于oled屏是128*64,输入界面比较特殊。所以用go语言做了几个显示组件,比如列表list、文本框memo,t9拼音输入界面就是组合了list和memo的方法做的。

做这个例子主要是为了总结之前所学,学完就要及时输出,可以更好的查漏补缺。下一步将用go语言和f1c100s开发个更加实用的东西。

https://www.bilibili.com/video/BV1s54y1R7Bd/

#272 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 自制超小二进制时钟 » 2020-10-11 22:35:58

kekemuyu
回复: 3

硬件:
m328
bm8563
蜂鸣器
11颗led
2个按键

功能基本把bm8563功能全部用上了:
1.日历:包括年月日星期,猜猜是怎么显示的
2.闹钟:可设置小时,分,日,星期闹钟
3.睡眠可按键唤醒,或bm8563闹钟时间到中断唤醒
4.掉电模式电流仅0.4ua
https://www.bilibili.com/video/BV1L54y1C7ax/
https://www.ixigua.com/6882364459222991373?logTag=J8YNnp5VnhKE8GLzt3tbJ

#274 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 自制arduboy » 2020-10-01 12:54:55

kekemuyu
回复: 1

经过两个版本的迭代,解决外壳问题。pcb制作并不难,外壳才是时间杀手。
视频展现了外壳的绘制过程,把将近5G的视频压缩到了3分钟。
另配just blue背景音乐,正符合wildgeek账号的本色。
上视频:
https://www.ixigua.com/6878500453290607112?logTag=E8dVjyJPuOLTkpdJQoY1H
https://m.bilibili.com/video/BV1Dy4y1k7NM

#276 Re: 全志 SOC » 有没有人关注过cpu性能?我发现v3s的1.2G,比不过mips的600m,有没有高手来看看我是不是做错了? » 2020-09-23 10:52:35

树莓派zero的950mhz测试结果,由于pizero的硬浮点是VFPv2,比v3s落后,没有可比性参考一下即可
Screenshot2020-09-23104515.png

#277 Re: 全志 SOC » 有没有人关注过cpu性能?我发现v3s的1.2G,比不过mips的600m,有没有高手来看看我是不是做错了? » 2020-09-22 15:46:41

https://whycan.com/t_3148.html这是之前sysbench的测试结果,同样是1G频率,v3s竟然比pizerow还要慢,要知道pizerow可是arm11架构的

#278 Re: 华为鸿蒙OS OpenHarmony » 华为 OpenHarmony 鸿蒙2.0发布了。 » 2020-09-13 08:38:33

看了一下华为开发者网站,鸿蒙开发分为应用开发和设备开发,由此判断开源的鸿蒙os可能只是针对设备的os,就像android的可穿戴wearos系统,针对应用的os才是重头戏。
20200913.png

#279 Re: Cortex M0/M3/M4/M7 » 2.通过LWIP协议栈使用学习http,tcp,网卡之间的关系. » 2020-09-11 12:21:50

电脑端可以用slattach 命令把串口模拟成网卡,stm32端的可以用lwip把串口模拟成网卡。我以为:所谓的网卡不过是一种数据传输介质,这种介质可以是任何通讯接口,随便弄个io都可以,只要能传输tcp的数据就可以了。

#280 Re: Cortex M0/M3/M4/M7 » 2.通过LWIP协议栈使用学习http,tcp,网卡之间的关系. » 2020-09-10 10:50:41

无法形容,只能说lz牛逼。脑洞大开一下,既然串口可以用作物理网卡完成物理层协议,那么其他通讯口应该也可以,i2c,spi,can甚至自己用io模拟都可以用作网卡了.

#281 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » go语言绑定lvgl » 2020-09-08 09:52:45

kekemuyu
回复: 2

这是lvgl的go绑定测试,由于cgo的强大,go语言可以调用lvgl的动态库。
https://github.com/yangyongzhen/golvgl

package main

import (
	"golvgl/lvgl"
	"log"
	"time"
)

func main() {
	log.Println("Hello Go,LittlevGL")
	lb := lvgl.Label(lvgl.ScrAct(), nil)
	lb.SetText("hello world,go test 222")
	lb.Align(nil, lvgl.LV_ALIGN_CENTER, 0, 0)
	log.Println("Hello Go Over 222")
	for true {
		lvgl.TickInc(5)
		lvgl.TaskHandler()
		time.Sleep(5000)
	}
}

#283 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 原来旧的电脑和和手机也能连接5g的wifi » 2020-09-01 19:41:17

一直以为是联通宽带速度达不到,看来是自己的设备速度限制了。

#284 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 原来旧的电脑和和手机也能连接5g的wifi » 2020-09-01 19:39:38

有梦的地方 说:

速度很猛,上下行加起来 200Mbps快到上限了,这是什么测试软件?

在线的 https://www.speedtest.cn/

#285 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 原来旧的电脑和和手机也能连接5g的wifi » 2020-09-01 19:32:10

kekemuyu
回复: 3

宽带是200m的,笔记本是2015年的thinkpad,今天买的小米5g路由千兆板到了,试了一下2.4g,如下:
20200901-192623-001.png
本想2015年的笔记本应该不支持5g,没想到轻松连上了,网速效果如下:
20200901-192941-002.png

#287 Re: ESP32/ESP8266 » Atouch更新,拉风铝合金外壳!玩转ESP32! » 2020-08-29 11:01:41

这东西这么畅销么,lz这么自信一次做500套

#288 Re: ESP32/ESP8266 » 开源!吃鸡开发板ESP32+CH374U方案,让你通过鼠标键盘玩手机吃鸡游戏! » 2020-08-29 10:59:47

没在手机上玩过吃鸡,就想知道都用键盘和鼠标了,何不直接在电脑上玩andorid游戏模拟器

#290 ESP32/ESP8266 » micropython在esp32的内存占用疑问 » 2020-08-26 16:19:57

kekemuyu
回复: 2

esp32有520k的ram,可是烧进micropython后,可用ram只有110k左右,如下截图:
20200826-160936-011.png

micropython的github中readme说

16k stack for the MicroPython task and 96k Python heap.

这样的话520-16-110-96=298k,这298k被谁使用了呢?看esp32的datasheet,mem的分配有点复杂,可能这520k不完全是用户可用的,有哪位大佬知道esp32的用户可用ram是多少?
20200826-161735-012.png

#291 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 君正X2000资料集合,发一个新鲜出炉的 X2000开发板和手册。 » 2020-08-26 16:06:46

这价格确实没啥竞争力,随便一个价格低的arm四核就把他秒杀了,君正只是适用于对低功耗有要求的场景

#292 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » PHP开发网站-微信登录、绑定 (转) » 2020-08-26 13:23:12

微信登录授权需要企业版微信服务号,个人网站不能授权,github就没有那么麻烦

#295 Re: Xilinx/Altera/FPGA/CPLD/Verilog » zynq7010/7020核心板众筹openzynq » 2020-08-22 15:07:23

XC7Z010-1CLG400C芯片价格是多少?taobao搜了一圈,有20多、80、90的

#296 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » AWTK 最详细的移植笔记 » 2020-08-16 09:26:03

支持 google 拼音输入法,这个牛逼呀,怎么做到的,腾讯tinyos支持?

#299 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 树莓派移植littlevgl(framebuffer直驱) » 2020-08-14 15:59:07

kekemuyu
回复: 3

专门去找的移植好的demo,可以直接make,主要是 官方的littlevgl的framebuffer移植教程https://blog.lvgl.io/2018-01-03/linux_fb没有makefile文件,对makefile又不熟悉,所以用这个github上的地址https://github.com/helioz2000/lvgl_demo移植版更容易编译,Makefile其实是适用所有linux的framebuffer驱动模式的,稍微修改一下参数即可,树莓派运行littlevgl在tft上的效果:

#301 Re: 全志 SOC » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 12:15:58

nanopi neo 重压测试,四核火力全开测试(自己用go编写跨平台压力测试工具,支持多核):
无散热片时超过60度,自动降频到800m:
20200812-120451-007.png
有散热片将将能跑满频率1G:
20200812-121448-008.png

#302 Re: 全志 SOC » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 11:09:26

加了,但是下面是去掉散热片的效果:
20200812-110807-006.png

建议lz试一下nanopi neo的镜像,这个版本的镜像是最成熟的

#303 Re: 全志 SOC » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 10:46:01

内核电压为1.3v,频率调到最高1008000测得数据,温度不超过40度,如下图:
20200812-104442-005.png

#305 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-08-11 14:32:20

jkl 说:

请问一下,这个板子跟电脑是不是只能 通过OTG的usb连接???我现在的板子上面没有OTG的接口了

烧程序用otg

#306 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-08-11 13:02:23

tam2907 说:

设备探测,BROM信息,SPIFLASH信息都能出来,但是点击一键烧写,没有进度,立马完成。实际是烧写失败,这种情况怎么破?

14楼有动画操作说明,需要添加地址

#308 Re: 全志 SOC » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-07 19:09:15

3.4是能用gpu的固件吧,用4.x的那个会好很多

#310 Re: 全志 SOC » F1C100 使用GPIO模拟SPI 驱动 st7789手表屏 » 2020-08-02 22:00:09

如果不考虑移植性,可以不用设备树,现在正好也在研究linux的屏幕驱动,想用tft的并口方式驱动,提高帧率

#311 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-08-01 17:52:24

akinggw 说:

先从github上导入仓库到gitee上,然后就可以在gitee上操作了,这样就非常快

试过代码量一大就不行了,比如linux内核之类的。会提示空间限制

#312 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-08-01 07:33:13

kesion 说:

有那么神奇的操作,原理是什么,楼主讲一下把

很简单,tampermonkey的脚本修改github的页面,插入镜像站点链接

#313 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-07-31 11:08:19

kekemuyu
回复: 6

首先在chrome安装tampermonkey,然后在tampermonkey里添加以下脚本:

// ==UserScript==
// @icon         https://github.githubassets.com/favicon.ico
// @name         Github 镜像访问,加速下载
// @namespace    https://github.com/jadezi/github-accelerator/
// @version      1.1.1
// @description  GitHub 镜像,github 加速
// @author       jadezi
// @license      GPL License
// @match        *://github.com/*
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @resource     mycss https://gitee.com/jadezi/github-accelerator-css/raw/master/index.css
// @grant        GM_addStyle
// @grant        GM_setClipboard
// @grant        GM_getResourceText
// ==/UserScript==

(function() {
    var clone = true;
    // var clone = false;
    var depth = true;
    // var depth = false;
    var mirror = true;
    // var mirror = false;
    var hide = false;

    var location = window.location.href;
    var mirror_url1 = "https://" + "github.com.cnpmjs.org";
    var mirror_url2 = "https://" + "hub.fastgit.org";
    var mirror_url3 = "https://" + "github.wuyanzheshui.workers.dev";
    var download_url1 = "https://download.fastgit.org";
    var str1 = "";

    if (clone) {
        str1 += "git clone ";
        if (depth) {
            str1 += "--depth=1 ";
        }
    }

    var a = location.split("/");
    var str2 = "/" + a[3] + "/" + a[4] + ".git";
    var clone_utl1 = str1 + mirror_url1 + str2;
    var clone_utl2 = str1 + mirror_url2 + str2;
    var str3 = window.location.pathname;
    var web_url1 = mirror_url1 + str3;
    var web_url2 = mirror_url2 + str3;
    var web_url3 = mirror_url3 + str3;
    var info = `
    <div class="user-ment">
    <button class="btn btn-primary" type="button" id="mirror-btn">镜像网址</button>
    <div class="collapse multi-collapse" id="collapse">
    <div class="user-card user-card-body">
    <div class="user-alert user-alert-warning" role="alert">clone、depth命令的插入可手动编辑代码关闭</div>
    <div class="user-alert user-alert-danger" style="color: #721c24;background-color: #f8d7da;border-color: #f5c6cb;" role="alert">镜像地址请不要登陆自己的账户,造成损失本人概不负责</div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend"><span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆1:</span></div>
    <input id="clone_case_1" type="text" value="${clone_utl1}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl1}" readonly aria-describedby="inputGroup-sizing-default">
    <div class="user-input-group-append">
    <button class="btn btn-outline-secondary" type="button" id="button-copy1"  data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
    </div>
    <a type="button"  href="${web_url1}" class="btn">快速浏览1</a>
    </div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend">
    <span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆2:</span>
    </div>
    <input id="clone_case_2" type="text" value="${clone_utl2}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl2}" readonly aria-describedby="inputGroup-sizing-default" >
    <div class="user-input-group-append">
    <button class="btn btn-outline-secondary" type="button" id="button-copy2"  data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
    </div>
    <a type="button" href="${web_url2}" class="btn">快速浏览2</a>
    </div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend">
    <span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆3:</span>
    </div>
    <input type="text" data-autoselect="" class="user-form-control" aria-describedby="inputGroup-sizing-default" value="不支持clone,直接跳转--->" aria-label="" readonly="" >
    <a type="button" href="${web_url3}" class="btn">快速浏览3</a>
    </div>
    </div>
    </div>
    </div>`;

    $(".repository-content").prepend(info);
    $(".Box.Box--condensed").each(function () {
        $(this).find(".d-flex.Box-body>a").each(function () {
            var href = $(this).attr("href");
            var url1 = download_url1 + href;
            var url2 = mirror_url3 + href;
            var div1 = `<div class="user_download" style="display: flex;justify-content: flex-end;flex-grow: 1;"><div><a style="padding:4px;"  class="btn user-btn-link"  href="${url1}" rel="nofollow">快速下载1</a></div><div><a style="padding:4px"   class="btn user-btn-link" href="${url2}" rel="nofollow">快速下载2(推荐)</a></div></div>`

            $(this).after(div1);
        });
        $(this).find(".d-block.Box-body>a").each(function () {
            var href = $(this).attr("href");
            var url1 = download_url1 + href;
            var url2 = mirror_url3 + href;
            var div1 = `<div class="user_download" style="display: flex;"><div><a style="padding:4px;"  class="btn user-btn-link"  href="${url1}" rel="nofollow">快速下载1</a></div><div><a style="padding:4px"   class="btn user-btn-link" href="${url2}" rel="nofollow">快速下载2(推荐)</a></div></div>`

            $(this).after(div1);
        });
    });
    $(".mt-2.d-flex").each(function () {
        var url1 = mirror_url3 +"/"+a[3]+"/"+a[4]+ "/archive/master.zip";
        var span1 = `<a class="btn btn-outline get-repo-btn btn-block" rel="nofollow" href="${url1}">Fast Download ZIP</a>`;

        $(this).after(span1);
    });
    // 复制按钮
    $("#button-copy1").on("click",function(){
        GM_setClipboard($("#clone_case_1").val())
        alert("复制成功")
    })
    $("#button-copy2").on("click",function(){
        GM_setClipboard($("#clone_case_2").val())
        alert("复制成功")
    })
    // 隐藏面板
    $("#mirror-btn").on("click", function () {
        if (!hide) {
            $("#collapse").hide();
        } else {
            $("#collapse").show();
        }
        hide = !hide;
    })
    function init(){
        if (!mirror) {
            $("#collapse").hide()
        }
    }
    // 初始化面板
    init()
    GM_addStyle(GM_getResourceText("mycss"));
})();

然后在访问github时会出现以下界面,直接clone镜像站点即可:
20200731-110412-001.png
访问速度如下,大概在400~500k/s的样子:
20200731-110609-002.png

#314 Re: S3C2440/S3C2416/S3C6410/S5PV210 » 学习路线和一些基本概念 » 2020-07-29 19:16:14

关于这个有不同的看法,单片机可以先学,但对于linux的学习有不同的思路。由于linux系统的复杂性,不建议从驱动和boot开始,可以先从应用程序开发开始,应用的开发一定要用c语言,开发工具链用gcc,makefile也要自己写。

#315 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » go语言终端闹钟程序 » 2020-07-27 13:10:46

kekemuyu
回复: 0

跨平台终端闹钟,多组时间设置,左右箭头选择时间,上下调整时间,空格将设置时间添加到列表。
遍历列表设置的时间,到时控制电脑beep发声,并从列表删除过期时间
https://github.com/kekemuyu/tools/tree/master/timer
31026.gif

#316 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » go语言贪食蛇 » 2020-07-26 10:28:45

kekemuyu
回复: 0

字符板的游戏,键盘检测只能在win下,如果在其他系统运行需要修改键盘检测,后期会改进。

snake direction is controled by w,s,a,d .
key detect only apply to windows,later will improve it.

https://github.com/kekemuyu/gogame/tree/master/snake
snake.7z
31023.gif

#317 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » littlevgl自己创建一款键盘 » 2020-07-22 17:01:14

可以不用键盘,先用wifi开启热点,用手机或笔记本连接热点设置好密码

#318 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 19:33:25

whyabc666 说:

说实话看了那么多GitHub的入门级代码,只是附庸风雅而已,能赚钱糊口都难,自己还花那么多的精力……

开源的力量是惊人的,可以说是彻底的改变了以往的独立开发模式,就算你是世界级的大公司也不得不向开源社区低头。盈利先放一边,世界级的大佬能够聚在一起开发一个项目,你从其中获取的他人的开发经验和知识是无价的。

#319 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 11:15:29

smartcar 说:

是把服务器迁到北极了吗?

新闻的链接有介绍,存到了胶片里,硬盘根本不能存储1000年,硬盘100年寿命都没有

#320 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 11:00:49

kekemuyu
回复: 9

突然发现自己的github上多了个贡献徽章,开始还不知道是什么意思。今天看到新闻才知道代码被放到了北极。大家晒一下自己的徽章吧。
新闻:https://www.qbitai.com/2020/07/16682.html



none_20200718-1059.png

#321 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-13 13:39:35

还参考了网上的设计:
20200713-133833-003.png

这个天线好像没接地,不知道这是什么原理

#322 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-13 13:34:48

回复以上坛友,天线用的陶瓷天线AN9520-245,之前是自己随意画的,没有参考价值。这次参考了官方开发板:
20200713-132706-002.png
不同的是,官方的是四层板金属片天线,这次虽然能联网,纯属运气好吧,没什么理论,照猫画虎做的,想要信号稳定估计得深入研究。
感谢@Zodiac提醒,学到了

#323 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-12 13:30:54

微凉VeiLiang 说:

堆叠的就是牛。啥元器件都不用

是的,非常适合小板子

#324 ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-12 13:03:55

kekemuyu
回复: 30

初次接触天线没经验,前三次的失败打击了信心,前几次都是天线问题,几乎要放弃了,但心有不甘,决定最后再打样一次,这次只关注天线所以只画了esp32-pico-d4的核心,终于可以联网了。

20200712-123644-001.png

#326 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教 树莓派串口发大数据 会出现断续,如何解决? » 2020-07-06 17:12:07

danile 说:

是树莓派的问题,其他性能差的都没问题,报文  校验  肯定做的

报文头   报文长度   报文数据  报文结束

应该是接收处理没做好,你可以试试,发送一帧报文时故意分两部分发送(中间延时10ms),如果接收部分程序不能处理说明没做好

#327 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教 树莓派串口发大数据 会出现断续,如何解决? » 2020-07-06 15:08:51

可能是下位机也处理的不好吧,串口通讯中间断开是很常见的,需要做相应处理保证数据完整性。
请参考自定义的协议:

报文头   报文长度   报文数据  报文结束

由报文长度保证数据完整性

#328 Re: 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 20:43:38

zzm24 说:

刚好之前分析过uboot,自己的bootloader成功启动过kernel,楼主参考下
1.
kernel_entry = (void (*)(int, int, u32))0x80000000;
kernel_entry(0, 0, 0x80c00000);
0x80c00000为DTB地址
2.kernel配置时 bootargs要配置为内置,这样bootloader省事多了
3.kernel dts文件加入内存信息,因为目前kernel内存参数靠uboot写dts传,这里我也是卡住了很久,直到将uboot bootz删减到最小才发现
memory_DDR0@80000000 {
    device_type = "memory";
    reg = <0x80000000 0x2000000>;
};
现在自己的bootloader使用spi dma读取kernel,启动速度缩短到2.xs液晶进界面

谢谢提醒,可能是内存没初始化,加上试一下。

#329 Re: 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:39:44

从uboot的启动日志看到,uboot对dtb文件做了处理后再放到内存的,还是要分析一下uboot的启动源码:

device 0 offset 0x110000, size 0x400000
SF: 4194304 bytes @ 0x110000 Read: OK
## Flattened Device Tree blob at 80c00000
Booting using the fdt blob at 0x80c00000
Loading Device Tree to 80e4c000, end 80e511c8 ... OK

#330 Re: 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:19:52

现在有个疑问:使用设备树作参数引导linux的话,还需要传其他参数给linux吗?我记得uboot中还配置了如下参数:

bootargs修改
勾选 [*] Enable boot arguments;

在下方一项中填入 bootargs 参数:

console=ttyS0,115200 panic=5 rootwait root=/dev/mtdblock3 rw rootfstype=jffs2

#331 Re: 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:12:54

youge 说:

Copy kernel from nor ok!
这句打印出来了没

打印了
20200704-151206-001.png

#332 Re: 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 13:33:38

取sdram地址搞错了,改成如下:

volatile unsigned int *sdram_dtb_start = (volatile unsigned int *)0x80030000;
    volatile unsigned int *sdram_kernel_start = (volatile unsigned int *)0x80040000;
    // void *sdram_dtb_start = (void  *)0x80030000;
    // void *sdram_kernel_start = (void  *)0x80040000;

启动kernel还有问题,继续。。。

#333 全志 SOC » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 11:26:09

kekemuyu
回复: 7

想做一个简易的引导f1c100s的bootloader,查阅了很多资料,最后看了韦东山视频发现做一个简易的引导linux的boot并不难。
简易boot源码https://www.cnblogs.com/blogs-of-lxl/p/5906103.html 。手里正好有tiny200s的板子,所以想在这个板子上移植这个boot。
达克罗德大神的裸奔代码正好可以用上,在这个基础上加上引导代码即可。现在的问题是copy内核到sdram出现问题,卡在了拷贝内核到sdram的过程。如下:
引导代码:

#include <stdint.h>
#include <stdio.h>
#include <string.h>

extern void sys_uart_putc(char c);
extern void sys_uart_print(char *str);
extern void sys_spi_flash_init(void);
extern void sys_spi_flash_exit(void);

extern void sys_spi_flash_read(int addr, void * buf, int count);

static inline void sdelay(int loops)
{
	__asm__ __volatile__ ("1:\n" "subs %0, %1, #1\n"
		"bne 1b":"=r" (loops):"0"(loops));
}

int boot_main(int argc, char **argv) {
    void (*theKernel)(int zero, int arch, unsigned int params);
    void *sdram_dtb_start = (void  *)0x80030000;
    void *sdram_kernel_start = (void  *)0x80040000;


    /* 0. 从NOR FLASH里把dtb读入内存 */
    sys_uart_print("Copy dtb from nor\n\r");
    sys_spi_flash_init();
    volatile unsigned int spi_dtb_start=0x30000;
	sys_spi_flash_read( spi_dtb_start,sdram_kernel_start, 0x10000);
	sys_uart_print("Copy dtb from nor ok!\n\r");

    /* 1. 从NOR FLASH里把内核读入内存 */
    sys_uart_print("Copy kernel from nor\n\r");
    volatile unsigned int spi_kernel_start=0x40000;
	sys_spi_flash_read(spi_kernel_start, sdram_kernel_start, 0x260000);
	sys_uart_print("Copy kernel from nor ok!\n\r");
	sys_spi_flash_exit();


    /* 2. 设置参数 ,与内核约定参数存放地址,Uboot写个内核的遗嘱^^*/
    // puts("Set boot params\n\r");
    // setup_start_tag();
    // setup_memory_tags();
    // setup_commandline_tag("noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0");
    // setup_end_tag();

    /* 3. 跳转执行 */
    sys_uart_print("Boot kernel\n\r");
    theKernel = (void (*)(int, int, unsigned int))0x80040000;
    theKernel(0, 0, 0x80030000);  //362:arm 
    /* 
     *  mov r0, #0
     *  ldr r1, =362
     *  ldr r2, =0x30000100
     *  mov pc, #0x30008000 
     */

    sys_uart_print("Error!\n\r");
    /* 如果一切正常, 不会执行到这里 */

    return 0;
}

问题现象:
20200704-112310-001.png

#334 全志 SOC » f1c100s的uboot传递参数给内核的问题 » 2020-07-03 21:55:33

kekemuyu
回复: 0

以下内容摘自网络,可见uboot跳转到内核前需要设置三个参数,其中第三个参数是传递参数或设备树的。这里有个疑问,第三个参数只能是atags或者是dtb中的一个,不能同时使用,但是为什么荔枝派nano官方的文档中uboot设置既可以用boot.cmd传参数,同时设备数也可以使用?

1. 对于32bit的arm处理器,bootloader启动内核时,会设置r0,r1,r2三个寄存器,
r0一般设置为0;
r1一般设置为machine id (在使用设备树时该参数没有被使用);
r2一般设置ATAGS(使用设备树之前)或DTB的开始地址(使用设备树之后)

#338 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » wifi和蓝牙的天线设计应该注意什么呢? » 2020-06-26 15:45:16

kekemuyu
回复: 12

画了个esp32 的板子,问题出在了天线上,wifi和蓝牙都不能用,天线是用的2.4g的an9520-245。如下图:
20200626-154336-001.png

有用过的吗?请教pcb设计注意的地方

#339 Re: 全志 SOC » V3S linux 5.2内存只有54M内存,还有部分是当做显存了吗?不用屏幕怎么利用上这点内存 » 2020-06-24 09:22:46

dingxmhan 说:

如题,求教,是不是dts或者menuconfig可以配置的呢?

linux内核本身占用

#340 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-22 10:52:55

夏雨夜寐 说:

jlc记得可以0.2

那是两层以上,单双只能0.3

#341 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-20 14:00:18

Gentlepig 说:

芯片下面有必要打那么多过孔吗?
有些线走的很随意,还有锐角走线。

那个是芯片的地,只能从板子底层走线,另一个作用是导热

#342 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-20 00:46:40

达克罗德 说:

焊盘多大?感觉还可以缩小点

过孔吗?内径0.3mm,外径0.6mm。已经是jlc两层板工艺的极限了

#343 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-19 22:09:32

kekemuyu
回复: 24

一天没吃饭,费了九牛二虎之力终于把35mm*25mm的小板子花完了。这密度已经达到嘉利创的工艺极限了,也达到我的能力极限了。
20200619-215741-001.png

#345 全志 SOC » f1c100s/200s的串口波特率最大是多少? » 2020-06-07 23:31:11

kekemuyu
回复: 8

我测试的结果是921600还是比较稳定的,传输文件速度是59k/s,,在1152000时就不太稳定了,老是出错,大家有测试过的吗?

#346 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 学习的意义??? » 2020-06-06 16:39:24

更一般的是问活着的意义?活着是为了什么?余华的小说《活着》给出了一个答案,其实是挺没劲但很正确的一个答案,活着不是为了某个人、某个物而活着,就是为了活着本身而活着。

#347 Re: 全志 SOC » 用rust开发f1c100s/200s之hello » 2020-06-06 12:26:51

rust是官方支持嵌入式开发的,官方的嵌入式开发文档中就以stm32为例开始讲解的。因为它不带gc,所以是可以开发操作系统的,最近很火,一直排在最受欢迎语言第一名。最主要的特点是内存安全。

#348 全志 SOC » 用rust开发f1c100s/200s之hello » 2020-06-06 12:08:19

kekemuyu
回复: 3

环境准备https://www.cnblogs.com/kekemuyu/p/13054169.html

rust项目:
1. cargo new hello
   
   执行后会生成hello工程目录
2. cd hello
   进入hello目录后,看到Cargo.toml,这是配置文件。然后是src/main.rs
 
   

fn main() {
    println!("hello arm");
}

3. 编译
    cargo build --target=armv5te-unknown-linux-gnueabi
   生成可执行文件
target/armv5te-unknown-linux-gnueabi/debug/
或者 target/armv5te-unknown-linux-gnueabi/release/

#350 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 东莞某公司寻求充电桩软硬件全套解决方案, 价格面谈 » 2020-06-06 11:52:19

对整个充电桩软件系统还是比较了解的,软件部分主要是和平台、电车通讯。
1.和车通讯是gb协议,这个是统一的,但是各个车厂做下来多少有些诧异,充电桩要尽可能多的兼容大部分充电汽车,这部分工作量很大。
2. 平台对接,这就不统一了,各有千秋,平台很多,最主要的还是国网。当然自己做也可以,主要是扫码支付。
3. 充电桩自身监控系统,这个方案很多,大部分是linux系统,界面用qt开发。

#351 ESP32/ESP8266 » esp32-pico-d4淘宝差价这么大 » 2020-06-04 23:39:27

kekemuyu
回复: 2

华强北这么牛*吗?价格和官方差一倍,我该买哪个
none_20200604-2338.png

#353 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 对 micropython 感兴趣的大佬们都来看看 uLisp 吧 » 2020-05-20 21:28:00

看过黑客与画家,作者大力吹捧lisp语言,受其影响也看过一些lisp资料。lisp的强大之处是灵活,灵活到数据也可以是代码,可以随意创建自己的语言,具备元编程能力。即使不把lisp作为主力编程语言使用,也值得学一下,保证颠覆你的三观。

#355 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 开源物联网简易监控平台 数据便签DataMark » 2020-05-18 18:23:51

信息安全性是个问题,谁会把这么重要的信息提供给第三方,这种东东各个公司自己就可以搞定了

#356 Re: 哇酷地摊(跳蚤市场) » 周立功 i.mx283 开发板 » 2020-05-16 21:32:23

我的是287,也在吃灰,i.mx28x系列有主线linux吗

#359 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-05-09 09:38:52

大帅 说:

装chrome了吗? 依赖于chrome浏览器

装了,我电脑就这一个浏览器。

是下载的这个安装包吗?在64位系统试过了,可以的
https://github.com/kekemuyu/gosunxifel/releases/download/v0.0.1/gosunxifel.7z

#360 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-05-08 19:00:00

大帅 说:

F:\gosunxifel>gosunxifel.exe
2020/05/07 15:12:47 config.go 44 F://gosunxifel
2020/05/07 15:12:47 main.go 15 Running with CPUs:4
2020/05/07 15:12:47 main.go 19 app-version:v0.0.1
2020/05/07 15:12:47 ui.go 37 exec: "": executable file not found in %PATH%
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x74b159]

goroutine 1 [running]:
main.(*Myweb).Run(0xb5ff00)
        F:/go_work/src/gosunxifel/ui.go:45 +0x49
main.main()
        F:/go_work/src/gosunxifel/main.go:31 +0x95

F:\gosunxifel>

装chrome了吗? 依赖于chrome浏览器

#361 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 用stm8做的自行车闪光警示尾灯 » 2020-05-08 12:44:58

wu150 说:

作为工程师,不搞个振动感应或者加速度感应自动开灯吗?手动太落后了

不是所有场景都适合搞智能,尾灯越简单越好,简单稳定好用才是王道,不要忘了设计的总重要的初衷是警示而不是其他。

#364 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 16:37:58

有梦的地方 说:

思路挺好的,但是开销也蛮大,408MHz/128/64/70 = 700

写一个bit,700个指令周期

通过i2c/spi驱动写入,数据丢给内核就不用管了,

内核如果丢给了dma,就更好了.

这个只是测试一下刷新的极限,平时不会这样用的。就像smartcar说的,只有需要改变内容时才刷一下。当然你说的这些外设如果能用mmap方式实现就更好了,下一步就是验证这些外设

#365 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 16:21:46

更进一步的思考是:mmap是否可以控制其他外设,如果可以的话,驱动层完全可以在用户层实现,对于不会做linux的驱动的提供了另一种添加外设的思路,这种方式的好处是初学者可以不理会linux的驱动模式的做法,完全用裸机的思维就可以添加需要的外设了。下一步是用mmap方式驱动spi,如果可以的话,证明这种思路是可行的。

#366 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 15:59:23

刷新率很不错了,1000次的整屏刷新只用了12s或者13秒,fps达到了70~80的样子,cpu是默认的408m。裸机没有做实验,理论上估计mmap方式操作gpio速度基本没有损失,因为这个是内存直接映射的寄存器。
请看视频:

#368 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 14:21:26

歌以咏志 说:

楼主你这个是128*64 的 OLED吧, 模拟SPI驱动可以做到什么帧率?

帧率怎么测?

#369 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 14:07:54

歌以咏志 说:

也就是说 mmap / munmap 导致 dev 这个命令耗时?

是的,现在改成初始化的时候mmap一次就行了,writebit函数只是操作地址

#370 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 13:22:43

以后一些有关gpio的驱动完全可以在用户层做了

#371 全志 SOC » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 13:20:49

kekemuyu
回复: 14

上次的mmap版虽然速度提高了不少,但还是有扫描感觉。而且看到晕哥的回复:

这个速度本来就慢,
几十kHz,
内核与用户的数据同步毫秒级。
就是说linux不适合干用gpio直接驱动的事情,即使用mmap也一样。

感觉在用户层不可能再提高速度了,可是最近看到一些帖子说mmap是直接内存映射,不涉及内核层和用户层的交互。
又唤起了对mmap的兴趣,仔细研究了一下我的devmem.c文件发现,发现Writebit函数每次都调用mmap和munmap太浪费时间,其实当时就知道这个需要改但由于懒惰没太在意。这次优化后,oled刷新和裸奔应该没区别了。
源码:https://github.com/kekemuyu/f1c100s

#372 Re: 全志 SOC » 尝试从一开发F1C100s应用 » 2020-05-02 12:59:00

LinjieGuo 说:

很多终端工具都支持X/Z modem,很稳定。开发人员使用起来也算方便。

最好的是通过串口把f1c100s的文件系统挂载到本地电脑,这个有点难搞

#374 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-04-24 23:44:43

wukenaihe 说:

你好,我点一下这个应用就闪退了。请问一下配置什么吗?

需要安装chrome

#375 Re: 全志 SOC » 成功移植go编译器到f1c100s » 2020-04-24 23:43:43

54anson 说:

go可以直接跨平台编译出任何目标cpu平台和系统的目标代码吧?

基本上常用的系统和架构都支持

#376 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 推荐良心国产EDA--立创EDA » 2020-04-22 23:26:01

简单的板子一直在用jlc的eda,优势是大部分封装库不用画了,从pcb到打样一气呵成。

#377 Re: 全志 SOC » 众人拾柴-F1C200S通过SPI使用ESP8089或ESP8266做无线网卡 » 2020-04-20 22:37:41

迪卡 说:

从这个博客中看https://blog.csdn.net/qq_39101111/article/details/78773362
好像是缺东西,depmod,这个指令我的文件系统没有,那么我就再编译一遍buildroot,添加上这个指令。
同时要记得,手动将esp8089-spi.ko放到/lib/modules/5.2.0-licheepi-nano目录中。
我先去编译buildroot了,
这段时候可以去看个电视

depmod加进去就可以了吗?编译好的驱动可以分享吗?

#378 Re: 全志 SOC » 众人拾柴-F1C200S通过SPI使用ESP8089或ESP8266做无线网卡 » 2020-04-18 22:34:22

最近也在研究linux驱动,发现驱动编写真不是人干的,涉及到的东西太多了,编译出错了,安装驱动出错了,根本就无从下手,想要彻底搞明白,还得从linux源码看起。

#380 Re: 全志 SOC » f1c100s驱动加载错误 » 2020-04-15 17:53:42

执行depmod:

root@antbian:~/linux_work/test/led# depmod
depmod: WARNING: could not open /lib/modules/4.15.0-rc8-licheepi-nano+/modules.order: No such file or directory
depmod: WARNING: could not open /lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin: No such file or directory
root@antbian:~/linux_work/test/led# ls /lib/modules/4.15.0-rc8-licheepi-nano+/*
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.alias
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.alias.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.dep
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.dep.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.devname
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.softdep
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.symbols
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.symbols.bin

#381 全志 SOC » f1c100s驱动加载错误 » 2020-04-15 17:47:53

kekemuyu
回复: 1

执行命令modprobe led_device.ko:

root@antbian:~/linux_work/test/led# modprobe led_device.ko
modprobe: ERROR: ../libkmod/libkmod.c:514 lookup_builtin_file() 
could not open builtin file '/lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin.bin'
modprobe: FATAL: Module led_device.ko not found in directory /lib/modules/4.15.0-rc8-licheepi-nano+

#382 Re: 全志 SOC » 请教各位大佬,tiny200v2怎么修改uboot打印串口为uart1 » 2020-04-12 12:38:49

固件不好改,可以考虑改硬件,好像widora保留了修改的方法。看下图:
none_20200412-1238.png

#384 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 和大家聊聊最近学linux驱动的感受 » 2020-04-10 20:31:59

还有一个不成熟的想法是:
写linux驱动是否有专门的ide环境。设备树和linux驱动完全有必要设计一个专门的文本编辑ide,可以有自动提示。新建驱动的时候,自动生成设备树和驱动的框架代码,你只要在需要的地方写实现。

#385 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 和大家聊聊最近学linux驱动的感受 » 2020-04-10 20:27:49

kekemuyu
回复: 7

最近想研究一下linux驱动的写法,拿出了吃灰的easyarm基于i.mx287。发现周立功的easyarm的教程竟然是基于linux2.6的,设备树都没有。驱动相关教程更是草草的一带而过。
果断弃之,看了一个大神的关于设备树和驱动的视频教程,发现写驱动真是太痛苦了,给所有驱动工程师点赞。
总结一下驱动工程师需要的技能:
0. 驱动模型(驱动整体架构)的了解。
1. linux内核源码需要了解一些。主要是涉及到驱动相关的数据结构和函数。
2. 设备树的结构。 设备树如何匹配linux内核驱动
3. 驱动编写。设备的注册、注销、以及涉及到各种数据结构,linux驱动相关的函数。需要对linux系统有比较深入的了解
4. 内存操作相关。物理地址,虚拟地址,映射关系。以及相关函数的使用
5. cpu芯片寄存器的了解。
6. 驱动测试。这个测试估计也很不好做,只能打log,不像keil可以单步调试看寄存器的值。

这只是两天来的大概的了解,估计更复杂的驱动涉及到东西更多,比如gpu的驱动、音频驱动、网卡驱动等。

linux设备驱动的编写,说白了是linux给你一个框架,你的程序只能在框架中能写。但前提是你要非常熟悉这个框架。
想入门驱动的同学,要做好长期作战的准备。

#386 Re: 全志 SOC » 成功移植go编译器到f1c100s » 2020-04-09 20:36:44

是的,一般10m左右,需要大容量的spiflash,比如32M的

#388 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-04-09 18:30:28

我用你的uboot.config配置,编译出现错误,是需要修改uboot代码吗?

board/sunxi/built-in.o: In function `setup_environment':
/root/u-boot/board/sunxi/board.c:699: undefined reference to `eth_env_set_enetaddr'
board/sunxi/built-in.o: In function `board_mmc_init':
/root/u-boot/board/sunxi/board.c:488: undefined reference to `sunxi_mmc_init'
cmd/built-in.o: In function `label_boot':
/root/u-boot/cmd/pxe.c:796: undefined reference to `do_bootm'
common/built-in.o: In function `usb_kbd_remove':
/root/u-boot/common/usb_kbd.c:625: undefined reference to `stdio_deregister_dev'
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
Makefile:1261: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1

#389 Re: 全志 SOC » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-04-09 18:28:54

颜水花生 说:

目前最终优化 uboot需要2S,linux启动到命令行需要4.5S, 整体启动到LVGL界面需要5S左右,最终还是缩小内核体积,现在内核只有1.2M,外设全部改成驱动挂上去

最终优化配置可以分享一下吗?

#390 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请大家推荐一款资料备份硬盘 » 2020-04-07 16:53:34

kekemuyu
回复: 15

想买一个1T左右的硬盘,速度不要求太高,主要在意的是可靠性

#391 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 串口文件管理器(包括客户端和服务端) » 2020-04-07 11:13:50

spunky 说:

直接使用ADB不是也可以完美解决?

adb不错,做成将远程文件系统挂载在本地更为优雅,你说呢?

#392 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap版 » 2020-04-07 09:36:28

晕哥 说:

刚刚咨询一位大佬:

这个速度本来就慢,
几十kHz,
内核与用户的数据同步毫秒级。
就是说linux不适合干用gpio直接驱动的事情,即使用mmap也一样。

哦,原来是这样。下一步的玩法是:
1:f1c100s硬件spi的4线方式
2. spi软件模式做成驱动集成到内核
3. 最终做成spi软硬件兼容的驱动集成到内核

通过这个小demo系统的学习一下linux的驱动开发

#393 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap版 » 2020-04-07 08:49:02

还用了纯c语言的mmap方式,速度稍微有点提升,但还是有扫描感。难道linux上操作gpio真么慢

#394 Re: 全志 SOC » go语言开发f1c100s之oled驱动mmap版 » 2020-04-06 22:18:24

路人甲 说:

这个相当于 devmem 命令吧?

对,我就是拿devmem代码改的,其实就是用了两个函数mmap和munmap

#395 全志 SOC » go语言开发f1c100s之oled驱动mmap版 » 2020-04-06 22:09:47

kekemuyu
回复: 6

上次是用文件方式操作io,这次换成了设备地址映射到虚拟地址,操作虚拟地址来操作io。但是这两种方式驱动oled都非常慢,有很明显的扫描感。不知道大家用什么方式操作f1c100s的io,理论上不应该这么慢的。

https://github.com/kekemuyu/f1c100s/tree/master/oled_spi
mmap部分代码:

#include"devmem.h"


int tempfd;

void Openfile(){
    if((tempfd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; 
    
}

void Closefile(){
     close(tempfd);
}

void Writebit(long  target,int bitsize ,char value){
 
    void *map_base, *virt_addr;
    unsigned long read_result, writeval;
    int fd;

    fd = fcntl(tempfd, F_DUPFD, 0);
    if(fd<0){
	FATAL;
    }    
//    if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
//    printf("/dev/mem opened.\n");
//    fflush(stdout);

    /* Map one page */
    map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);
    if(map_base == (void *) -1) FATAL;
//    printf("Memory mapped at address %p.\n", map_base);
//    fflush(stdout);
    
    virt_addr = map_base + (target & MAP_MASK);
    
    read_result = *((unsigned long *) virt_addr);
    
//    printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result);
//    fflush(stdout);
    

//    printf("bitsize:%d;value:%d\n",bitsize,value);
    if(value==0){
       read_result&=~(1<<bitsize); 
    }else{
        read_result|=1<<bitsize;
    }

    writeval=read_result;
    *((unsigned long *) virt_addr)=writeval;
    read_result=*((unsigned long *) virt_addr);
    
//    printf("Written 0x%X; readback 0x%X\n", writeval, read_result);
//    fflush(stdout);
    
    if(munmap(map_base, MAP_SIZE) == -1) FATAL;
    close(fd);
}

#396 Re: 全志 SOC » go语言开发f1c100s之oled驱动 » 2020-04-05 21:04:35

liuchangyin 说:

效率如何?

开发效率类似于python,执行速度略低于c/c++。是平衡了开发效率和执行速度的绝佳选择

#397 Re: 全志 SOC » go语言开发f1c100s之oled驱动 » 2020-04-05 00:09:47

liuchangyin 说:

脚本语言适合于DIY

go不是脚本语言,也是静态编译型语言,已经大量应用于web开发和云计算区块连

#398 全志 SOC » go语言开发f1c100s之oled驱动 » 2020-04-04 14:39:24

kekemuyu
回复: 10

尝试用go语言操作gpio驱动oled,驱动方式是spi,io操作方式是文件方式。由于这种方式需要不断写文件,oled刷新有点慢。后期会改成mmap方式。
https://github.com/kekemuyu/f1c100s/tree/master/oled_spi
webwxgetmsgimg.jpg
oled 部分代码:

package oled

import (
	"oled_spi/gpio"
	"time"
)

const (
	OLED_CLK = "gpio131"
	OLED_DI  = "gpio132"
	OLED_RST = "gpio133"
	OLED_DC  = "gpio138"
	OLED_CS  = "gpio139"

	OLED_CMD  = 0 //写命令
	OLED_DATA = 1 //写数据

	SIZE       = 16
	Max_Column = 128
	Max_Row    = 64
)

func Init() {
	gpio.OpenGpioFile(OLED_CLK)
	gpio.OpenGpioFile(OLED_DI)
	gpio.OpenGpioFile(OLED_RST)
	gpio.OpenGpioFile(OLED_DC)
	gpio.OpenGpioFile(OLED_CS)

	SetRst()
	time.Sleep(time.Millisecond * 100)
	ClrRst()
	time.Sleep(time.Millisecond * 100)
	SetRst()

	WriteByte(0xAE, OLED_CMD) //--turn off oled panel
	WriteByte(0x00, OLED_CMD) //---set low column address
	WriteByte(0x10, OLED_CMD) //---set high column address
	WriteByte(0x40, OLED_CMD) //--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
	WriteByte(0x81, OLED_CMD) //--set contrast control register
	WriteByte(0x66, OLED_CMD) // Set SEG Output Current Brightness
	WriteByte(0xA1, OLED_CMD) //--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
	WriteByte(0xC8, OLED_CMD) //Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
	WriteByte(0xA6, OLED_CMD) //--set normal display
	WriteByte(0xA8, OLED_CMD) //--set multiplex ratio(1 to 64)
	WriteByte(0x3f, OLED_CMD) //--1/64 duty
	WriteByte(0xD3, OLED_CMD) //-set display offset    Shift Mapping RAM Counter (0x00~0x3F)
	WriteByte(0x00, OLED_CMD) //-not offset
	WriteByte(0xd5, OLED_CMD) //--set display clock divide ratio/oscillator frequency
	WriteByte(0x80, OLED_CMD) //--set divide ratio, Set Clock as 100 Frames/Sec
	WriteByte(0xD9, OLED_CMD) //--set pre-charge period
	WriteByte(0xF1, OLED_CMD) //Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	WriteByte(0xDA, OLED_CMD) //--set com pins hardware configuration
	WriteByte(0x12, OLED_CMD)
	WriteByte(0xDB, OLED_CMD) //--set vcomh
	WriteByte(0x40, OLED_CMD) //Set VCOM Deselect Level
	WriteByte(0x20, OLED_CMD) //-Set Page Addressing Mode (0x00/0x01/0x02)
	WriteByte(0x02, OLED_CMD) //
	WriteByte(0x8D, OLED_CMD) //--set Charge Pump enable/disable
	WriteByte(0x14, OLED_CMD) //--set(0x10) disable
	WriteByte(0xA4, OLED_CMD) // Disable Entire Display On (0xa4/0xa5)
	WriteByte(0xA6, OLED_CMD) // Disable Inverse Display On (0xa6/a7)
	WriteByte(0xAF, OLED_CMD) //--turn on oled panel

	WriteByte(0xAF, OLED_CMD) /*display ON*/
	Clear()
	SetPos(0, 0)
}

func SetClk() {
	gpio.GpioNSetValue(OLED_CLK, "1")
}

func ClrClk() {
	gpio.GpioNSetValue(OLED_CLK, "0")
}

func SetDi() {
	gpio.GpioNSetValue(OLED_DI, "1")
}

func ClrDi() {
	gpio.GpioNSetValue(OLED_DI, "0")
}

func SetRst() {
	gpio.GpioNSetValue(OLED_RST, "1")
}

func ClrRst() {
	gpio.GpioNSetValue(OLED_RST, "0")
}
func SetDc() {
	gpio.GpioNSetValue(OLED_DC, "1")
}

func ClrDc() {
	gpio.GpioNSetValue(OLED_DC, "0")
}
func SetCs() {
	gpio.GpioNSetValue(OLED_CS, "1")
}

func ClrCs() {
	gpio.GpioNSetValue(OLED_CS, "0")
}

func WriteByte(dat, cmd byte) {
	if cmd != 0 {
		SetDc()
	} else {
		ClrDc()
	}
	ClrCs()

	for i := 0; i < 8; i++ {
		ClrClk()
		if dat&0x80 != 0 {
			SetDi()
		} else {
			ClrDi()
		}
		SetClk()
		dat <<= 1
	}
	SetCs()
	SetDc()
}

func SetPos(x, y byte) {
	WriteByte(0xb0+y, OLED_CMD)
	WriteByte(((x&0xf0)>>4)|0x10, OLED_CMD)
	WriteByte((x&0x0f)|0x01, OLED_CMD)
}

func Clear() {
	for i := byte(0); i < 8; i++ {
		WriteByte(0xb0+i, OLED_CMD) //设置页地址(0~7)
		WriteByte(0x00, OLED_CMD)   //设置显示位置—列低地址
		WriteByte(0x10, OLED_CMD)   //设置显示位置—列高地址
		for n := 0; n < 128; n++ {
			WriteByte(0, OLED_DATA) //更新显示
		}
	}
}

func ShowChar(x, y, chr byte) {
	c := chr - ' ' //得到偏移后的值
	if x > Max_Column-1 {
		x = 0
		y = y + 2
	}
	if SIZE == 16 {

		SetPos(x, y)
		for i := 0; i < 8; i++ {
			WriteByte(F8X16[int(c)*16+i], OLED_DATA)
		}

		SetPos(x, y+1)
		for i := 0; i < 8; i++ {
			WriteByte(F8X16[int(c)*16+i+8], OLED_DATA)
		}

	} else {
		SetPos(x, y+1)

	}
}

func ShowString(x, y byte, chrs string) {
	for _, v := range []byte(chrs) {
		ShowChar(x, y, v)
		x += 8
		if x > 120 {
			x = 0
			y += 2
		}

	}

}

#399 Re: 全志 SOC » go语言开发f1c100s之点灯 » 2020-04-04 10:02:59

zero.licheepi文档中操作gpio的方法,放在这里备用
使用sysfs操作GPIO的例子:

#echo 192 > /sys/class/gpio/export  #导出 PG0, GREEN
#ls /sys/class/gpio/
export     gpio192    gpiochip0  unexport
#ls /sys/class/gpio/gpio192/
active_low direction subsystem/ value device/ power/ uevent
#echo "out" > /sys/class/gpio/gpio192/direction #设置为输出
#echo 0 > /sys/class/gpio/gpio192/value     #亮灯
#echo 1 > /sys/class/gpio/gpio192/value #灭灯
#echo "in" > /sys/class/gpio/gpio192/direction #设置为输入
#cat /sys/class/gpio/gpio192/value #读取电平
0

#400 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 21:59:32

那可能功耗就是那么大,如果功耗不满足要求,只能换更低功耗的cpu了。据我了解能运行linux的低功耗cpu,运行功耗都挺大的(大概都在40~50ma即使频率降到最低),睡眠功耗倒是有很低的,比如君正的x1000,m200s,atmel和飞思卡尔也有睡眠能在ua级别的。

#401 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 21:24:29

mfkiwl 说:

这个应该不是理论功耗吧,至少应该是tape out然后测试过。
主要是差的有点大,要是百分之几十倒还觉得可能是测试条件或设计方面引起的差异

arm的这个是纯cpu的功耗,rk3308除了cpu本身还有各种外设,这些外设即使不使用也会有损耗的。所以你的功耗参考标准不应该是arm,而应该是rk3308的手册或是datasheet中描述的功耗为标准。

#402 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Shipping problems … continue » 2020-04-03 21:16:32

Mitko 说:

You mean in the past or currently ?

In the past: semiconductors, components, PCBs., motors, 3D printer parts, various welding accessories, IP camera modules etc.

Currently, I have not purchased anything yet. I was thing about ordering some PCBs, again semiconductors, capacitors, resistors, probably some PCBs. I was also considering getting one Kendryte K210 EVB and few modules. In your opinion, which option is better: Widora’s BITK210, Sipeed MAIX Dock K210, Allwinner R329, other MCU/SoC with AI ? I spoke lately with Allwinner about R329. I will not be available for at least 3 months.

you can try to order pcbs at https://jlcpcb.com/,this company is famous about making pcbs in chnia and other counties.
semiconductors,you can try at taobao.com.
ai modules,k210 chip is nice. all this things you can get at taobao.

#403 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 20:58:39

ARM发布cortex A35的时候宣称28nm工艺下1GHz功耗是90mW。 arm公司发布的是理论功耗,各个厂商实际做出来的功耗并不一定能达到这个水平。

#404 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 19:34:43

mfkiwl 说:

mcuzone发布了rk3308的功耗测试。我自己实测了一下,结果基本一致。单核功耗大致是56mA*5v=280mW

ARM发布cortex A35的时候宣称28nm工艺下1GHz功耗是90mW。莫非这300MHz的频率,要多出190mW的功率?在linux下如何把rk3308的频率设置在1GHz恒定?有办法调整cpu核心电压么?

另外, 有rk3308板的网友,可否也帮忙测试下?

你测的是核心板的功耗,3308本身应该没这么大功耗。不得不说rk3308的能耗比还是挺厉害的

#406 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教大家有没有一款支持 密钥连接(不是密码)的android ssh客户端软件 » 2020-04-02 21:23:50

barcode 说:

试了以下阿里云的app, 确实可以设置密钥文件,  不过总是提示我的密钥格式不对, 这就尴尬了, 晚点我再试一试.

阿里的密钥格式是pem

#409 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 15:55:33

继续发问2,我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#410 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 15:41:03

继续发问,我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#411 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 14:41:31

杨飞武 说:

板子有的买么

估计没有,我自己打样了,请大神指教pcb如何显示器件名称

#412 Re: 全志 SOC » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 09:18:12

我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#413 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 看我小蚂蚁的力量attiny13驱动分辨率为320*135的ips高清屏 » 2020-03-28 00:11:01

kekemuyu
回复: 3

想试试attiny13能否驱动spi的320*135的ips高清屏,没想到真的成功了,一直担心1k的flash不够用,看来是完全没问题.

Program Memory Usage 	:	716 bytes   69.9 % Full
Data Memory Usage 		:	0 bytes   0.0 % Full

源码是从stm32移植的,没怎么整理,将就看吧,开发环境是atmel官方的avr studio7

/*
 * lcd.c
 *
 * Created: 2020/3/27 22:27:25
 * Author : Administrator
 */ 

#include <avr/io.h>
#include <util/delay.h>

//»­±ÊÑÕÉ«
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000
#define BLUE           	 0x001F
#define BRED             0XF81F
#define GRED 			       0XFFE0
#define GBLUE			       0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			     0XBC40 //רɫ
#define BRRED 			     0XFC07 //רºìÉ«
#define GRAY  			     0X8430 //»ÒÉ«
#define DARKBLUE      	 0X01CF	//ÉîÀ¶É«
#define LIGHTBLUE      	 0X7D7C	//dzÀ¶É«
#define GRAYBLUE       	 0X5458 //»ÒÀ¶É«
#define LIGHTGREEN     	 0X841F //dzÂÌÉ«
#define LGRAY 			     0XC618 //dz»ÒÉ«(PANNEL),´°Ìå±³¾°É«
#define LGRAYBLUE        0XA651 //dz»ÒÀ¶É«(Öмä²ãÑÕÉ«)
#define LBBLUE           0X2B12 //Ç³×ØÀ¶É«(Ñ¡ÔñÌõÄ¿µÄ·´É«)


#define USE_HORIZONTAL 2  //ÉèÖúáÆÁ»òÕßÊúÆÁÏÔʾ 0»ò1ΪÊúÆÁ 2»ò3ΪºáÆÁ
#define LCD_W 240
#define LCD_H 135

#define LCD_SCLK_Clr()  PORTB&=0xfe//SCL=SCLK
#define LCD_SCLK_Set() PORTB|=0x01

#define LCD_MOSI_Clr() PORTB&=0xfd//SDA=MOSI
#define LCD_MOSI_Set() PORTB|=0x02

#define LCD_RES_Clr()  PORTB&=0xfb//RES
#define LCD_RES_Set()  PORTB|=0x04

#define LCD_DC_Clr()   PORTB&=0xf7//DC
#define LCD_DC_Set()   PORTB|=0x08

#define LCD_CS_Clr()   PORTB&=0xef//CS
#define LCD_CS_Set()   PORTB|=0x10


int main(void)
{
	LCD_Init();
	LCD_Fill(0,0,LCD_W,LCD_H,BLUE);
	LCD_DrawPoint(20,20,WHITE);
    /* Replace with your application code */
    while (1) 
    {
		LCD_Fill(0,0,LCD_W,LCD_H,BLUE);
		LCD_Fill(0,0,LCD_W,LCD_H,GREEN);
		LCD_Fill(0,0,LCD_W,LCD_H,RED);
		
    }
}

void LCD_GPIO_Init(void){
	DDRB=0xFF;
	PORTB=0xff;
	
}


/******************************************************************************
      º¯Êý˵Ã÷£ºLCD´®ÐÐÊý¾ÝдÈ뺯Êý
      Èë¿ÚÊý¾Ý£ºdat  ҪдÈëµÄ´®ÐÐÊý¾Ý
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Writ_Bus(uint8_t dat) 
{	
	uint8_t i;
	LCD_CS_Clr();
	for(i=0;i<8;i++)
	{			  
		LCD_SCLK_Clr();
		if(dat&0x80)
		{
		   LCD_MOSI_Set();
		}
		else
		{
		   LCD_MOSI_Clr();
		}
		LCD_SCLK_Set();
		dat<<=1;
	}	
  LCD_CS_Set();	
}

void LCD_WR_REG(uint8_t dat){
	LCD_DC_Clr();//дÃüÁî
	LCD_Writ_Bus(dat);
	LCD_DC_Set();//дÊý¾Ý
}

void LCD_WR_DATA8(uint8_t dat){
	LCD_Writ_Bus(dat);
}


void LCD_Init(void)
{
	LCD_GPIO_Init();//³õʼ»¯GPIO
	
	LCD_RES_Clr();//¸´Î»
	_delay_ms(100);
	LCD_RES_Set();
	_delay_ms(100);
	
	
	LCD_WR_REG(0x11);
	_delay_ms(120);
	LCD_WR_REG(0x36);
	if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
	else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
	else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
	else LCD_WR_DATA8(0xA0);

	LCD_WR_REG(0x3A);
	LCD_WR_DATA8(0x05);

	LCD_WR_REG(0xB2);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x33);
	LCD_WR_DATA8(0x33);

	LCD_WR_REG(0xB7);
	LCD_WR_DATA8(0x35);

	LCD_WR_REG(0xBB);
	LCD_WR_DATA8(0x19);

	LCD_WR_REG(0xC0);
	LCD_WR_DATA8(0x2C);

	LCD_WR_REG(0xC2);
	LCD_WR_DATA8(0x01);

	LCD_WR_REG(0xC3);
	LCD_WR_DATA8(0x12);

	LCD_WR_REG(0xC4);
	LCD_WR_DATA8(0x20);

	LCD_WR_REG(0xC6);
	LCD_WR_DATA8(0x0F);

	LCD_WR_REG(0xD0);
	LCD_WR_DATA8(0xA4);
	LCD_WR_DATA8(0xA1);

	LCD_WR_REG(0xE0);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x04);
	LCD_WR_DATA8(0x0D);
	LCD_WR_DATA8(0x11);
	LCD_WR_DATA8(0x13);
	LCD_WR_DATA8(0x2B);
	LCD_WR_DATA8(0x3F);
	LCD_WR_DATA8(0x54);
	LCD_WR_DATA8(0x4C);
	LCD_WR_DATA8(0x18);
	LCD_WR_DATA8(0x0D);
	LCD_WR_DATA8(0x0B);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x23);

	LCD_WR_REG(0xE1);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x04);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x11);
	LCD_WR_DATA8(0x13);
	LCD_WR_DATA8(0x2C);
	LCD_WR_DATA8(0x3F);
	LCD_WR_DATA8(0x44);
	LCD_WR_DATA8(0x51);
	LCD_WR_DATA8(0x2F);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x20);
	LCD_WR_DATA8(0x23);

	LCD_WR_REG(0x21);

	LCD_WR_REG(0x29);
}


/******************************************************************************
      º¯Êý˵Ã÷£ºLCDдÈëÊý¾Ý
      Èë¿ÚÊý¾Ý£ºdat дÈëµÄÊý¾Ý
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_WR_DATA(uint16_t dat)
{
	LCD_Writ_Bus(dat>>8);
	LCD_Writ_Bus(dat);
}


/******************************************************************************
      º¯Êý˵Ã÷£ºÉèÖÃÆðʼºÍ½áÊøµØÖ·
      Èë¿ÚÊý¾Ý£ºx1,x2 ÉèÖÃÁÐµÄÆðʼºÍ½áÊøµØÖ·
                y1,y2 ÉèÖÃÐÐµÄÆðʼºÍ½áÊøµØÖ·
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{
	if(USE_HORIZONTAL==0)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+52);
		LCD_WR_DATA(x2+52);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+40);
		LCD_WR_DATA(y2+40);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else if(USE_HORIZONTAL==1)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+53);
		LCD_WR_DATA(x2+53);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+40);
		LCD_WR_DATA(y2+40);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else if(USE_HORIZONTAL==2)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+40);
		LCD_WR_DATA(x2+40);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+53);
		LCD_WR_DATA(y2+53);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+40);
		LCD_WR_DATA(x2+40);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+52);
		LCD_WR_DATA(y2+52);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
}

/******************************************************************************
      º¯Êý˵Ã÷£ºÔÚÖ¸¶¨ÇøÓòÌî³äÑÕÉ«
      Èë¿ÚÊý¾Ý£ºxsta,ysta   ÆðÊ¼×ø±ê
                xend,yend   ÖÕÖ¹×ø±ê
								color       ÒªÌî³äµÄÑÕÉ«
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
	uint16_t i,j; 
	LCD_Address_Set(xsta,ysta,xend-1,yend-1);//ÉèÖÃÏÔʾ·¶Î§
	for(i=ysta;i<yend;i++)
	{													   	 	
		for(j=xsta;j<xend;j++)
		{
			LCD_WR_DATA(color);
		}
	} 					  	    
}

void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
{
	LCD_Address_Set(x,y,x,y);//ÉèÖùâ±êλÖÃ
	LCD_WR_DATA(color);
}

#414 Re: 全志 SOC » v3s 移植mpg123 问题 » 2020-03-27 23:44:27

不知道你是安装的什么系统,我是在v3s上跑了debian系统,然后用apt来安装的mpg123.甚至安装了musicbox,可以在线听网易云音乐.请看我的连接
https://whycan.cn/t_3114.html

#416 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 寻求3D扫描相机,面阵测距相机 » 2020-03-26 21:43:37

迪卡 说:

精度2cm.....
我们想达到2mm,这样才能连大卡车上的螺丝都能扫描到。

我只是提供一个思路,可能有更高精度的,我已经说过了lz的精度要求太高,火星探测车的技术能达到毫米级就不错了

#421 Re: ESP32/ESP8266 » esp32中被人忽略的超低功耗协处理器ulp » 2020-03-23 21:34:38

metro 说:

低功耗电流和电源电压有关,电压低时电流也比较低。有可能150 uA是在较低的电源电压下测得的数据。

手册上说的ulp工作功耗可能是指不启动任何外设的单纯指令操作情况,gpio也属于外设。我试了下,如果不开启gpio,ulp死循环的功耗基本符合手册。

#422 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 串口文件管理器(包括客户端和服务端) » 2020-03-22 02:27:10

旧的软件真的不太好,需要重构。希望做成跟操作系统高度融合的模式,可以将外部存储通过串口,网口等任何通讯口挂在到本地系统,像浏览本地文件一样操作外部存储。有几个难点还没搞定

#423 ESP32/ESP8266 » esp32中被人忽略的超低功耗协处理器ulp » 2020-03-21 00:58:30

kekemuyu
回复: 10

测试环境:
1.板子是自己画的,模块是esp32-wroom-32
2.测量工具福禄克15B+

datasheet功耗参数:
none_20200321-0033.png
实测功耗:
1.deepsleep  10ua               
2. 仅有ulp工作(控制一个io反转)    330ua

这里只评测ulp的工作状态功耗,ulp在8mhz主频工作时功耗仅有330ua(和手册的150ua还有不少的差距,暂时找不到原因),平均功耗是41ua/mhz.
这个成绩已经是相当牛逼了。如果真能到达手册说的150ua,平均工作功耗是20ua/mhz,几乎逆天级别了。而且在ulp中可以操作io,i2c,adc,定时器等常用外设,适用于功耗要求特别严格的场景,唯一的缺点是ulp现在只能汇编。

实验用例(arduino):
https://whycan.cn/files/members/1315/ulp_gpio.7z

#425 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 大家有没有发现Win10升级之后, 重启电脑之后可以恢复有些没有关闭的窗口, 感觉是学 mac os 的 » 2020-03-17 13:11:12

这个感觉在实现上没什么难度,知道window休眠模式吧,和那个基本一样会把当前的应用的环境保存在硬盘。应用开的多了会占用大量硬盘空间

#426 Re: Xilinx/Altera/FPGA/CPLD/Verilog » 完全使用开源工具链的FPGA开发板 » 2020-03-17 12:57:14

不错。最近对fpga感兴趣,不知lz对hdmi了解吗?想用fpga做一个hdmi转tft液晶接口的东西。

#429 Re: 全志 SOC » 网上看到的F1C200s最新资料,包括Datasheet(V1.1)和User Manual(V1.2) » 2020-03-14 21:24:23

其他国外大佬能获取更多资料。

The F1C100s needs some additional work to enable its Cedar peripheral. 
I’ve asked Allwinner for more info about the F1C100s’s video stack, and I plan to continue working on it in the meantime as well.

All this means that you could be playing 1080P HD video on Linux on a 61-cent chip. Absolutely crazy.

#430 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-13 16:03:19

dycbaba 说:

好用吗“”

4天没发货,退款了。看了一下开发文档,都还不是吃S2。还是等等吧

#431 Re: ESP32/ESP8266 » 我已经被8266折磨死了,实在不行就换模块了,老掉线~~ » 2020-03-10 15:02:06

估计不是硬件问题,micropython对wifi支持的不太稳定,我的esp32温度采集用arduino做的已经稳定运行几个月了,https://kekemuyu.com/device

#432 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-06 22:22:45

乐鑫官网首页ceo的2020致词中提到:2020 年,乐鑫将推出四颗新的芯片,覆盖不同的细分市场、价位和性能。  期待更加强大的芯。

#433 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-06 22:19:41

估计我是第一个购买的,看库存开发板100个,模组400个,我买了一个开发板和5个模组

#435 Re: RISC-V » 淘宝上9元包快递打印了一本书 《RISC-V 指令集手册》 » 2020-03-04 15:42:38

xiaohui 说:

Your text here
不再需要假装,哈哈哈哈哈哈哈哈哈

翻译都太生硬,还不如看原版

#437 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-02-26 13:06:56

晚风 说:

麻烦楼主提供一个联络邮箱,谢谢!

kekemuyu@126.com

#438 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-02-26 12:26:27

晚风 说:

我们公司需要开发一个类似的项目,也是用ESP32与SHT30,通过云端让客户实时监控数据,和楼主所实现的很接近;
各位大神感兴趣的可私聊细谈,项目付费。

没想真的有这样的需求,需求如果不是很复杂,可以免费提供帮助。硬件,服务端,小程序,app都可以。

#439 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » github项目下载代理 » 2020-02-08 17:02:32

kekemuyu
回复: 14

看到晕哥在帮大家下载github项目,我也凑个热闹,让阿里云也发挥点余热。用golang做了个github项目下载代理服务,使用方法是:
http://kekemuyu.com:8080?   后面加上github项目地址,比如 https://github.com/kekemuyu/tools
完整地址是: http://kekemuyu.com:8080?https://github.com/kekemuyu/tools
下载有点慢,大家谅解,我的阿里云是国内的,没有梯子。tools里有代理服务的源码

#440 Re: RK3288/RK3399/RK1108 » 有没有使用rk3399 做Chromebook的 » 2020-02-07 11:30:12

我是chromebook忠实fans,有两台宏基的赛扬处理器的chromebook,闲鱼800淘来的,一台原生系统,一台linux,最大的特点是轻便省电。arm系列其实不太推荐,同样价格性能比x86差很多

#441 全志 SOC » 串口网口透传(开源) » 2020-02-01 18:24:56

kekemuyu
回复: 1

闲的蛋疼,用golang花2个小时搞定串口网口透传工具。理论上适用于任何具有网口和串口的设备。https://github.com/kekemuyu/tools
none_20200201-1820.png

#442 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-29 21:36:32

arychen 说:

感觉这个温度传感器精确度一般啊   半夜和中午的温差2度

室内,差不多就是这温度

#443 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-19 22:25:12

xidaole 说:

wind7-64bit ;什么个依赖方法, 已安装chrome 浏览器,并且设定为默认浏览器,但还是闪退。

那不应该呀?你在cmd中启动软件,可以看到报什么错

#444 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-18 21:51:07

xidaole 说:

不知道为什么,我的笔记本上面运行,一闪而过,而在别人的台式机上面运行很正常。

系统要求是64位,软件依赖chrome

#446 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-10 14:18:08

notepad-- 说:

牛啊, 我顺手上传上来了: gosunxifel_20200110.7z

请问下楼主下一个版本能不能把 V3s 也加上?

感谢上传,如有需求会加的

#447 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-10 13:24:56

功能基本做完了,执行文件已经打包到github。支持多地址烧写,任意定义多个地址段,不设上限。
gosunxifel.gif

#450 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-09 15:05:15

红白机 说:

然后分析 out 输出的结果解析成进度?

这个得调试,不知道out输出什么,晚上调试一下,现在out输出得是:

 already startedERROR: Allwinner USB FEL device not found!

#451 Re: 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-09 14:51:05

红白机 说:

是通过调用 sunxi-fel.exe 进程吗?如何获取进度的? pipe 管道吗?

是调用 sunxi-fel.exe ,go标准库有调用外部程序的功能。

cmd := exec.Command("cmd.exe", "/c", rootdir+"/sunxi-tools-win32support_f1c100s/sunxi-fel.exe -p spiflash-write "+addr+" "+file)
	out, err := cmd.CombinedOutput()
	err = cmd.Run()
	log.Debug(err, string(out))
	if err != nil {
		fmt.Println(err)
	}

#453 全志 SOC » f1c100s/200s图形化烧录工具 » 2020-01-09 14:33:42

kekemuyu
回复: 53

花了点时间用go+h5把sunxi-tools打包成图形化操作的,比cmd命令方便点。
https://github.com/kekemuyu/gosunxifel
none_20200109-1433.png

#454 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 时隔十年, Linux QQ在贸易战复活 » 2020-01-09 13:20:37

大环境是能赚钱的就做,不能立刻变现的都滚一边去。小公司是这样,大公司就算赚的盆满钵满也是这操行。科技公司能引领时代的才算伟大,否则只能跟在人家后面吃屎。

#456 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-06 16:21:43

需要明确一件事,把设备树和linux内核加载到ram后,只要把设备树地址赋值给r2寄存器,然后跳转到linux地址就可以了吗?linux就会自动解析设备树了吗?

内核对设备树的处理也是分这三部分的。

1. 对于32bit的arm处理器,bootloader启动内核时,会设置r0,r1,r2三个寄存器,
r0一般设置为0;
r1一般设置为machine id (在使用设备树时该参数没有被使用);
r2一般设置ATAGS(使用设备树之前)或DTB的开始地址(使用设备树之后)

bootloader给内核传递的参数时有2种方法:ATAGS 或 DTB

a. __lookup_processor_type : 使用汇编指令读取CPU ID, 根据该ID找到对应的proc_info_list结构体(里面含有这类CPU的初始化函数、信息)
b. __vet_atags : 判断是否存在可用的ATAGS或DTB
c. __create_page_tables : 创建页表, 即创建虚拟地址和物理地址的映射关系
d. __enable_mmu : 使能MMU, 以后就要使用虚拟地址了
e. __mmap_switched : 上述函数里将会调用__mmap_switched
f. 把bootloader传入的r2参数, 保存到变量__atags_pointer中
g. 调用C函数start_kernel

head.S/head-common.S :
把bootloader传来的r1值, 赋给了C变量: __machine_arch_type
把bootloader传来的r2值, 赋给了C变量: __atags_pointer // dtb首地址

对于32bit的arm处理器,machine_desc 使用 MACHINE_START 初始化,其 dt_compat 存储的是 compatible 属性数组,用于表示支持的单板。

u-boot 中也提供的对dtb文件进行操作的命令,为 fdt, uboot 中所有的命令都是使用U_BOOT_CMD()来定义的,对应文件中有命令的使用注释。

#457 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-06 15:09:22

达克罗德 说:

和楼主有同样的想法,加油!我可能会试试uboot裁剪这条路。我这个裸机有点问题好像200s的高32MB内存用不起来

heap中的len改成48M,应该就支持了吧

MEMORY
{
	ram  : org = 0x80000000, len = 8M
	dma  : org = 0x80800000, len = 8M
	heap : org = 0x81000000, len = 16M
}

#458 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-06 00:40:25

重启应该慢一些,但也就4秒左右。我的真正连接应该在1s以内,因为程序唤醒后有延时2s

#459 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-06 00:31:07

达克罗德 说:

和楼主有同样的想法,加油!我可能会试试uboot裁剪这条路。我这个裸机有点问题好像200s的高32MB内存用不起来

感谢@达克罗德 大神对f1c100s裸奔的所做的大量工作,我等菜鸟才可以一探f1c100s内部的工作原理。uboot裁剪有点难搞,开始也是想看一下uboot源码,可不知道从哪里下手,本来想看一下makefile,可是makefile文件太多了,不知道从哪一个看起。有时间还邀请大神普及一下uboot和linux内核的编译过程。

#460 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-05 23:18:19

这里就是主程序入口,很简单嘛,怀念8051汇编的日子。有时候挺喜欢汇编的,让我有一种全局掌控的感觉,了解所有寄存的状况,内存,堆栈,中断都在自己的掌控之中

	/* Call _main */
	ldr r1, =_main
	mov pc, r1
_main:
	mov r0, #1;
	mov r1, #0;
	bl boot_main
	b _main

#461 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-05 23:10:21

checkout 说:

需要传递一个tag列表或设备树地址给内核,简化的bootloader做到4kb以内都很正常

感谢回复,很有帮助。做一个简单的boot,从start.s文件中找到一段关键代码:

/* Initial system clock, ddr add uart */
	bl sys_clock_init
	bl sys_dram_init
	bl sys_uart_init

	/* Copyself to link address */
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	beq 1f
	bl sys_copyself

这段代码几乎是核心引导了,加上copy linux内核代码应该就可以了,然后跳转到linux内核地址

#462 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-05 23:03:47

raspberryman 说:

是 wifi 吗?

3秒就可以连上并且把数据发送出去吗?

是的,只要第一次连接上之后,以后再连接是时间很短的,估计是esp32自身库的机制。

#463 ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-05 22:03:10

kekemuyu
回复: 16

esp32加sht30做了个低功耗温湿度传感器,每隔5分采集温湿度连接服务器上传数据然后进入deepsleep,300mah锂电池供电,大概计算了一下续航,5分钟有3s在工作,有效工作时间是1/100,工作电流按100ma计算(实际没这么大),300/100/(24×(1/100)),大概能运行12天。实际运行时间还得等待实测效果,大家可以登录https://kekemuyu.com/device查看每天运行情况。

none_20200105-2149.png

#464 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-05 21:42:50

checkout 说:

把基本外设初始化好,再向内核传参就行,可以做到很小,启动时间主要是从flash加载内核到内存耗时比较长

需要传参吗?如何传参,不是有设备树吗?

#465 Re: 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-05 20:44:21

直接启动?引导程序肯定打包进linux内核了,zlg的i.mx287开发板也有这样的方式。总之引导过程避免不了,从裸奔程序提炼出引导程序肯定比uboot小很多,这样引导程序的启动时间基本可以忽略。

#466 全志 SOC » 看f1c100s裸奔程序受到的启发 » 2020-01-05 17:51:12

kekemuyu
回复: 17

今天看了一下达克洛德的裸奔程序,突发奇想,既然能引导自己的程序,那也可以引导linux内核吧,这样bootloader可以小到几k吧

#467 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 运行在小米2S上的WEB服务器,同时可做FTP » 2020-01-04 09:29:08

迪卡 说:

又弄了个nat123,
看看速度对比一下

http://dika.ren
是  nat123的
http://www.dika.ren   
免费frp的

我研究过frp的源码,穿透软件基本没什么可优化的了,主要瓶颈在网络

#470 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 家里Windows电脑安装FRP客户端, 再装上VNC服务器,这样在地球上任何有网络的地方都可以操作家里的电脑了。 » 2019-12-30 10:59:21

上周看了一下frp0.1.0的源码还是比较简单的,源码写的还是不错的,很多模块可以抽出来加到自己的项目中。

#474 Re: ESP32/ESP8266 » WT32-ETH01 WIFI+蓝牙 RJ45网关 二合一嵌入式以太网模块串口透传 » 2019-12-26 20:13:00

KingJin 说:

你的意思是路由?

今天看乐鑫官网文档,发现esp32的api支持底层数据的透传,不知道这是哪一层,就叫底层吧。这一层是wifi收发数据的原始数据,tcp/ip那一层是对原数据做了处理的。
none_20191226-2012.png

#476 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 19:08:35

达克罗德 说:

我用SDNAND,uboot没优化;kernel本身只需要1.6秒到shell

kernel是在ram中运行,速度没得说,把没用的驱动去掉应该更快

#477 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 17:27:43

那就从头文件开始吧,把不需要的统统砍掉

#478 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 17:19:38

晕哥 说:

@橘子 说,f1c100s 2.3秒

是spi吗?

#479 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 15:42:12

晕哥 说:

https://whycan.cn/files/members/3/2019-12-25_152909.png

这里修改 bootcmd/bootargs 默认参数, 早期版本的u-boot不能用make menconfig 修改这两个参数。

是修改的这里,这个bad crc应该不影响启动时间,也不影响引导系统。这里uboot启动时间大部分都花在了sf probe 0 60000000; sf read 0x80c00000 0x70000 0x10000; sf read 0x80008000 0x80000 0x400000; bootz 0x80008000 - 0x80c00000

这个read应该是把spiflash中的内容读到dram里的过程,这里需要优化,方法是:减小内核和文件系统体积,我先试试内核1m,文件系统1m时的情况

#480 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 15:19:16

xgui 说:

ENV 就是 u-boot 控制台用 printenv 打印出来的那些参数, 比如 bootcmd, bootargs 那些。

如果有 env 存在, u-boot会把 env 的参数覆盖默认的参数,

默认参数有些存在 menuconfig, 有些 存在 include/configs/sun**.h 里面.

log已经打印出make menuconfig中的bootcmd,说明bootcmd修改了默认参数,那么这个env参数是在哪里修改呢?make menuconfig中能修改env吗?

#481 Re: 全志 SOC » uboot启动速度如何优化? » 2019-12-25 14:54:05

晕哥 说:

2. 头文件里面有一个宏,保存ENV环境变量参数存储的基地址和大小, u-boot启动首先去读flash中这个ENV,
我记得最后几个字节是CRC32(???)校验的, 如果校验不通过就用默认的参数.

3. bootcmd 里面的 sf read 比较耗时。

对这个env环境变量不太懂,看log,make menuconfig设置的参数已经设置成功,那make menuconfig设置的是默认参数?
把头文件的这个宏注释掉,就不会有警告了吧

#482 全志 SOC » uboot启动速度如何优化? » 2019-12-25 11:19:00

kekemuyu
回复: 21

希望能秒启动linux,所以从uboot开始优化。
1.启动顺序是否可配置
2.这个bad crc是什么情况
3.SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB  这条log后具体做了什么,足足停顿了3~4s

U-Boot SPL 2018.01-05676-g0018878-dirty (Dec 25 2019 - 03:05:37)
DRAM: 64 MiB
Trying to boot from MMC1
Card did not respond to voltage select!
mmc_init: -95, time 22
spl: mmc init failed with error: -95
Trying to boot from sunxi SPI

U-Boot 2018.01-05676-g0018878-dirty (Dec 25 2019 - 03:05:37 +0000) Allwinner Technology

CPU:   Allwinner F Series (SUNIV)
Model: Lichee Pi Nano
DRAM:  64 MiB
MMC:   SUNXI SD/MMC: 0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
*** Warning - bad CRC, using default environment

In:    serial@1c25000
Out:   serial@1c25000
Err:   serial@1c25000
Net:   No ethernet found.
starting USB...
No controllers found
Hit any key to stop autoboot:  0
SF: Detected w25q128bv with page size 256 Bytes, erase size 4 KiB, total 16 MiB
device 0 offset 0x70000, size 0x10000
SF: 65536 bytes @ 0x70000 Read: OK
device 0 offset 0x80000, size 0x400000
SF: 4194304 bytes @ 0x80000 Read: OK
=>

#484 Re: NXP i.MX6UL/6ULL » i.mx6ulz批量低至20元 » 2019-12-24 17:19:04

达克罗德 说:

不带LCD,还得自己配SDRAM,个人玩家玩起来麻烦

挑战一下吗?不试你怎么知道不行,不带lcd,可以用i.mx6ull也就30多

#485 Re: NXP i.MX6UL/6ULL » i.mx6ulz批量低至20元 » 2019-12-24 17:05:27

这个价格应该是可信的,淘宝有卖i.mx6ulz核心板的,只要70多

#486 NXP i.MX6UL/6ULL » i.mx6ulz批量低至20元 » 2019-12-24 14:57:43

kekemuyu
回复: 30

这个性价比感觉会碾压所谓的跨界处理器呀

工作温度:0℃ ~ 75℃(商业级)
主要特性

● ARM®Cortex®-A7 MPCore,主频900MHz,128KB L2缓存
● 两个带 PHY的高速USB移动连接
● 全套音频套件:ESAI、I2S×3、S/PDIF
● 多个扩展卡端口
①4个UART,每个高达5.0Mbps
②2个I2C,支持400kbps
③4个PWM
④单Quad SPI连接 serial NOR flash
● 带有TRNG的安全模块、AES加密引擎和安全引导
none_20191224-1448.png

#488 Re: 全志 SOC » 新人第一帖,发个S3的核心板(AXP209+S3) » 2019-12-20 16:55:18

超级萌新 说:

几个月前b站看到一个修主板视频,实在太牛了,同行修了一半修不好的板子他一步一步修好了,中间换过电阻,换过南桥,各种排除问题,有弹幕说这是同行下的战书,哈哈哈,笑死弟了。

有连接吗?膜拜一下

#490 Re: 全志 SOC » 没找到晶晨Amlogic板块啊,想开个大坑 » 2019-12-20 10:00:16

晕哥小弟 说:

有朋友能普及下,为什么现在很多的电视都使用android系统么? 直接linux不好么? 而且很多的开发板特别是网络这块,比如4G,3G的开发板,都是android.难道不能直接使用纯linux .

主要是生态吧,电视盒子也需要安装app的,android大量的软件稍加改动可以移植到电视盒子,比如爱奇艺,腾讯视频,优酷等。linux这方面就逊色多了,有谁见过国内的视频播放器是基于linux的吗?

#491 Re: 全志 SOC » Licheepi Zero实现裸板点亮RGB LED的功能 » 2019-12-18 11:14:35

这是不依赖linux的程序吗?可以从tf卡加载启动?

#492 Re: RT1050/RT10XX » RT1170 有人关注没 » 2019-12-13 17:15:19

达克罗德 说:

现在觉得,玩Linux比较省心,不用造轮子

赞成,尤其是涉及到网络部分,没linux系统做起来生不如死。linux的网络库以及在它上面构建的软件生态是你用裸奔一辈子也完不成的,所以说还是看用场景,在我看来rt1170的应用范围极窄。cortex-a加cortex-m才是大势所趋

#494 Re: 全志 SOC » 今天确定了两件事:F1C100S的CPU频率和DRAM频率设置 » 2019-12-13 08:56:55

Quotation 说:

你可以试试用这个汇编进入类似于休眠状态,但功耗也不会非常低。

__asm__ __volatile__("mcr p15, 0, %0, c7,c0,4" :: "r"(0));

这是ARM926EJ-S手册上提到的 Dynamic power management (wait for interrupt mode) 。我只简单试了一下,在我的板子上低了10mA。没试过唤醒:D。

感谢分享,我看手册上还有个Static power management (leakage control),这个试过吗?

#495 Re: 全志 SOC » 今天确定了两件事:F1C100S的CPU频率和DRAM频率设置 » 2019-12-13 08:30:34

xgui 说:

主频24Mhz, CPU电压1.2v降到0.9v, 这样都降不下来, 看来只能进入休眠模式了。

没有休眠模式

#496 Re: 全志 SOC » 今天确定了两件事:F1C100S的CPU频率和DRAM频率设置 » 2019-12-13 08:16:01

不知道你们试过没有,f1c100s的cpu频率设成很小,对功耗几乎影响很小。试过把频率设成24m,核心电压设成0.9v,功耗只降低几个了ma,这不可科学呀,可能是某些外设更耗电。如果能把空载功耗控制在5mw以内就好了,现在只能是想办法把启动速度提高到1s以内,不用的时候断电以降低功耗

#497 Re: 全志 SOC » 今天确定了两件事:F1C100S的CPU频率和DRAM频率设置 » 2019-12-13 00:49:51

关于cpu频率,启动内核后不是也可以设置频率吗?用devmem直接修改寄存器,当然uboot设置的是内核默认频率

#498 Re: 全志 SOC » 荔枝派zero的录音有杂音怎么破 » 2019-12-10 21:38:06

smartcar 说:

db是哪个寄存器呢?

说错了是mic1的调成最大,db是单位分贝
none_20191210-2137.png

#499 Re: 全志 SOC » 荔枝派zero的录音有杂音怎么破 » 2019-12-10 21:20:27

把adc的db参数调成了最大,rate设成48000,效果很好了

#500 全志 SOC » 荔枝派zero的录音有杂音怎么破 » 2019-12-10 16:39:20

kekemuyu
回复: 5

大家的zero录音试过吗?我的噪音有点大,录音前级如何优化?

页脚

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

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