您尚未登录。

#1 Re: Cortex M0/M3/M4/M7 » 开源CH551/2实现的汇编优化高速DAP-Link (CMSIS-DAP v2) » 2024-01-03 23:02:38

大佬威武,ch551/552的资源够用的话,是不是也能拿cy7c68013/cbm9002这种芯片弄一个下载器?

#2 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2023-09-18 22:52:23

我来填坑啦,填一个三年前的坑嘿嘿。
#问题:在SPL代码的sys-dram.c里,在函数内声明了一个结构体变量,声明的同时赋值会导致SPL代码跑飞,先声明再挨个赋值,SPL就正常执行。
#原因:
1、大家都知道SPL的执行情况很特殊,它在SOC刚复位时被执行,此时DDR尚未初始化,能够使用的仅仅是有限的SRAM空间。所以SPL代码尽量要做到位置无关,汇编代码中对变量的寻址最好是相对寻址或者固化在代码中,如果出现绝对寻址可能会导致代码跳转到尚未初始化的DDR空间。

2、编译器在编译代码时往往会把代码内的元素分段处理,比如大家喜闻乐见的.text .data .bss段。当使用不同的方式赋值一个结构体变量时,它被分到的段会不同,一般情况下这种差异不会有影响,但是在SPL代码这种特殊的条件下,一个变量的存储位置不同就会导致SPL代码执行异常。

3、SPL往往不含.data .rodata段,所有初始化值都以立即数的形式存在.text段中,当一个变量被分到.data段时,SPL去寻找它来初始化外设就会导致程序异常。

#实验:
在一个函数中声明一个结构体变量,声明的同时赋值,这个结构体变量会被分配到.rodata段。
编译命令:

arm-none-eabi-gcc -s code.c -fdata-sections -ffunction-sections
void layout_test()
    {
     struct dram_para_t para = {
    .read_delays = 0x00007979,
    .write_delays = 0x6aaa0000,
    .dual_rank = 0,
    .bus_width = 32,
    .row_bits = 15,
    .bank_bits = 3,
   .page_size = 4096,                                                                                         
};

  }

*para这个结构体变量被分配到了.rodata段,并且代码中使用绝对地址来寻址,就是ldr    r3, .L2这一句。

	.cpu arm7tdmi
	.arch armv4t
	.fpu softvfp
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 1
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"main.c"
	.text
	.section	.rodata
	.align	2
.LC0:
	.word	31097
	.word	1789526016
	.short	4096
	.byte	32
	.byte	0
	.byte	15
	.byte	3
	.space	2
	.section	.text.layout_test,"ax",%progbits
	.align	2
	.global	layout_test
	.syntax unified
	.arm
	.type	layout_test, %function
layout_test:
	@ Function supports interworking.
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	ldr	r3, .L2
	sub	ip, fp, #20
	ldm	r3, {r0, r1, r2, r3}
	stm	ip, {r0, r1, r2, r3}
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L3:
	.align	2
.L2:
	.word	.LC0
	.size	layout_test, .-layout_test
	.ident	"GCC: (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)"

在一个函数中声明一个结构体变量,声明后再赋值,这个结构体变量里的值就会以立即数的形式存在.text段中。

void layout_test()
    {
     struct dram_para_t para = {
    .read_delays = 0x00007979,
    .write_delays = 0x6aaa0000,
    .dual_rank = 0,
    .bus_width = 32,
    .row_bits = 15,
    .bank_bits = 3,
  // .page_size = 4096,                                                                                         
};
//声明后赋值
para.page_size=4096;

  }
	.cpu arm7tdmi
	.arch armv4t
	.fpu softvfp
	.eabi_attribute 20, 1
	.eabi_attribute 21, 1
	.eabi_attribute 23, 3
	.eabi_attribute 24, 1
	.eabi_attribute 25, 1
	.eabi_attribute 26, 1
	.eabi_attribute 30, 6
	.eabi_attribute 34, 0
	.eabi_attribute 18, 4
	.file	"main.c"
	.text
	.section	.text.layout_test,"ax",%progbits
	.align	2
	.global	layout_test
	.syntax unified
	.arm
	.type	layout_test, %function
