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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' z, o! b* @( h3 L' Q+ |; q0 r$ D- H3 m4 ?# u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; d7 O3 b: I, k% s$ m8 e5 k# ?
, f3 J0 ]$ ^* F; p, C
其他程序段。。。。。
5 I& M5 J* \! c& d4 s
; ?7 ~9 W: @5 i   free(x_d);; N  B7 R' }6 `, p# A( p
6 U. g) ~( a& [# A4 G, i$ k
使用DSP侧单独调试功能,验证动态申请没有问题,
/ W7 `2 L8 d% o2 C; v5 X4 j
. l5 c) X0 z+ N3 s1 \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' J; W, A  b& G. T6 o
, n/ ~( {- K$ t7 C
4 R4 ]: I6 c* K& }8 T" M6 i/ f4 z
- R. {! M8 B* {  X' P

9 H( w& a# `0 w* _3 _# ^* N3 N, {! I
9 G2 |2 u, B  j' p% W$ s+ R  d$ e! o0 E) b8 `) D1 {) x$ m6 ?

. `# ]6 r' ~( u& n7 n2 @$ c3 ^4 H. r5 k, t6 A$ o* ^
$ X0 S* k9 r& i& N$ j: t: ]
, i- j' ?/ D3 q# q; r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( C; U/ V! t- f% f/ cProgram.heap = 0;( e- e% H& q- @# V  q$ `
Program.argSize = 100;  /* minimum size */
8 A+ X# ?6 |$ bProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 w. X$ o. w( ?( h1 _6 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" s( d# j6 o3 }2 k
var heapMemParams = new HeapMem.Params();
* W% i0 v5 z2 j: x1 _) `heapMemParams.size = 0x4000;
9 |0 J: _8 Z( v8 |( m# s+ E" ]; ]6 l9 B. J
var Memory = xdc.useModule('xdc.runtime.Memory');
" J' {4 j: _  |  T9 e4 y% lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 Y6 _* f( f. X# D% T8 a6 v/ k9 i1 A8 M; ]
我大约calloc  每次共计大小为5K*16bits,& F# b* a8 `7 A/ u  z4 G
而默认配置才0x4000、需要改大。
( V  ?/ l9 y; F8 A2 J6 U6 q% I% S/ Q% s4 T9 U0 b# O- [1 Z0 B+ W* B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  A+ R8 H% @& s! L! d& H% b我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; q+ N" D5 t. k" s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 n: C9 s* v8 D$ X6 d& [9 A
/ ^0 F* Z/ R6 y' S, J
是不是需要在DSP.CFG中进行配置
9 B& T, L* s% O. ~3 v$ ]我现在的配置为
9 A* P4 W$ E  B" k4 m6 c  C2 P& L% r$ q2 X& w% o, F* f5 p4 F4 K4 B
/*
: X# ?7 L4 e7 }6 _" ] *  ======== Operating System Configuration ========
; T) H% S2 `6 F) D$ ^ */4 G; I' U) M& g( R# _2 c# N
+ F. c" D4 {3 [) u
/* no rts heap */
; k) t* x# c, P  SProgram.heap = 0;
8 X8 f6 o1 l; w7 j& y& [% SProgram.argSize = 100;  /* minimum size */- [* ]  d2 p+ I: u/ e- u  U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) {! S% ~, S: q  t. z

# z- J3 \/ n  E" I  R1 D" ^/* create a default heap */# M7 `: x. [' \- X. v0 g, V( g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( {" o$ A4 T: J4 Ovar heapMemParams = new HeapMem.Params();
8 G- g: q/ e9 j$ Q% I0 }0 v6 O- JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 @% }! T6 h4 D: @; z
/ {0 _2 X/ Y& {0 O6 e1 S4 k
var Memory = xdc.useModule('xdc.runtime.Memory');
% w' M6 A- A* g  E0 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. H3 g" G. c! W. c5 F6 K$ o4 V: {+ P) c0 z
/* configure System module */) U. _- v. G& z2 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) n) }- H1 C* uSysMin.bufSize = 0x1000;, u; ^/ y* W: c% X! v
SysMin.flushAtExit = false;
, ^% d3 S- {2 L
! z: o3 x, E/ i. H  [" i! t0 \var System = xdc.useModule('xdc.runtime.System');4 L! F' Y% w* X
System.SupportProxy = SysMin;7 h/ R' D" m) \2 [+ F2 V6 n
* R6 P# l0 p) m0 o- I
/* configure SysBios to use the lower half of Timer 1 */
' ^2 E7 O( R; ^- f6 H5 r% E) Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, \/ V4 Z7 O) [! H; A3 x  avar Clock = xdc.useModule('ti.sysbios.knl.Clock');& \. [  M7 C' q; \3 k0 B6 b! y/ m
Timer.timerSettings[1].master = true;- i& _; _  [* \: w
Timer.defaultHalf = Timer.Half_LOWER;7 N) w2 X; {4 b6 S
Clock.timerId = 1;
, p- Y2 r) a3 p* f, Y1 l* d) H
% z. j5 }: ^) z$ f
6 A  j, y  _! v/*
: b- b& u7 o; S! Z *  ======== Miscellaneous Configuration ========- J& a7 I1 b& e- r$ r# E, Y
*/
8 ?, _7 o& K# A' x8 B1 G$ ~6 B5 Q+ i
/* set default diags mask */* C1 u& V3 P: U3 ~
var Diags = xdc.useModule('xdc.runtime.Diags');6 k0 C# r( ]$ ^; a7 h+ e) n
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 d: X. t9 w) \' w% c0 ]

