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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ [/ O7 [1 j5 X: ]  i0 M" z7 c$ P- ~0 t% R( \) e+ u+ E" c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! U" k* L7 }6 N, D) R+ p8 N( `' S4 A  @( d
其他程序段。。。。。: U  a; H" P$ Q, l: i

" c# z  G/ O5 m! j/ y   free(x_d);
. z8 y; O) o' J) M8 n
+ N# L& _' U9 t; p! G2 h  Y使用DSP侧单独调试功能,验证动态申请没有问题,+ V4 G; V+ r4 j# o$ g, M

' l9 S8 o# }. M' K; z" O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 ~5 ~5 K5 Q! \# i

; x% ~3 _+ X, g- |8 d! Y( ^# l( o
2 g0 b" x8 b5 l  ]; k: V/ o  B' t) L

' {0 p+ c' Q3 M; b. L0 u
3 E% J# m8 M: j( J6 D. [3 l/ V0 A$ P/ E7 B, J: l' j

1 d9 c# x0 q% w9 {' y; I; }& J
6 H% f% j) J# l7 B, @0 R9 _
2 u9 x# v3 K' g$ k! I; ]. F& G. x1 J
& G6 k2 i: r/ C: x) }- ^
分享到:  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 */
. |- C6 E( m- A# F# T; TProgram.heap = 0;
6 p1 M% |+ v# T; Q! V- E" z7 m( jProgram.argSize = 100;  /* minimum size */
+ ^  T2 [* X/ mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */9 t1 A" C/ R. Q; P6 U9 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% H# R8 O# S* t% V, l- q
var heapMemParams = new HeapMem.Params();7 B1 w6 l8 {+ V, D
heapMemParams.size = 0x4000;
$ D: ^1 e5 ?3 x$ K1 {
, K! C' a0 z" H' f2 z, o9 B, evar Memory = xdc.useModule('xdc.runtime.Memory');
/ @- ]. J/ S' U( W2 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. o5 K! V" T; u" Y4 M
( J# R6 y$ J; r  u
我大约calloc  每次共计大小为5K*16bits,
9 K% b+ D& \5 a" I  E而默认配置才0x4000、需要改大。" m2 m' v5 e4 ~; A

* H* q8 U: Q+ n- W
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
4 l. D/ E  S# a8 ^+ }9 b3 {7 S# W6 j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 [4 K( H4 C) o% k, t9 K# c9 J(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" N# O% E" u0 L: u

  j9 R# S- k% S# b9 V; q是不是需要在DSP.CFG中进行配置" b/ d: g+ b0 k
我现在的配置为
9 Q" \+ Y9 Q2 }6 Q# P4 ~. F2 I' Q/ i; N! o
/*0 b7 K$ l) U5 }. F3 w
*  ======== Operating System Configuration ========
& Z% s+ D8 h' F5 H3 j */
! B* v" l0 \1 b% v" p6 P. P5 i% ]. ~0 Y; I) o  _; l0 W
/* no rts heap */0 s, N! i& |, W4 T" E( w6 a& p
Program.heap = 0;
" j, `% m& _, C0 TProgram.argSize = 100;  /* minimum size */$ h# c- K/ Y1 k7 Y) W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ J, N9 W& H9 K+ r2 A

4 L. I- q. D# W$ p0 k5 a& |/* create a default heap */, {& y4 z! E6 W7 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, ^: U' g% u$ P1 N1 Z9 N
var heapMemParams = new HeapMem.Params();
$ \3 m2 l; C& g/ ~6 _: `  mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. f" N2 j/ @+ W# B$ M5 j! ~$ j- k7 `* }0 W8 b- n. ^9 b
var Memory = xdc.useModule('xdc.runtime.Memory');
' i% S- e$ u- i/ g/ cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 v4 Q; v+ t/ A' `- a& D2 ]$ G# b
/* configure System module */
6 H& D: _3 T6 D& ^+ avar SysMin = xdc.useModule('xdc.runtime.SysMin');
) R$ ]; Z* `% OSysMin.bufSize = 0x1000;& B8 ^% [% f1 W4 y% |
SysMin.flushAtExit = false;+ T) {- E# m: {5 U" N# Z+ M

- X: X0 n# [" Cvar System = xdc.useModule('xdc.runtime.System');
" b+ ^* @7 x4 fSystem.SupportProxy = SysMin;
! Q6 e. g6 T4 G: F! ^: G- p& V
3 K( C) b) x6 {5 j/* configure SysBios to use the lower half of Timer 1 */6 r* d: A; f! ^1 y1 X# g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: c' }  J3 @2 i# k% N' kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- a: o) r6 g0 i+ m
Timer.timerSettings[1].master = true;
/ f0 C/ `8 k' _# B( A" Y& w4 VTimer.defaultHalf = Timer.Half_LOWER;
/ ~* i4 R$ N" G; B% dClock.timerId = 1;
7 X7 a" n* B% \2 O5 K
  \2 e1 W* F& P6 t2 T' M9 z7 t- p; G5 h
/*4 d) A  a. e+ G- E5 F, u
*  ======== Miscellaneous Configuration ========2 [) b- U( r+ j0 I+ c: B0 }
*/
1 [% q  n8 x: H, Z+ k1 L9 [# H5 y4 L% ~" m
/* set default diags mask */9 {- u/ D& l' u) \$ X
var Diags = xdc.useModule('xdc.runtime.Diags');0 l+ V) N3 c# k* x$ a7 m5 b
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 `% O8 @  e! P% k! ^  u8 H- D
( {( e: g) m* _! I( S8 a/ _
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; C+ K- e7 f% [, b2 I
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- @& g, L# ~4 H: uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ x% a# A% y) h9 M
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 P* O* b+ ^) v2 r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! R; o9 b; p6 C& L, \7 m& ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% ?" y# K* o3 d4 Q: w+ ]: W' ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ N+ D  i' u' B8 MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 c  k6 T4 t5 r0 k3 i3 h8 uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 G" W4 E4 J8 V8 d9 FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 ~% W* J1 i6 ]) c6 sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 f$ w- ^9 I5 p
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* p+ W" p" \3 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 j; g2 p% c& z" FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. e' ~: r8 P' G6 u+ S; i
& l! ~' R8 x% K
/* override diags mask for selected modules */
$ E4 @7 P$ N. i. w- zxdc.useModule('xdc.runtime.Main');% E8 u! ~2 V- \
Diags.setMaskMeta(
  _% u, x  _( m6 z% R    "xdc.runtime.Main",; s9 O( `" x8 L) \1 H/ Z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 j4 @, b4 H1 I9 J    Diags.RUNTIME_ON- Z9 V- E% `5 e
);
: A6 U- y( ]7 A) {$ a& X- n* ]. X% Q2 r3 g1 l: y) O  e; X
var Registry = xdc.useModule('xdc.runtime.Registry');6 M5 Q5 R+ r4 l" ~. \; N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  x9 q6 N; l) H$ _: i: @7 _4 }* o3 c1 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 k+ w8 W1 o% {& Z  C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* ~& `, O# y" n0 H
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 Z2 d9 F  B+ l
3 Z6 W/ U( q3 j: ^/ p( e4 B
/* create a logger instance */5 [. B; r( b4 M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 s; f8 ^/ V7 d  x& [: i) L. vvar loggerBufP = new LoggerBuf.Params();
0 T/ H) G, E, Q: YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 E, m9 G* b9 W$ J6 uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 M( o( F( N/ c- }. J& v
+ h1 C$ Q: y9 L6 P# @  y$ kvar appLogger = LoggerBuf.create(loggerBufP);$ A) W. o( @* y1 b2 @
appLogger.instance.name = "AppLog_Core1";
6 `) R4 g7 m+ X; j1 ~) @1 fDefaults.common$.logger = appLogger;
/ ]4 g" ]( C! A! O0 EMemory.defaultHeapSize = 0x8192;    ! q, T, h; O- P5 D0 I6 Y7 V
Idle.idleFxns[0] = "&LEDStatus";
" S0 V( S) t& }; |Cache.initSize.l2Size = Cache.L2Size_32K;. M) b: u0 X" M0 f6 d, M( [
7 V- y  y8 p7 R" d) [
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 13:44 , Processed in 0.046252 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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