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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ K7 l( F- |; n$ E% D- ?( {* u: h8 K1 C, K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ G" o, I& H( Y5 }  |2 E

, V$ N9 _6 v& T8 w6 `其他程序段。。。。。3 ]; T% S% |% b7 O. C

# e& _/ G! i- b   free(x_d);* X6 z4 E' L$ U4 ?7 e* E

) h0 i: R0 k) {使用DSP侧单独调试功能,验证动态申请没有问题,
3 G& s! ~; f! }4 [% \# ]
9 s. j1 o$ j6 ^7 K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; X! b7 n- s" P& V/ ]

  ~0 b8 W: @( s+ [1 @, ?2 G
& R0 _+ a; E7 y" G* d' f8 s+ w" j( F4 K) n8 Z- j" W3 x  Y8 `

4 J, R' p& ~' W) V
8 P# G" a' P- a3 I
0 y: _8 R+ |0 n1 R2 n* }+ j5 g- f% t) M3 u. S" U  \% I& b

7 R# B  P2 ~9 B
$ y" A8 G, _* Y" ~. s8 z  Z6 k% j
/ l" v' g) d) W0 r  \" l! e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: ]: x& Q3 n$ a7 _5 f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! i, k6 t% p. o( y" @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); |9 ~5 ^8 `5 o, \7 q
! ^0 U6 q7 S6 D/ r' K. R% r8 r
是不是需要在DSP.CFG中进行配置" O: ^, M4 }+ L0 G" [
我现在的配置为7 l* C# D, z# d$ ]  j% v1 ^3 B
9 x: t" t+ A/ G9 _4 ~8 W" w) _
/*4 y) D3 Q# \* n! E8 O
*  ======== Operating System Configuration ========; J1 x* T' a/ ?
*/
6 _+ M( |: ~( S# T* x5 g. w3 |: m3 Z0 n$ `! n
/* no rts heap */5 Q5 ^: Q* j: l8 r
Program.heap = 0;
2 L; ~: |+ u& P0 eProgram.argSize = 100;  /* minimum size */
4 c9 A8 U' {, @& M* b: H( SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( P  n4 U. P5 @; l7 m5 [1 H! x  Z# P# o' }; W$ j" V# C; V7 a
/* create a default heap */* b" j5 o% K) P  P* G/ ]( ]7 Y; z4 W& B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# r- {: O8 a1 |# J! r  Kvar heapMemParams = new HeapMem.Params();& J& H/ }' u2 A. ^+ X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 C* l* @% l3 ]% i2 l. l  F# a6 }2 y5 K' ?, t
var Memory = xdc.useModule('xdc.runtime.Memory');
( ~  ?7 b% |- iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 ?5 d0 I' y4 {( ?0 z' W) S  p/ R
0 _/ {* x$ F9 Y) G! b0 D' }9 w
/* configure System module */
2 j7 i" a% t. U, ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
! i- K4 \. \- A" dSysMin.bufSize = 0x1000;( ]) l/ M, V% w8 A+ D
SysMin.flushAtExit = false;% g; D- f' ]" k5 r4 L% G

  o! L, X* U- b% f3 vvar System = xdc.useModule('xdc.runtime.System');2 k) P) C* \8 K/ e- ]9 ~& s