5 y+ t" e0 }. U8 QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
- l. s0 v2 A' \: t9 x8 aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ i8 a* n; R7 S& o6 A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! [; h3 s# z# F6 [8 [# B6 O9 t" M1 p) DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; w. M9 ?0 K3 N; E/ ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* ]8 o! w3 h6 I% S9 Y3 A5 ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& Z" U7 N- ~0 n8 h" a$ K8 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& R4 N" h( U( c& B7 W& v1 {' ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 w7 Z+ i( j; C6 Y5 A
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 k3 N& P% i' n, _9 t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  h: j/ B/ q! M4 x8 g& ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 @3 n& {5 Z, i& W8 P. ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) e2 V& E# g: ?0 H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( y2 \9 O* G8 |$ X0 w% a2 T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 ]: ]0 H$ T( I8 f6 |9 e) w
/ T6 T) Z! m5 D7 I
/* override diags mask for selected modules */6 J6 z. ?3 u- d( T; G" u( {
xdc.useModule('xdc.runtime.Main');
- U4 @, p2 U! uDiags.setMaskMeta(
  q7 H- L# A& y' c* |    "xdc.runtime.Main",% a9 d4 f6 w5 ]) g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, u; b' c5 u, B1 }3 g0 X
    Diags.RUNTIME_ON) g8 T/ H: b9 V/ }& R0 ^) ~
);
, Q/ b, v. w" q" Z: z
& M9 E' X9 n$ Bvar Registry = xdc.useModule('xdc.runtime.Registry');3 ^9 ^3 }1 x2 S+ i
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, z0 z1 t, q, k  D9 f" ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& P* i( M& g; A  H3 o$ b. R& P
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; e. @4 p" K( j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! B' p2 o; g" c' R7 D/ p

8 C# ]2 [' Z* ~  Z/ s' Q/* create a logger instance */  E: ]8 p8 Z. i6 n! P2 E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; s& s. u$ d/ Y- u
var loggerBufP = new LoggerBuf.Params();
4 p; o7 ^+ Q- UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 A4 H4 N9 i, [3 `- u( B* ~
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 H, R5 m/ p  s; [% P- Z
: y3 k$ Q$ t- U: d( C% nvar appLogger = LoggerBuf.create(loggerBufP);; z, M" U1 A7 i3 T; T9 s4 ?
appLogger.instance.name = "AppLog_Core1";
2 N& \7 y/ G$ _+ m& Z- fDefaults.common$.logger = appLogger;/ p1 ]+ i- ~. ^; W
Memory.defaultHeapSize = 0x8192;    $ u! I1 q+ N$ W: s
Idle.idleFxns[0] = "&LEDStatus";& Q- D) V/ X) a! p: ]  I
Cache.initSize.l2Size = Cache.L2Size_32K;  p" d1 Q4 D5 @6 ~% J, w5 j2 [  u
5 p* y$ P) B! X1 `3 C7 T5 N
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-10 15:48 , Processed in 0.064427 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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