关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

2 r: B+ c: r4 M/ x; E2 Z1 _    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' z1 ~" j9 O% y& S

& X8 C. {! B9 S& k& c2 ?! A其他程序段。。。。。+ I; X; m7 h2 P: C1 e2 f1 P) N. ^

; Y% K, f+ x- M. t9 r   free(x_d);
* ~% J0 u' ^  I& i/ i# ~# W& N' L( h8 ~( V! H' I. E9 R! F, P: O
使用DSP侧单独调试功能,验证动态申请没有问题,
/ ^+ i0 L2 W7 t/ }" s7 @; T4 g
- J9 m5 j# D8 m) E0 s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 v, Z2 p2 t& m4 c; @/ U9 L

* y4 k4 I: F( ^
4 M- L' b4 |2 D7 C
, k. V7 i. G" w& w2 {
) f3 u7 P+ o: }2 ]8 _# F
( C' G7 `: \* i4 [! D4 r) [
+ z; C9 d' ~6 U
# ^- b3 D" Z$ T, ]( R% W5 m1 Q% y. F  }9 q" e6 e
. Z# G9 ]3 [; Q% E7 N% t8 Q
& T- {7 u+ g; {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, X& j$ \2 c% C2 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( a$ P' W$ B- j7 b$ i, ^+ b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): v9 X. ]! p: U  E+ ?3 j% l* D
' ]: x$ A2 m  S4 @7 E" H
是不是需要在DSP.CFG中进行配置3 k* f- y7 f4 F# g' e6 m
我现在的配置为# |: s& O1 ~# @, E

" X; m, R+ j2 R( K, D/*( q' P% r) s0 k
*  ======== Operating System Configuration ========$ s) q& ?6 ]( q% z3 G1 C# m# B
*/) L8 A% H$ ]$ k

0 l6 Q9 x9 W7 H; m; l/* no rts heap */: t3 g1 x' k) s1 C8 j+ [) E
Program.heap = 0;
, \. c8 a4 [& tProgram.argSize = 100;  /* minimum size */
5 E% f; Q: {0 O+ eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" d! j! R# R5 a, R' S9 m7 ?: d
5 z% r+ J( h: b) g
/* create a default heap */
2 a0 D, f$ g# F; V, J  x3 T% Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' M% W# {; J6 Y9 \# U3 gvar heapMemParams = new HeapMem.Params();- @1 J& f" Y6 R2 ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" O3 W* n4 Z; d6 ?

- v6 ?4 }# P* n' O; u- W/ R7 A8 W
var Memory = xdc.useModule('xdc.runtime.Memory');9 X, T' y: z' X4 u# m2 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& Z( ^4 S# o' p; Z* b8 {7 U) Y
0 S% H+ P+ X& R" V( ~* e* a5 q
/* configure System module */2 i5 V( H) ~! v. h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 J- q. y$ M. c9 X6 VSysMin.bufSize = 0x1000;
( ^, T& n" I, L/ b) q% RSysMin.flushAtExit = false;9 }' g2 n5 ^# {9 A
" U$ d7 |) B7 L1 }
var System = xdc.useModule('xdc.runtime.System');
3 `6 ^8 C3 ?5 \  i! jSystem.SupportProxy = SysMin;. Q. L! F$ W" o+ M0 l$ q
9 m4 J; I$ Y4 K% q0 R( p+ t
/* configure SysBios to use the lower half of Timer 1 */
- Z% ~1 z/ j* Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 [1 u- C( S7 g5 y0 Y4 A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: C1 I, k! Z+ Q5 ^% U4 Y
Timer.timerSettings[1].master = true;
1 l3 x9 T7 L6 ]+ A6 D! sTimer.defaultHalf = Timer.Half_LOWER;% ]% [) f' {/ X) K
Clock.timerId = 1;
: K$ O9 k/ B8 M& h9 x% @$ B0 [
) f6 W. n4 m8 h& a0 p' C8 ^9 k# v
/*
6 p7 X& C7 i: _2 u7 u *  ======== Miscellaneous Configuration ========
% ~0 x# [9 ?$ S  v  i3 w */4 {9 b9 C" I/ V) J7 W( J4 B

- q/ U7 M' T: E! _4 l9 r" A/* set default diags mask */
  |# A6 n8 z1 K. A& A5 Z! ?! W2 p$ Gvar Diags = xdc.useModule('xdc.runtime.Diags');
. ]5 c3 G/ N' V/ |- X/ ?var Defaults = xdc.useModule('xdc.runtime.Defaults');+ m8 _( M! H2 I9 `  h) e

1 q1 \5 I. B3 N$ v6 R  R' {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) G2 j1 g! s+ O4 t4 gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' l5 ?# W0 a) }" ]2 ^, a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 R! }( i' \$ d) S8 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) X: L' b* a# e3 ~( jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 A' |( d1 R3 r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- w$ z# n( @; v/ s& _' x! s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: _( A# @, c0 s- ^8 M/ J; v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 c; k: [, P. z6 {6 e5 X- kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. m+ U4 M; }2 C* D' \) W/ {0 H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( J+ P, k/ M$ G& ^. h1 L$ W& t- l& Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( T/ ~4 U& h( L5 e1 z# N2 K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  A; j8 E5 Q% U+ b6 _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ m, E* h/ g  W1 s: E+ n( A% e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 R1 r/ B- d) `5 I* D
4 u6 \. d. B) x5 h9 _
/* override diags mask for selected modules */
# C$ p- T( H/ [9 k  Exdc.useModule('xdc.runtime.Main');
0 W; M- b* @) O2 T8 S* g9 }Diags.setMaskMeta(/ n3 l& I/ k" W1 w, X4 h$ A
    "xdc.runtime.Main",' u; p  d1 }2 |$ z3 q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: A% z. M$ C8 m7 l) i( d0 v% ?    Diags.RUNTIME_ON
' |' l  L" y# ~: v+ h);
; }) @; f2 ]" e0 ~& \7 i1 s9 F0 [
" W$ E8 I- ^- N$ P! b4 y3 ]2 j# zvar Registry = xdc.useModule('xdc.runtime.Registry');
, }- S/ u, X3 w# j; F" R, MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; ~0 ]0 m5 O" {: p  n0 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 y8 v) n9 _, B! p# e: p) O6 j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 h" \, d5 _- y' A! KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( ]' I1 h' @9 H, P& P5 W6 W. l' I' K* h- S
/* create a logger instance */
5 l: t8 n, E$ k. Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 w4 Q" G* M" n  ^
var loggerBufP = new LoggerBuf.Params();" p! a5 E# l7 I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) P8 v& t0 o# L6 q" M3 e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 @* W6 y9 Z! P- u9 t0 i- q, G! w6 x8 M( b
var appLogger = LoggerBuf.create(loggerBufP);0 s+ j: V0 h% @1 X
appLogger.instance.name = "AppLog_Core1";
1 u& u$ ~$ N( K5 T8 j' rDefaults.common$.logger = appLogger;
0 ~: c9 j) W' J7 \Memory.defaultHeapSize = 0x8192;   
9 }9 q4 c# P$ ^# _- B3 @" {Idle.idleFxns[0] = "&LEDStatus";
$ m& V- C- f. T9 g3 o; _Cache.initSize.l2Size = Cache.L2Size_32K;6 q! ?; J0 F  l6 q5 p

, w2 J. k1 v& Y" I/ d8 q- G
回复 支持 反对

使用道具 举报

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 */; u" _7 u4 Z# S7 C4 x, R. `9 O& G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' F3 G+ J8 T6 q  Q
var heapMemParams = new HeapMem.Params();
2 F: N' Q5 D. [  T/ yheapMemParams.size = 0x4000;; Q& I; Z4 m$ O9 w8 v

9 @: c3 c- P9 G* B+ Ivar Memory = xdc.useModule('xdc.runtime.Memory');( u+ h8 ^* \& ~3 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. x8 _  W6 D, T5 Y6 r5 {8 X% k' H
& C5 F, E% }; s: w* Z3 I4 s- s8 z
我大约calloc  每次共计大小为5K*16bits,
) }/ ^- l% N& ~, Y而默认配置才0x4000、需要改大。
2 c3 j7 D& L5 \% u' |
2 D: I4 i9 f3 o, _8 X9 d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! `$ g! i4 L- N3 Z* W6 S
Program.heap = 0;9 K7 b4 E/ G6 m/ v4 }0 [
Program.argSize = 100;  /* minimum size */, K  W# B; O3 H9 w$ @! E
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 22:19 , Processed in 0.041875 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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