layout_test:
	@ Function supports interworking.
	@ args = 0, pretend = 0, frame = 16
	@ frame_needed = 1, uses_anonymous_args = 0
	@ link register save eliminated.
	str	fp, [sp, #-4]!
	add	fp, sp, #0
	sub	sp, sp, #20
	sub	r3, fp, #20
	mov	r2, #0
	str	r2, [r3]
	str	r2, [r3, #4]
	str	r2, [r3, #8]
	str	r2, [r3, #12]
	ldr	r3, .L2
	str	r3, [fp, #-20]
	ldr	r3, .L2+4
	str	r3, [fp, #-16]
	mov	r3, #32
	strb	r3, [fp, #-10]
	mov	r3, #15
	strb	r3, [fp, #-8]
	mov	r3, #3
	strb	r3, [fp, #-7]
	mov	r3, #4096
	strh	r3, [fp, #-12]	@ movhi
	nop
	add	sp, fp, #0
	@ sp needed
	ldr	fp, [sp], #4
	bx	lr
.L3:
	.align	2
.L2:
	.word	31097
	.word	1789526016
	.size	layout_test, .-layout_test
	.ident	"GCC: (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)"

#3 Cortex M0/M3/M4/M7 » RP2040 PIO驱动并口LCD » 2023-05-15 23:30:52

flex-A
回复: 1

如题,RP2040的PIO提供了一定的灵活性,可以用来扩展接口。这里用来驱动一个ST7789的8bit并口LCD。
* 目前实现了CPU写数据。
* DMA写数据有问题,一是传的数据会少几个,二是源数据指针设置为自增会导致程序卡死。
如果有大佬熟悉RP2040的DMA,还请指点指点:D
#lcd并口原理图
pio-lcd-sch.png
#代码
pio-tft-lcd.zip

#4 Re: 全志 SOC » 全志H616裸机求助 » 2023-03-20 21:48:14

@是我
H616上电后默认是32位模式,需要切换到64位模式去执行你的点灯代码。

#5 Re: 全志 SOC » 全志H616裸机求助 » 2023-02-18 16:58:33

感谢@riturbo,@liuyuedong两位大佬出手相助,这段时间手头H616一直在吃灰,没及时回复。
问题解决了,h616是64位内核,外设寄存器是32位的,操作32位的地址寄存器使用w0 - w30 而不是 x0 - x30。
如下是正确的点灯代码

.global _start
_start:
//led
reset:
	ldr x0,=0x0300B04c
	ldr w1,=0x77177777
	str w1,[x0]
	ldr x0,=0x0300b058
	ldr w1,=0x00002000
	str w1,[x0]
1:
	b 1b
	.space  0x7c

#6 全志 SOC » 全志H616裸机求助 » 2022-10-30 01:32:38

flex-A
回复: 5

各位大佬好,小弟最近想在全志H616(quad cortex-A53)上构建裸机程序,参考uboot和经大佬指点后,实现如下:
1、H616上电后包括BROM运行在arm32模式,需要手动切换到aarch64位模式运行。
2、切换方式是32位模式下写RMR寄存器触发warm reset,warm reset后切换到64位模式,并且跳转到RVBAR寄存器所指的地址运行。
3、32位模式下提前设置RVBAR,然后写RMR触发warm reset。这些指令提前编译成字节码嵌入到64位程序中。

*切换运行模式的代码如下(抠自uboot):
这个代码在32位模式下会触发warn reset,在64位模式下会跳转到reset标志。
0x00020060是代码加上BROM头在SRAM里地址,即第一条指令的地址。

#define CONFIG_SUN50I_GEN_H6

/*
 * Switch into AArch64 if needed.
 * Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source.
 */
	tst     x0, x0                  // this is "b #0x84" in ARM (a litle trick here)
	b       reset
	.space  0x7c

	.word	0xe28f0058	// add     r0, pc, #88
	.word	0xe59f1054	// ldr     r1, [pc, #84]
	.word	0xe0800001	// add     r0, r0, r1
	.word	0xe580d000	// str     sp, [r0]
	.word	0xe580e004	// str     lr, [r0, #4]
	.word	0xe10fe000	// mrs     lr, CPSR
	.word	0xe580e008	// str     lr, [r0, #8]
	.word	0xee11ef10	// mrc     15, 0, lr, cr1, cr0, {0}
	.word	0xe580e00c	// str     lr, [r0, #12]
	.word	0xee1cef10	// mrc     15, 0, lr, cr12, cr0, {0}
	.word	0xe580e010	// str     lr, [r0, #16]

	.word	0xe59f1024	// ldr     r1, [pc, #36] ; 0x170000a0
	.word	0xe59f0024	// ldr     r0, [pc, #36] ; CONFIG_*_TEXT_BASE
	.word	0xe5810000	// str     r0, [r1]
	.word	0xf57ff04f	// dsb     sy
	.word	0xf57ff06f	// isb     sy
	.word	0xee1c0f50	// mrc     15, 0, r0, cr12, cr0, {2} ; RMR
	.word	0xe3800003	// orr     r0, r0, #3
	.word	0xee0c0f50	// mcr     15, 0, r0, cr12, cr0, {2} ; RMR
	.word	0xf57ff06f	// isb     sy
	.word	0xe320f003	// wfi
	.word	0xeafffffd	// b       @wfi
#ifndef CONFIG_SUN50I_GEN_H6
	.word	0x017000a0	// writeable RVBAR mapping address
#else
	.word	0x09010040	// writeable RVBAR mapping address
#endif
.word	0x00020060 //30:	.word	0xffffffff jump to this address when switch to aarch64 sucessfully
#endif

*点灯代码如下(已验证):

.global _start
_start:
//led
reset:
	ldr x0,=0x0300B04c
	ldr x1,=0x77177777
	str x1,[x0]
	ldr x0,=0x0300b058
	ldr x1,=0x00002000
	str x1,[x0]
1:
	b 1b
	.space  0x7c

很简单的代码,现在的问题是它下进去led点不亮。我这边没啥头绪,还请坛里大佬指点指点:D

#7 Cortex M0/M3/M4/M7 » stm32f411 4bit SDIO的问题 » 2022-10-11 22:51:20

flex-A
回复: 0

我用stm32f411ceu6板连接SD卡,当我使用1bit SDIO模式的时候读写正常,但是使用4bit SDIO模式的时候读写报CRC校验错误(SD_DATA_CRC_FAIL )。
同样的代码在f407上就能正常工作,我想问问有没有大佬遇到过这种情况的,难道是f411的SDIO有什么隐藏的问题吗?

#8 Re: Xilinx/Altera/FPGA/CPLD/Verilog » 卡莱克i5接收卡lfe5u-25f 折腾研究 » 2022-10-06 12:52:32

我也整了这个接收卡,淘宝买了个底板,刚点了灯。
lattice的这个LFE5U-25F属ECP5系列
用的工具链如下:
综合:yosys
布局布线:nextpnr-ecp5,这个工具不同的FPGA类型有不同的后缀。
打包:ecppack,这个工具和nextpnr一起安装的
下载:openFPGAloader,也可以用openOCD,但是openOCD需要把bit文件转换为svf,有点麻烦,所以我就直接用openFPGAloader。
下载器:我买的底板上有一个cmsis-dap。

#9 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 开源GUI:slint和dear imgui » 2022-09-18 16:37:08

flex-A
回复: 4

slint:原名SixtyFPS,采用slint标记语言构建界面,开发语言绑定了C++、Rust、JavaScript。
提供的开发工具:
*一个.slint语言的编译器。
*vscode插件,提供语法检查和实时预览。
*一个在线编辑器,无需安装任何东西(源代码)即可试用 .slint 语法。
*.slint脚本实时预览的工具。
*一个实验性的Figma 导入器。

开发流程如下图:
slint develop flow

关于开发者:
Olivier 和 Simon 在 KDE 项目中开始了他们的开源之旅,KDE 项目是流行的 Linux 开源桌面环境。后来,他们在挪威一家名为 Trolltech 的小公司一起工作时认识了 Qt C++ 工具包。在这里,他们在 API 设计、跨平台软件开发和用户界面组件方面获得了宝贵的经验。Simon 继续在 Qt 公司担任 QtQml 引擎的主要开发人员和维护人员,而 Olivier 则共同创立了软件咨询公司Woboq 。多年后,他们现在位于柏林,开始了一个新项目。借助 Slint,他们的目标是让每个人都可以开发用户界面:从 JavaScript、C++ 或 Rust 开发人员一直到 UI/UX 设计师。

界面展示:
打印机:查看在线交互演示
slint print demo


----------------------------------------------------------------
Dear ImGui:一个立即式GUI,GUI本身不维护控件的状态,由开发者来维护。

“给某人一个状态,他们有一天会遇到错误,但教他们如何在两个必须保持同步的不同位置表示状态,他们将一生都有错误。” -ryg
此库可在免费和许可的许可下使用,但需要财务支持以维持其持续改进。除了维护和稳定性之外,还有许多理想的功能尚未添加。如果您的公司正在使用 Dear ImGui,请考虑联系.)

GUI本身只有cpp文件,支持多个渲染后端:
官方维护的后端/绑定(在存储库中):
渲染器:DirectX9、DirectX10、DirectX11、DirectX12、Metal、OpenGL/ES/ES2、SDL_Renderer、Vulkan、WebGPU。
平台:GLFW、SDL2、Win32、Glut、OSX、Android。
框架:Allegro5、Emscripten。

界面展示:
imgui demo1
imgui demo2

有扩展组件,Implot是一个绘图用的组件:
implot demo1
implot demo2

#10 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 【提问】原理图捕获程序需要的技术细节 » 2022-08-28 01:08:54

flex-A
回复: 0

如题,小弟想实现一个原理图输入到导出.cir网表文件的工具,但是不知道该如何下手,不知道该学啥,还请各位大佬给指点个方向。

#11 Re: Cortex M0/M3/M4/M7 » 使用STM32制作的USB声卡,带频谱显示 » 2022-04-08 19:31:54

海石生风 说:

不错,我以前也做过输入的是模拟信号的,但一加采样外放音质就变差,而且如果输入信号的音量一变频谱就变形,所以一直想做个直接输入数字信号的。

看频谱效果,没有按倍频程来区分频段?

是的,没有区分频段。有试过做对数频谱,但是就变得没这么流畅。直接在模拟输出线路上采确实会影响音质,wm8978有两路输出,一路耳机,另一路喇叭正好拿来做采样。

#12 Cortex M0/M3/M4/M7 » 使用STM32制作的USB声卡,带频谱显示 » 2022-04-08 15:27:36

flex-A
回复: 7

如题,stm32使用的stm32f411,DAC使用的wm8978,带一个tpa6138a2耳放。
*带一个LCD,用来显示花里胡哨的频谱。
*Kicad绘制的4层板,白嫖嘉立创
*文件:stm32f411USBAudio_v2.zip
*PCB预览
st_usbAudioV1_demo.png
*演示

*输出部分耳放按数据手册接成了一个多重反馈低通滤波器
outputfilter.png

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

armstrong 说:

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

是一个单独的C可执行程序

#14 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » GUI前端与C后端多线程的问题 » 2022-03-21 22:28:31

flex-A
回复: 3

如题,我有一个C#写的GUI前端,和一个用来执行具体操作的C写的后端,现在想在多线程里运行这两个程序。请问各位大佬我该怎么做呢?

#16 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » NUTTX上手试用,最大的感受是不方便 » 2021-12-08 20:47:39

flex-A
回复: 2

小弟抱着好奇的心态上手了nuttx,一款apache旗下的嵌入式操作系统,看特性还是很诱人的。
在stm32上尝了下鲜,发现除了demo外什么都做不到,国内资料少得可怜,官方网站上的记录又摩棱两可。
驱动方面还没找到方法用ST的库来写,老麻烦了感觉。

#17 Cortex M0/M3/M4/M7 » openOCD直接下载程序到stm32h750外部flash » 2021-11-22 21:03:32

flex-A
回复: 1

如题,可以使用openOCD直接下载程序到stm32h750外接的flash中
--------------------------------------------------
原理:
openOCD原生有针对QSPI的驱动程序stmqspi,能直接操作QSPI,但需要用户先初始化QSPI和flash
-------------------------------------------------
* stm32h750的核心板,外接一片W25Q64
* 内部128KB负责初始化QSPI和W25Q64,只需要能实现正常读写就成,暂时不需要内存映射

* 操作步骤
1、编写QSPI和W25Q64的初始化程序,下载到stm32h750内部128K flash中。
2、修改stm32h7x.cfg文件,只需要在开头source包含语句后添加“set QUADSPI 1”这一句就行
c01.png

3、启动openocd、tenlet连接它,halt后执行flash list就能看到外部flash驱动已经挂载了
c02.png

4、执行flash info 1就能看到openocd自动识别出w25q64的型号和容量
c03.png


5、执行flash write_image erase led.bin 0x90000000将led.bin直接下载到w25q64
c04.png

#19 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 怎么就管不住这买板子的手 » 2021-09-17 01:36:56

flex-A
回复: 19

看到漂亮的开发板就想买,买回来点个灯就放一边。愁死个人=-=

#20 全志 SOC » 【V3S】裸机framebuffer » 2021-08-11 17:18:32

flex-A
回复: 4

*裸机实现framebuffer点亮RGB屏,我这边测试用的是480*272的屏
*感谢xboot贡献的代码
*未开启cache和DMA
*ubuntu平台,下载到flash运行
*编译:make clean && make
  下载:make write

*v3s_framebuffer.zip

#21 NXP i.MX6UL/6ULL » 【IMX6ULL】SDK裸机开发模板,通过USB下载程序到DDR运行 » 2021-08-01 00:22:38

flex-A
回复: 0

*imx6ull裸机开发模板,ubuntu平台,使用NXP官方SDK构建
*通过USB下载到DDR运行,不用频繁烧录SD卡
*该模板仅初始化了UART1,使用arm-gcc库中自带的printf打印信息

*.bin->.imx:Tool目录下的imxmake工具,提供源码
*PC端下载工具:uuu,源码见NXP官方github
*如果修改了.ld文件中的链接地址,务必的修改imxmake.c文件中的ADDR_ENTRY,否则会导致程序加载到错误的地址,无法运行或出玄学:)

*关于设置USB启动,可通过开发板上的跳线设置,或者SD卡启动方式下拔出SD卡,SD卡启动失败会切换到USB启动模式

*文件:imx6ul_noneOS_template.zip

#23 Re: NXP i.MX6UL/6ULL » [提问帖]关于arm-gcc链接脚本指定ENTRY的问题 » 2021-07-28 22:37:00

通过下图的方法明确指定文件链接的顺序是可以在期望的地址得到正确的函数的
tempsnip.jpg

#24 Re: NXP i.MX6UL/6ULL » [提问帖]关于arm-gcc链接脚本指定ENTRY的问题 » 2021-07-26 23:50:24

哇酷小二 说:

楼主方便发一个完整的压缩包吗?

工程文件已经上传了:D

#25 NXP i.MX6UL/6ULL » [提问帖]关于arm-gcc链接脚本指定ENTRY的问题 » 2021-07-26 23:10:39

flex-A
回复: 7

小弟在.ld文件中使用ENTY命令指定起始地址为Reset_Handler,但是链接出的.elf文件对应地址上的函数却不是Reset_Handler。
各文件详情:
-->.ld文件,文件中指定了ENTRY(Reset_Handler),并且.text段的起始地址设定为0x80002000

/* Entry Point */
ENTRY(Reset_Handler)

HEAP_SIZE   = DEFINED(__heap_size__)           ? __heap_size__          : 0x0400;
ISTACK_SIZE = DEFINED(__irq_stack_size__)      ? __irq_stack_size__     : 0x0400;
CSTACK_SIZE = DEFINED(__stack_size__)          ? __stack_size__         : 0x0400;
RSTACK_SIZE = DEFINED(__resume_stack_size__)   ? __resume_stack_size__  : 0x0400;

/* Specify the memory areas */
*/
MEMORY
{
  m_ocram               (RWX)  : ORIGIN = 0x00900000, LENGTH = 0x00020000
  m_interrupts          (RX)   : ORIGIN = 0x803FFFC0, LENGTH = 0x00000040
  m_text                (RX)   : ORIGIN = 0x80002000, LENGTH = 0x003FDFC0
  m_data                (RW)   : ORIGIN = 0x80400000, LENGTH = 0x00400000
}

/* Define output sections */
SECTIONS
{
  /* The startup code goes first into DDR RAM */
  .interrupts :
  {
    __VECTOR_TABLE = .;
    . = ALIGN(4);
    KEEP(*(.isr_vector))     /* Startup code */
    . = ALIGN(4);
  } > m_interrupts

  /* The program code and other data goes into DDR RAM */
  .text :
  {
    . = ALIGN(4);
    *(.text)                 /* .text sections (code) */
    *(.text*)                /* .text* sections (code) */
    *(.rodata)               /* .rodata sections (constants, strings, etc.) */
    *(.rodata*)              /* .rodata* sections (constants, strings, etc.) */
    *(.glue_7)               /* glue arm to thumb code */
    *(.glue_7t)              /* glue thumb to arm code */
    *(.eh_frame)
    KEEP (*(.init))
    KEEP (*(.fini))
    . = ALIGN(4);
  } > m_text

  .ARM.extab :
  {
    *(.ARM.extab* .gnu.linkonce.armextab.*)
  } > m_text

--> startup.s,该文件中定义了Reset_Handler函数,并且指定它在.text段

   .text
    .arm

/* Reset Handler */

    .arm
    .align 2
    .globl   Reset_Handler
    .weak    Reset_Handler
    .type    Reset_Handler, %function
Reset_Handler:
    cpsid   i               /* Mask interrupts */

    /* Reset SCTlr Settings */
    mrc     p15, 0, r0, c1, c0, 0     /* Read CP15 System Control register                  */
    bic     r0,  r0, #(0x1 << 12)     /* Clear I bit 12 to disable I Cache                  */
    bic     r0,  r0, #(0x1 <<  2)     /* Clear C bit  2 to disable D Cache                  */
    bic     r0,  r0, #0x2             /* Clear A bit  1 to disable strict alignment         */
    bic     r0,  r0, #(0x1 << 11)     /* Clear Z bit 11 to disable branch prediction        */
    bic     r0,  r0, #0x1             /* Clear M bit  0 to disable MMU                      */
    mcr     p15, 0, r0, c1, c0, 0     /* Write value back to CP15 System Control register   */

-->最终反编译出的结果

Disassembly of section .text:

80002000 <__do_global_dtors_aux>:
80002000:	b510      	push	{r4, lr}
80002002:	f240 046c 	movw	r4, #108	; 0x6c
80002006:	f2c8 0440 	movt	r4, #32832	; 0x8040
8000200a:	7823      	ldrb	r3, [r4, #0]

发现0x80002000地址上的函数却不是Reset_Handler,有熟悉链接脚本的大佬可以指点下小弟吗。
完整工程文件:imx6_template.zip
这是一个imx6ull的裸机工程,目前是使用NXP官方SDK来设置C语言环境,进入main点灯。

#26 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2021-07-03 00:28:21

sunxiang 说:

v3s的裸机是不是只能在DDR里面跑呀,应该不能在SPI_FLASH中跑吧,毕竟解析速度不够?

程序是被搬到DDR里再运行的,V3S没法像STM32那样直接在FLASH里运行

#27 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 运行main前到底经历了什么?【瞎折腾系列】 » 2021-04-15 13:57:01

flex-A
回复: 1

小弟实现了个内存管理的库,叫memfox smile,用memfox替换系统自带的malloc函数时发生了一个有意思的现象。
测试场景:
*minGW-GCC
*用memfox替换掉malloc的实现

 void *malloc(size_t size)
{
	if(size<1024)
		printf("memfox malloc:%dB\n",size);
	else
		printf("memfox malloc:%dKB\n",size>>10);

	return memfox_malloc(size);
}

void free(void *ptr)
{
	uint8_t *p=(uint8_t*)ptr;

	printf("memfox free @ 0x%X ",ptr);
	if((membuf<=p)&&(p<(membuf+1024*1024)))
		memfox_free(ptr);
	else
	{
		printf("[out of range]\n");
		ptr=NULL;
	}
		
}

*定义一个大数组membuf并交给memfox管理

uint8_t membuf[1024*1024];

int main(int argc, char *argv[])
{
        uint8_t *InputBuffer;
//memfox
	printf("->");
	memfox_init(membuf,1024*1024);
	printf("memfox init @ 0x%X\n",membuf);
//memfox test
        InputBuffer=(uint8_t*)malloc(4096);
        free(InputBuffer);
        return 0;
}

运行结果:
memfox.jpg

为啥程序会在main调用malloc之前,甚至memfox初始化之前申请了2个4B的空间?

#28 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-29 20:43:38

家猫戏很足 说:

这个编译需要使用什么环境呢

系统:ubuntu,编译:arm-linux-guneabihf-或arm-none-eabi,下载:sunxi-fel
工程里自带v3s版的sunxi-fel工具。有一个arm-gcc,这个属失误,可以把arm-gcc删了,减小体积。

#29 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-15 17:36:38

lxl_wc_regi 说:

楼主, 执行这个 make write 命令就下载进去了吗?需要用串口线跟开发板相接吧

连接荔枝派zero到电脑,荔枝派进到FEL模式,然后make write

#30 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-15 15:47:22

kesion 说:

期待楼主发多几份这些裸机程序,太给力,和STM32的差别大吗?

裸机的话没有stm32那样详尽的库,基本只有一份数据手册和xboot这样的参考。算是一步一个坑。

#31 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-14 17:03:48

staunchheart 说:

晕哥掏了血本呀,这个182M,流量费不小哦。
去掉里面的GCC,加个链接好些。

你这么一说我才发现里面还藏了个GCC,去掉GCC压缩只有1.6M,是我疏忽了。下次上传前再仔细检查检查。

#32 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-13 18:31:24

flex-A
回复: 32

*从xboot抠的启动文件和编译选项,感谢XBOOT大佬贡献的代码
*裸机启动,包括串口0初始化、时钟初始化、内部DRAM初始化并启动到main().
*工程包含了v3s版的sunxi-fel工具
*由于我对ld脚本并不是很熟悉,在这上面花了不少时间找问题:)
*工程源码:(.zip上传失败,放网盘链接)链接: https://pan.baidu.com/s/18E3WTeRR0BuBnaxPEEp1EA   提取码: f3dm

======================================
#编译步骤-在linux平台完成
1、解压源码,修改Makefile中的编译器
01.png

2、进入tools/mksunxi目录执行make命令
3、在工程目录执行make编译
4、make write下载,复位运行应该能看到串口输出的信息
02.png

======================================
另外还想请教各位大佬一个问题:在sys-dram.c中声明了一个结构体变量,在声明的同时赋值,但是这样cpu就不知道跑哪去了,改成下面这样就好了
03.png
但page_size放外面赋值总觉得有点刺挠:),想问问各位大佬有啥解决办法吗。

#33 Re: 全志 SOC » [求助帖]V3S-sunxi-fel读不了flash信息 » 2020-06-25 00:08:04

羽剑天涯 说:

你可以让cpu重新进入一下usb模式。我之前在uboot ram调试时,也出现过,重新让cpu进入一下usb模式后,就又可以了。

还是不行,一检测flash信息就卡死,我再重新买一块测试下。看看是不是我不小心把哪打坏了。

#34 全志 SOC » [求助帖]V3S-sunxi-fel读不了flash信息 » 2020-06-23 16:09:02

flex-A
回复: 2

我在荔枝派zero上焊了块W25Q128,结果使用sunxi-fel工具读取flash信息显示超时。也下载不了固件,有老哥遇到过这种情况吗?
error.jpg

#37 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 求图片解码库 » 2020-05-21 12:33:03

ntmusic 说:

硬解可移植性差,软解有很多方案:
JPG:libjpeg、tjpgd
PNG:libpng、lodepng
JPG, PNG, TGA, BMP, PSD, GIF, HDR, PIC:stb_image

mark,之前只用过tipgd,fatfs作者写的,没想到还有这么多。

#38 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 求推荐电容触摸控制芯片 » 2020-05-11 10:36:09

pajoke 说:

楼主找到了没有?能不能分享下。

上面老哥提到的和泰的bs8116-3你可以看看。

#39 Re: 全志 SOC » F1C100S裸跑Fatfs » 2020-05-08 16:08:06

wukenaihe 说:

楼主,你有没有初始化过小于2G的内存卡。我初始化512MB的TF卡时,对cmd8有响应,对acmd41一直没有响应。同样的代码初始化2G的卡就可以成功。

没有,我手头最小2G的。可能初始化流程不一样。

#40 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 求推荐电容触摸控制芯片 » 2020-05-06 21:39:11

illusion 说:

要不你试试和泰家的?hotek bs8116-3 我觉得还不错,至于停没停产不晓得。。

好的,我去看看

#41 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 求推荐电容触摸控制芯片 » 2020-05-05 01:18:14

flex-A
回复: 12

之前逛淘宝看到nxp有一款电容按键控制芯片MPR121,12通道独立电容式触摸板应用芯片。买回来试了试感觉还可以,但是NXP官网显示已经停产了,搜来搜去也没看到其他类似的产品。有了解的大佬能推荐几款功能和MPR121类似的芯片吗。

mpr12103.png
mpr12102.jpg
mpr12101.jpg

#42 Re: 全志 SOC » F1C100S裸跑Fatfs » 2020-04-21 13:11:39

wukenaihe 说:

你好,我是新手,会单片机,想通过F1C100S学习RAM9的裸机开发。我想知道“达克罗德大佬贡献的裸机代码”是在什么环境编译,调试以及下载的。有没有这方面的教程可以推荐一下,十分感谢!

我是在ubuntu下开发的,装了arm-xxx-gcc的编译环境
编译和烧录见这个帖子:https://whycan.cn/t_1393.html
这芯片全志官方公开放出的资料比较少,我是照着RT-Thread和寄存器手册一点一点扣的

#43 Re: 全志 SOC » F1C100S裸跑Fatfs » 2020-04-21 09:20:42

伍零壹 说:

可以识别Emmc么?如果可以识别Emmc就爽了!

目前只支持SD卡,nano只有个TF卡座,我手头也只有TF卡。

#44 全志 SOC » F1C100S裸跑Fatfs » 2020-04-20 21:20:23

flex-A
回复: 21

SDIO驱动又来了,这次带着Fatfs一起来了!

p:仍然要感谢达克罗德大佬贡献的裸机代码


*描述
1、支持DMA、CPU读写,支持单块,多块读写
2、支持printf
3、支持定时器延时
4、支持SDHC识别,读写,挂载文件系统
5、支持SDSC识别读写,但无法挂载文件系统(坑)

*计划完成
1、SDSC文件系统挂载
2、优化代码结构


*SDHC卡识别,挂载文件系统,读取文件示例
figlet.jpg


*代码有些地方不是很优美,比如下面这样 =_=

//must delay :)
sd_delay(30);//<<

return err;

*程序还存在一些玄学问题,比如写到卡里的数据会丢失(SDSC),仍有待完善。

*想先放一放SDIO的驱动,玩点其它的,这几天看SD卡协议和输出数据看的头凉 =_=
03sdio.zip

#45 全志 SOC » f1c100s的裸机SDIO驱动 » 2020-04-17 13:49:59

flex-A
回复: 24

从RT-Thread扣过来的SDIO初始化代码,参考野火的SD卡初始化代码,实现SD卡初始化和单块读写数据
描述:
1、基础工程是达克罗德大神的裸机程序,编译和烧写见此贴: https://whycan.cn/t_1393.html
2、暂时只支持SDHCI。因为我调试的时候用的一张32GB的卡,小容量卡无法正常识别
3、添加了xprintf组件(Fatfs作者写的),方便串口输出调试信息。
4、暂时只支持通过CPU读写。

计划添加:
1、小容量卡的识别和初始化功能
2、通过DMA读写数据
3、完善SD卡操作函数
4、重构部分代码。


*卡信息输出

main->card block size:512
main->card size:30436MB
SD ID:0x00000003
SD name1:0x53433332
SD name2:0x00000047
SD rev:0x00000080
SD SN:0xB006289D
SD type:0x2

*读取数据块
read.jpg
*代码写得不是很好,但希望能起到抛砖引玉的作用:D
sdio.zip

#47 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » fft又来了,这次更简单,代码才30行 » 2020-03-31 10:51:56

请问有大佬测试过这个代码吗,我自己写的的计算出来全是0

int main()
{
	double x[16],y[16];
	int i=0;
	for(i=0;i<16;i++)
	{
		y[i]=0;
		x[i]=0;
	}
	x[0]=1.0;
	x[1]=1.0;
	double dx[16]={0},dy[16]={0};

	fft(x,y,dx,dy,4);
	for (i = 0; i < 16; i++) {
        printf((const char*)"dat[%d] = %f + %f * i\n", i, dx[i], dy[i]);
    }
	return 0;
}

页脚

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

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