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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& Y+ D+ ^/ C6 g
- Q6 L3 ], B: ~1 F6 t" ?, W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 U  x0 l7 @' e
3 t% e1 T! i8 A9 z* z
其他程序段。。。。。
7 g: y+ T6 a" q& m* W1 d) f  D
; \6 D4 U, _0 ]$ m$ }   free(x_d);
0 q- S, [+ H9 }& x4 u- l4 F  Y' a5 P
1 v; E. J: Q4 g( H/ v使用DSP侧单独调试功能,验证动态申请没有问题,4 d1 x  c' f* R, X8 Y$ e, N

5 l/ _& o9 p9 g5 w2 N3 X但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 U" ^/ r6 x" Z6 m4 ^( g: p- R

* P  C. [2 v8 l6 ]  _: t1 r; D! C' k& g
3 m3 s5 Q! w. F" {6 J
( c4 U1 t1 G2 g  p0 z- }8 }

3 k8 i# j, L2 N! u  U, H$ ~5 b" _2 m* d; Q" \* J1 a. ^' P. E( n& i8 u

; G* Q5 H' f- Z& x; i$ ~3 P/ c% z, G+ R4 ~. Q0 j

; o9 ^4 a6 p  p' Y& K
, `4 O  m; P2 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 `0 M* y, A5 k. A, L0 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* G8 \: T9 S% a8 [/ R- h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 W2 f$ ?7 f, i3 C) q0 m

& d8 j8 o: }& l0 Q, {是不是需要在DSP.CFG中进行配置
8 [8 I" B6 V9 C2 f4 \我现在的配置为
# v0 b( v6 Z1 O  h
/ G8 z/ Y- s4 f8 N; |, w/*
3 Z5 {* b; l3 r( G  C3 i *  ======== Operating System Configuration ========( m9 L+ K0 C% Y/ O  s
*/
, j0 @& D! j$ D8 n
8 I6 Q9 i: D- F# E! L. {/* no rts heap */
/ O2 i9 F3 ~% ]0 O2 F! C$ LProgram.heap = 0;) }! f5 H4 y8 N- r
Program.argSize = 100;  /* minimum size */7 ]; o# F) v8 P, n9 K* n( z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* L# J3 |. A. F, b$ g% r, c4 P& n8 P4 k; Q+ F4 U
/* create a default heap */
: O) e$ Y* |- i2 n" Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 I9 b& _! [9 I- h/ n1 r
var heapMemParams = new HeapMem.Params();
0 B$ J* \- u6 }! o% Y& TheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) E1 m, `! M7 g( X5 @  t0 \, r# [3 Q/ Z) m; S2 C+ e( E  k
var Memory = xdc.useModule('xdc.runtime.Memory');
2 [: a4 _$ O; C. h: h4 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 y. m( [) B/ `: G6 G2 x( \5 g2 O! h% l% q$ c! t/ r2 ?
/* configure System module */4 a5 f  q) a1 B6 D7 |& b2 u
var SysMin = xdc.useModule('xdc.runtime.SysMin');" o# w& E' Z$ X/ h6 [+ H
SysMin.bufSize = 0x1000;: a, n6 O1 f6 H9 ~5 w
SysMin.flushAtExit = false;1 j8 J1 X, R6 r+ T. p% P
6 ?; f& d! m6 A# |
var System = xdc.useModule('xdc.runtime.System');3 M1 \* @, q' d( A: c: X$ W$ K0 U
System.SupportProxy = SysMin;
- c$ C7 m/ E1 H9 i9 k: p
  Q) \; {  [2 w; N2 v# i/* configure SysBios to use the lower half of Timer 1 */& Y8 L, Q- Z2 I* S5 G+ E+ z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ W9 ?8 @3 D$ j* K( `- f, s; e! A+ ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* ?: u$ c# X- t: O' J9 ETimer.timerSettings[1].master = true;# j1 b  q2 f. g3 B) A
Timer.defaultHalf = Timer.Half_LOWER;
- T- O! ?- g6 X- X" QClock.timerId = 1;* f8 |, q+ u9 y
; C3 C& j) Q; i
2 w% ~6 P: ^4 t' w9 Y! y
/*
2 d5 n$ y; v! F' \7 [7 M *  ======== Miscellaneous Configuration ========) T, D/ n/ \5 J# E) y- {, n
*/! o# |4 y- _. r2 _9 f3 L4 J

7 A  l& Y4 x7 ]( B/* set default diags mask */
  v1 ?: I& k3 d5 q5 zvar Diags = xdc.useModule('xdc.runtime.Diags');' ]' D2 m' D5 H) d' G3 q
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 i$ z. }! q- l8 X7 c6 X1 M7 Q$ W

