关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7347|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 ?, O* c4 h# W5 ^+ Y1 L

* d& u0 d7 K  E1 k+ ^. J    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 {; |. ?) ^. D# w4 N
5 R9 F$ w; b$ i  E其他程序段。。。。。
* L( \. {, B! l  S7 F2 l$ w ' W+ `# u/ {' \
   free(x_d);. W4 T8 e8 f. o7 n% O

. i. W6 z! ?1 w使用DSP侧单独调试功能,验证动态申请没有问题,
: K7 G1 u7 K' ?! H4 t9 Z
" z+ O( z; T4 K8 k7 F6 ?8 P) h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 i% H/ F3 R! b' M* r# s
6 B' P. D1 _. \
; U1 `6 U: L& g! X& {2 i

! g3 S; ?) k: m/ B9 v- s
, i! l1 |( a0 t& k0 {" a0 s" X0 G; E2 p4 Z- o; S

! ]) d7 \7 S5 O" C) J3 U
' T: O0 m0 `% i/ X5 a, p" t. ?  E, ?! a3 g

6 _6 L1 I; C1 h( k/ `! Y0 Q) g( w" @9 M6 n1 e  v4 @( }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ Z  H  q9 ~; s. ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" B$ [, V- X$ T
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( t4 t+ p* R+ u
4 O: v1 F3 R  w9 a! W, J
是不是需要在DSP.CFG中进行配置1 T- a% U" ~. `8 ]
我现在的配置为
: ~" a: T' F; [( ], P# K4 }( _! F, Y$ ]- b8 H
/*2 M: s* y  u6 i
*  ======== Operating System Configuration ========% B- M( p* T6 h9 I# s' ~+ O
*/) S- y1 j, \$ b: r, R4 h$ c# x

) f0 ]7 z6 x6 j/* no rts heap */
' {4 i* w/ d1 G, M2 H) J- c* j/ mProgram.heap = 0;$ T% u8 i, c9 G# G7 N. I! ?
Program.argSize = 100;  /* minimum size */$ h2 S' r1 c" b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* B6 v; d" t( t4 ]& e2 [  _3 {" ?  w' \. A2 |6 F4 J) m* c
/* create a default heap */- y6 t$ @$ N) b5 A. C. ]# W! ]
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ x! }; G7 ]2 O
var heapMemParams = new HeapMem.Params();8 z# }9 C: k2 k9 G2 f9 L6 r& n* a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: U2 O4 {0 o1 l: e. H$ r& j" n+ `! D0 S0 W* Z- K* I' _
var Memory = xdc.useModule('xdc.runtime.Memory');+ k) `7 k, w2 X: X  q9 h) U5 P5 x+ u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( v2 k3 E+ `4 H6 X

