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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

4 Q( V6 f3 v2 x# `; p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, v+ t9 n  x1 O1 B8 W% q( b
/ }3 s5 I% s; M& K* m# o其他程序段。。。。。9 t, |+ }3 b) y0 b- e1 s
. R# j+ y* R) o: V
   free(x_d);" a# F. U9 f6 V. N  @+ L

5 i& P/ k4 M: M$ M7 F/ b使用DSP侧单独调试功能,验证动态申请没有问题,
' J. k  L2 o* T' x" i# C3 \( u/ x3 m& m% `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 O* r- O3 h$ q9 Q8 L3 W3 K! c

  [7 G* P4 t" a0 d& M. e( u( G* I7 {* o* W( [

; ~/ P0 e% f. Z& [! w+ M4 V/ e1 ?+ \1 Z* v6 i/ K% i. N

1 w4 I- p) F! q  E9 U' a% k
0 ~/ C6 s' T# _
; e3 z* k! n1 I2 H; @
2 p& k7 z/ Z1 t1 [. y
# X- Z" t3 V3 _( f$ ^: s4 F4 _! a+ s  E; y& }" N! G/ U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) t; v! d% v) E% A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 Y2 W$ O  d* l; I/ `) a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" c& }% t' u4 a' i2 Y5 z
" M$ F/ k5 }, r6 ]/ m4 R8 m
是不是需要在DSP.CFG中进行配置8 H2 U1 p& U) i1 {4 I3 q4 Y" G
我现在的配置为
& {( B1 ]  ~/ t0 }# z
& {0 Y4 B1 U: |% F# F. D0 \/*% X& P# X5 {5 P# o' A/ Y
*  ======== Operating System Configuration ========2 b5 T  h1 N5 S  b' J$ Y
*/8 W* a( _& D6 ^" ]& M) a' G- Z3 x

0 X8 ?5 b6 H0 @, O/* no rts heap */8 N& x. _( S( C$ H
Program.heap = 0;/ a% B0 S7 }1 C/ g
Program.argSize = 100;  /* minimum size */$ R* C0 r: g+ |: }: D. I$ V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ e) O7 q' a" e. C, G/ w- V
+ W  N/ z  B9 K$ R: M  R/* create a default heap */  T( u, z# Z! ?# h! r! p* Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& H9 d1 b! @- p7 Avar heapMemParams = new HeapMem.Params();' k+ T' q% D: m9 \, c8 a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' a) `8 j3 Y# q* ]; C, |3 R# Z
) B3 V0 u# Z4 H
var Memory = xdc.useModule('xdc.runtime.Memory');
  s3 W* x' l$ g8 b6 L& `- A2 tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 q$ y! A* ]1 w; }! [3 [: o4 H" D9 G- x' A# @
/* configure System module */; r5 y* ?% X) o$ k5 d6 ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 L$ D; m  {. L) _% kSysMin.bufSize = 0x1000;
3 u( N4 ?6 Y0 vSysMin.flushAtExit = false;
+ Q2 ^9 U8 U4 f5 H8 V& N8 H4 p4 Q! y3 ~$ y
var System = xdc.useModule('xdc.runtime.System');
" z9 E1 X7 g' J! n9 o1 vSystem.SupportProxy = SysMin;
1 k& j' y4 u8 L
  `' X# W- I# N' X' H  c% U/* configure SysBios to use the lower half of Timer 1 */( z1 i. Q% h0 E! u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- L  X  I1 T$ m. r$ b0 p$ Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 q# ^3 ]* M9 l; X* {! YTimer.timerSettings[1].master = true;% j0 f& S7 c- x5 R2 e5 V; H
Timer.defaultHalf = Timer.Half_LOWER;9 L$ F2 `- P5 y, X7 D0 U7 P* Q
Clock.timerId = 1;
5 o) w6 ?3 O3 L6 s4 V0 @9 @0 o% P# X8 s/ L
$ c- \+ t' W3 w
/*
2 \7 S, j: I) u8 ^ *  ======== Miscellaneous Configuration ========$ [0 \) C1 b3 |' Z, e3 M
*/! B5 Q  `) C2 z3 O1 }
6 v. w# r) o- \+ q" h& D
/* set default diags mask */3 q- W1 a# O/ f- O% y7 {) }+ {
var Diags = xdc.useModule('xdc.runtime.Diags');" g' W3 o2 ?4 x3 r. X; w' d
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 Y$ {. e5 e$ ~  u! w' T& w9 _. Z
3 ~8 `0 S9 W- _) r3 @$ F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, e6 L2 m1 E1 X- f% X; s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 r; ]% i# A8 }) zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; ?+ P+ t8 W/ o8 A3 k4 y& wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 H, [3 P6 B7 e, aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! Y' \2 c8 {7 A! K5 X0 E% iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 f+ o& o6 ]! m$ d. D2 i3 v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 I/ v( Y5 r3 t3 l8 j. |" }Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- O% Q9 U. f5 C& V6 e  b& B6 M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 D+ v0 d* T; B1 n$ G, o0 C! LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ u1 s% {( L  O* e% Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 h  w% I# M  |6 F% ]! KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 P! T/ ]: V: \1 E. mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 v# X9 U8 Y2 R! U. aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 ^' J  A" V4 {0 s2 b