System.SupportProxy = SysMin;$ w6 T$ T" H. ~" z: |$ q, c
) X* h4 ]3 R5 c4 L' z! t! w
/* configure SysBios to use the lower half of Timer 1 */% g' f: {* M3 L& {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: r$ F* M# g% U( Z# Q. I/ x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' l+ V8 l: N$ W# [# m* r
Timer.timerSettings[1].master = true;
% G& a6 m+ `: B, l6 xTimer.defaultHalf = Timer.Half_LOWER;
2 ~) C+ O0 C$ w+ M, g% E  g/ CClock.timerId = 1;: D1 F* o/ d2 T/ {" }* P8 G
/ J  L) b  q1 f8 S  \! s
9 X- q1 N# \8 C. ~
/*6 [+ h9 E8 n$ h, m6 t. i( F5 A8 U
*  ======== Miscellaneous Configuration ========
4 O% c( w4 D5 E6 a; A+ Z8 Q& T( t */
" a7 E/ y  O( z; w3 C1 a+ |" m. \+ q6 z
/* set default diags mask */5 H4 U2 m: |5 v
var Diags = xdc.useModule('xdc.runtime.Diags');
+ j7 V; }2 x0 L/ y1 d3 qvar Defaults = xdc.useModule('xdc.runtime.Defaults');; Q! b/ u8 s  G: d  {

( b$ g1 j8 a" L+ C5 R! p  {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* N5 T" Z) i5 zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. A* B5 t$ y) S7 N; U/ M2 YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 V% e% P5 [- T, k7 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( j  g% K! P' r  x& uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, M9 P; b# ^7 K# q- b4 K! M4 l) V4 GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ v+ c6 a+ C- w; G+ N- aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 g$ q: a. g$ a" S( a5 Y- t0 P2 n( Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 S) G3 [4 z6 V7 I7 t; [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 y& I+ I- N9 t4 m, C; N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 ]! h- ]; T8 w
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 n- k: l& u; L8 T. t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" n  k; ?5 c: k# T) z! F# K0 w$ WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* h% y7 S' e; ~4 ?# U# i0 k
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 V" D; [7 L6 Z2 j( w. \. H: k
( L0 x/ S5 b/ c" n+ Q1 I9 Z/* override diags mask for selected modules */
6 p8 i, r) A, Z+ Q) I- V8 kxdc.useModule('xdc.runtime.Main');: _- D' I  i! E
Diags.setMaskMeta(
# F4 F% ^0 E7 @- S1 U# r+ _    "xdc.runtime.Main",
3 M  d$ d  g4 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; O. E& u5 ?1 t' r( g5 ~. L    Diags.RUNTIME_ON
  w0 X/ m, o6 j" L" @( k, |( F);
" F% X  M7 [. c3 @( W+ O+ F  W! c
8 z& m" s# l& Mvar Registry = xdc.useModule('xdc.runtime.Registry');6 e7 o! d( z. w$ A7 J* [  t, p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 P% ]0 [6 B4 }6 Y7 KRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. C5 f! Q2 l/ p5 b5 uRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ q7 x1 I! U4 T) z  V/ r6 _" t. N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ Q' O. ^" _$ }4 Q
% [, M5 K4 ~, T& G0 E/* create a logger instance */
4 Y+ K! z: I6 vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 n1 o% f6 `( G; J, T# g
var loggerBufP = new LoggerBuf.Params();
& i4 Q) _: z+ P1 N1 c& UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. T3 K, H) C2 Y7 g% M# a& o6 e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) z5 q: N% l2 @# X* t+ _! R8 A0 h- l: o, D; y3 q& O3 p
var appLogger = LoggerBuf.create(loggerBufP);
8 i6 K3 R3 M* B: r$ z& ^; H" e8 P" Z, HappLogger.instance.name = "AppLog_Core1";
: v' a3 _1 R  i* xDefaults.common$.logger = appLogger;
7 a- ^: G( b8 E) c8 j5 tMemory.defaultHeapSize = 0x8192;    * ?9 f$ s5 ~' d4 T
Idle.idleFxns[0] = "&LEDStatus";
  a7 f8 _" p+ ^0 n/ x! D: SCache.initSize.l2Size = Cache.L2Size_32K;
: q8 d8 Z, e2 ]4 }5 w, c) d. u* b5 `, D  c( g6 T3 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 */5 B9 C6 \; G1 Z; O* L( W8 u& N+ h7 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" Q" f: L$ }* c# }' @1 {# l0 h
var heapMemParams = new HeapMem.Params();
" a2 x" d5 ?7 W. e- m' _# jheapMemParams.size = 0x4000;
. L, T* r3 I, k3 N& C' a6 x2 J
/ s2 G5 |1 a: ^( R! ?  U4 Lvar Memory = xdc.useModule('xdc.runtime.Memory');; d9 c3 p3 F+ T7 k$ D) X/ j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 [( o) p* j* t( z
- Q: s7 H$ Z9 }我大约calloc  每次共计大小为5K*16bits,7 R4 V9 g0 v' Z& S+ s
而默认配置才0x4000、需要改大。
+ u( P, h; X& U' c' B
% i9 ~0 O9 x# G" O9 K0 k" Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, P/ V+ f+ y8 y2 Y) N! ]Program.heap = 0;  ]2 ]; Z3 r" F
Program.argSize = 100;  /* minimum size */" w- [% k+ p6 V3 ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 20:06 , Processed in 0.054420 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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