9 r  X8 S2 Y6 H  O. @Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* @1 q* X- N# a5 N8 [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" T9 m3 a7 ?. g# t- n( h4 r8 C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) s5 |6 `4 Z4 b8 b+ s1 G/ y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 ~  p3 n) a* z9 _4 u4 t" F$ xDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 Z# E: K1 Z. \2 a1 v* ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ `7 U" @' ^( |$ b4 \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- [  r* u" @! b- G+ {, `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- R4 D* _. A* d% B- p1 i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" L* |2 o6 W$ W8 n, Z3 n& j
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) H$ e; m# J* n" y/ BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 s0 S  [9 K7 b( C5 jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% U  E$ x5 p7 }. Z# [" sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 |8 d: `' ~) z( l* `8 IDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) j8 I) D1 e8 P* D4 A% g' Q* R
8 @, ~" K, A+ F/* override diags mask for selected modules */
- ^) t, v5 O2 U; _" j+ Dxdc.useModule('xdc.runtime.Main');& R' ~8 I/ [* Y0 u/ @
Diags.setMaskMeta(  F+ k9 O9 r9 l9 |! a" L- o" Y
    "xdc.runtime.Main",: F) `' @2 m+ z2 p1 @4 R
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* q5 C2 M0 s$ J& w: k& y! \) e
    Diags.RUNTIME_ON9 X+ U. m) h8 V
);# p& U3 w* A: k! @

- L9 [6 `6 ]) V* R( kvar Registry = xdc.useModule('xdc.runtime.Registry');3 `! ?5 _+ a6 I; i9 R; F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 _- e3 K1 A/ E; ]+ M+ ~1 GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" i0 z: g$ }7 c0 I0 K: K+ |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; j# k3 ]$ T  L) `6 n4 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. _3 [. i/ f! C
) D8 F! O5 G( ^5 b, X5 \: ^, k2 m
/* create a logger instance */2 m0 |' m  S$ h. Y, h$ N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# Y( M- o* d* \) }) C# rvar loggerBufP = new LoggerBuf.Params();; @5 Q( s  j- J1 G* a& [4 x: H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) V5 p6 Y! X5 q7 m% ^3 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: O) S" U! [8 e. E" N  j6 c
. ~4 J2 ?) O+ Y; d$ avar appLogger = LoggerBuf.create(loggerBufP);  R, A+ E# s' A+ _
appLogger.instance.name = "AppLog_Core1";
! L' C/ W- c  ?2 Z$ zDefaults.common$.logger = appLogger;! s$ K1 N0 K% D& ?5 y+ Y2 O8 d, ~  P
Memory.defaultHeapSize = 0x8192;    " b1 S" q4 z- P2 |/ s: i' ?8 d& s* n  W
Idle.idleFxns[0] = "&LEDStatus";0 y8 r+ Y8 z/ e# k: [
Cache.initSize.l2Size = Cache.L2Size_32K;
8 E+ L! V" D' |- m$ r& ~4 o& V* q! G' l; A! e! y2 L) m
回复 支持 反对

使用道具 举报

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 */2 Y, {* Y& ~! V9 p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ l. }! U& x/ {% f. p, ^
var heapMemParams = new HeapMem.Params();( T$ M1 P& k7 t( W  D8 z; Z3 A
heapMemParams.size = 0x4000;
) E3 O; [! w, u5 s3 V- C, F; b7 n' \* k/ {  M6 [
var Memory = xdc.useModule('xdc.runtime.Memory');
. g* u+ Y8 r, q& P& M& E# TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 I) D; \8 }! d! j
. s5 \( g( G7 ?( O, u7 y/ G
我大约calloc  每次共计大小为5K*16bits,6 p1 K  ~# I! M. ]( I9 U% K! S4 g, x
而默认配置才0x4000、需要改大。$ L% o. t  r, E% _& u7 G$ r7 x; i

- M! ]% _, `9 Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ k7 v& f: |3 X# E. mProgram.heap = 0;
' `0 |8 W. t: T% lProgram.argSize = 100;  /* minimum size */3 x9 C7 `. n2 s4 g/ g2 P! X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 10:35 , Processed in 0.042724 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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