- F1 ?" `/ K4 T3 e2 a6 M2 Y! J/* override diags mask for selected modules */( @; B+ L0 ]& v0 ]7 P  _
xdc.useModule('xdc.runtime.Main');
# _4 j$ B" ?! I! _2 nDiags.setMaskMeta(7 U1 h. ?( u6 [/ b: `
    "xdc.runtime.Main",
: c6 x! G# o/ d) q    Diags.ENTRY | Diags.EXIT | Diags.INFO,' t. U3 y( F- ]. |& Z
    Diags.RUNTIME_ON
! r# q8 z4 G4 l; t% x; \);
- t/ K* ^3 `$ ^! ~2 p/ s. `0 O
. v* u$ t/ }( _8 zvar Registry = xdc.useModule('xdc.runtime.Registry');- N7 u; V/ S  I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. X. n% T4 s, p( g8 C8 j1 @% lRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' t' ~8 q) M2 y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& r5 I& ?6 |. i2 }- N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 z8 s/ X5 S* y3 x% U

( s: Q3 x* M6 D! I) v+ X5 j7 X/* create a logger instance */
8 A# ]3 r7 B( B& x4 J( r5 r0 l! A9 bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( h6 e4 ?7 b1 pvar loggerBufP = new LoggerBuf.Params();$ A+ o: V, L' _4 V) a  J/ X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- n  W; c# O) X7 n  ?* ?4 S5 kloggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 p; X2 c1 v7 _; J% |! O3 U( K. S6 c! |7 q
var appLogger = LoggerBuf.create(loggerBufP);1 B4 m4 P! h8 u- Y: S
appLogger.instance.name = "AppLog_Core1";
& V0 _. b; l( yDefaults.common$.logger = appLogger;
: e6 W- b, o5 l! j: ZMemory.defaultHeapSize = 0x8192;    8 L- e8 t# s4 z  Y8 H
Idle.idleFxns[0] = "&LEDStatus";
/ R2 ~/ D) f" Z# T6 \+ HCache.initSize.l2Size = Cache.L2Size_32K;' D# l9 T/ G1 E8 T4 A

. {" T% i, q- o% _) f
回复 支持 反对

使用道具 举报

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 */( T" K4 O# p2 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 D5 k3 u0 f0 J( E) `var heapMemParams = new HeapMem.Params();* b/ H5 K. \1 X4 A
heapMemParams.size = 0x4000;1 t$ B. n. X& T% j

1 S5 M; B3 R" |* pvar Memory = xdc.useModule('xdc.runtime.Memory');, o- Q+ V- d! z; D8 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ a0 w: W9 |! h& I5 _5 Q& t9 ?; ^; L3 h
我大约calloc  每次共计大小为5K*16bits,1 L8 ]! g8 a4 S  C* z: J
而默认配置才0x4000、需要改大。) P9 i2 o7 z# L: S! ?5 m

8 O; Q9 L' \2 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( m1 }$ B0 }- H% d; |Program.heap = 0;& k9 q1 @" y' u( T2 U1 H! q
Program.argSize = 100;  /* minimum size */* A3 K, U+ F* _+ t" [
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 13:20 , Processed in 0.042231 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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