6 a. {5 A# Q. a/* configure System module */
! Y3 t2 s' Q' `: o0 q$ vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 i0 W% X- Y0 Q' ^SysMin.bufSize = 0x1000;( e. ~# F% R# q4 h
SysMin.flushAtExit = false;0 S* y: K3 d4 y) s8 `0 T$ f

+ C7 _% {( k4 ]$ l+ x1 v& }% c& uvar System = xdc.useModule('xdc.runtime.System');- f2 ^0 S! X2 M. j% ~
System.SupportProxy = SysMin;
9 P% k+ d$ K6 B" t, `' R  f5 B2 J* ?) ^5 Y: g% C, X4 V
/* configure SysBios to use the lower half of Timer 1 */- @& l) c4 y3 Z3 l$ K6 G8 j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" `9 [) \1 Q7 m: W/ I6 Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- A5 M( m9 ]& T3 {; G1 i4 `0 [Timer.timerSettings[1].master = true;3 B! Y  m$ M$ @
Timer.defaultHalf = Timer.Half_LOWER;/ V0 f5 l. `5 }# {* d
Clock.timerId = 1;9 N/ _1 o; q: @* N3 g$ Y% c

# {$ S8 S- S; _8 f
" X7 }/ v  s9 g, h! |( `/ n/*
% @, `1 A; I9 L: J6 }$ l *  ======== Miscellaneous Configuration ========
; F$ j  y! q% H! I+ l6 ? */
! S; {' ^% A$ A9 r, Z2 H, f% w2 D( k0 J! ^, ~( H4 J: q" t
/* set default diags mask */
3 H$ {- k0 m) C. B+ e8 Hvar Diags = xdc.useModule('xdc.runtime.Diags');( Z' h# e/ S4 j6 h' N' A7 }$ H4 ^' b# d
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& r) [' i  R& i. U4 b& A
2 M& ?' Q/ y1 P# ]& ^' J0 D' FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 \  w. E' r- ]% e! b" k3 MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 t7 B5 p7 Q! Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  B/ e/ h8 f' L* A. J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ Y6 X# T% @1 b9 x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! ~$ m4 l6 I2 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 l' }' c: t9 l* f. [: i; _5 r: ]# qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# W; {+ k; ~9 F7 Z; BDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* L% p+ h5 J. G, P; l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 R) A9 {4 ^2 X) g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" d( K- g- H/ O2 bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, U6 Y! A. W9 |$ E6 M& d+ B. S) pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 C! i% u$ V& E$ ~5 U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 g( U. l1 x% E8 t, IDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: m: Z% Q; ~# s  R8 q' ^+ F
- H3 L% Y4 c: T! {/* override diags mask for selected modules */
8 m- ?7 w: P. Exdc.useModule('xdc.runtime.Main');
7 U/ T( H# O+ X: b" Q% ?! VDiags.setMaskMeta(
! c' Q  \' k, t9 ]2 Y    "xdc.runtime.Main",
/ l7 N3 ^" q- T% ]# {4 Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 Z, b7 G2 d! u1 o6 O$ R    Diags.RUNTIME_ON/ e- ]- J: O" g4 A7 L& L( N( G) U. T
);
& u& l- \: W6 R6 A( M9 R' [
8 d* g/ w: y1 j6 m) z; L! H9 Avar Registry = xdc.useModule('xdc.runtime.Registry');
( @% W, i1 s$ Q' J& DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 ]) V$ G) D5 \. D# b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! s# [$ L  e" ]( `: s& n. X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ I0 q* E: _$ i# j$ ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- u; ?: m8 c0 A7 ^7 E; ?! X& o/ P, O+ E7 ?3 B1 |
/* create a logger instance */% [: J1 E! u4 R; F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' U! r* |) {$ t( O# gvar loggerBufP = new LoggerBuf.Params();
# e& p6 y, Q$ V+ z7 n- NloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, u- G0 Y$ u1 u' }3 WloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 k# G" _' g, u5 r% ~. l5 W6 f, P1 R6 E; L$ w4 N4 @  F% u* A7 H
var appLogger = LoggerBuf.create(loggerBufP);8 @& @8 c% ~6 ~0 y$ q# `
appLogger.instance.name = "AppLog_Core1";
3 i, C. ]* Y' V5 _, x, S2 JDefaults.common$.logger = appLogger;" E4 C) c) B1 m5 g/ D' J( \
Memory.defaultHeapSize = 0x8192;   
1 D* `! Z7 E, v, S1 ?: DIdle.idleFxns[0] = "&LEDStatus";( W" H7 S& v8 n
Cache.initSize.l2Size = Cache.L2Size_32K;
2 A# G8 N" o/ z; }8 Y
/ x: c- k* h- y4 z5 c. `! ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */, N9 G7 E" p$ A4 Q- L7 t. S3 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; e! @$ d7 m1 Q6 N8 d7 m
var heapMemParams = new HeapMem.Params();! J5 g) Y9 ~/ W" r
heapMemParams.size = 0x4000;
9 q  o2 M5 X( [) ]* Y" j
2 J9 Q3 B  h! T; m: D& Jvar Memory = xdc.useModule('xdc.runtime.Memory');
$ n- ^! K2 N% g7 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 y$ J& |  m, J/ L. J. m8 R
% `5 ^: l1 G1 ~* l4 C) l. \
我大约calloc  每次共计大小为5K*16bits,. D* A3 {5 u$ o- K  [
而默认配置才0x4000、需要改大。
/ B4 z/ K1 g" h: N4 X4 O1 m5 d) s+ U- `/ d5 j7 V/ U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* t% e$ O0 m& qProgram.heap = 0;
0 K% `7 K3 ?" C5 F7 SProgram.argSize = 100;  /* minimum size */
# _, ]! n6 P$ I' @# Z/ pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-19 01:52 , Processed in 0.043965 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表