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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ c% N. X. p/ f1 x

+ V: b7 Z& U$ O5 @1 k7 C5 x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  n) e+ d% Y- j( {' o

& \( x5 u) s* n" ]' R) O其他程序段。。。。。
3 e& ?+ F" z2 P& l! t2 L
, O5 U: Z6 |( _+ m   free(x_d);
; p( Q1 w0 E5 B# u
# r0 c( Z: A4 m使用DSP侧单独调试功能,验证动态申请没有问题,, A: E- G+ ~' Q2 ]* }8 m" L4 G

! @0 ^  F( r0 Z' p- ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 u2 K7 k. T' N
' [! u4 G! f) H& L$ i1 m

* C  w  Z, E8 ]
1 k2 B% _, x! \3 o  _0 |4 A
0 Y/ c; M4 W* I, u0 H$ H
  ]: ~6 J" W9 k2 g5 M3 y# u
1 r  Q0 x+ w1 }- l
$ g1 P! ^- N) ~. `- ]& Y; x/ q5 G* p% }* I" {2 q6 F9 b

0 _: u$ M9 o0 H, N$ d6 }+ W
! X5 S8 J. e& i6 P5 U) p$ G- T' u
分享到:  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 */
- p5 X5 t9 @8 p" {4 RProgram.heap = 0;: V, o$ m  L  n% T2 w
Program.argSize = 100;  /* minimum size */
5 K: T, ^0 N1 e" @1 e$ t# ~Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* k1 i9 X' A6 {8 A$ t  d: l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- b  m6 r, t- _  u- O8 _
var heapMemParams = new HeapMem.Params();" m  [5 b' [/ [4 h5 q# ]! P' ?
heapMemParams.size = 0x4000;
  R2 f# q/ j6 X7 z1 w# W# @3 z5 h
, k. r+ f2 Q2 X* ]var Memory = xdc.useModule('xdc.runtime.Memory');
8 j" b5 \- B- \. ?' UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 T! l9 \+ e: _4 D1 O: ^
. ]6 p3 J! P! {6 w# D. v
我大约calloc  每次共计大小为5K*16bits,
& }/ R' F$ X5 a* F而默认配置才0x4000、需要改大。
, k% c; m% M' y' b" c4 G
- C+ u' B2 _+ }1 y' Y8 J
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明' o+ |0 n  W9 `7 O" _( J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 y" u/ Q) B3 x4 L3 h- a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): V: s+ p) C! l0 O! V

* X, x0 `9 f1 F. n! C/ S5 E是不是需要在DSP.CFG中进行配置
& q$ y) q4 P7 u, v我现在的配置为
$ O2 H, J# J) j* x/ m; z4 i  @: l7 U; f; v1 Q; x
/*  B* z; v- }1 ?* h
*  ======== Operating System Configuration ========, z" z& r5 {5 M% _. J5 e' F
*/
2 N; i* k. Y" N7 i  F
3 X5 U, C7 d7 _0 s( g/* no rts heap */; ?" r& O5 [9 r
Program.heap = 0;& m3 P# @2 `8 q. d; U
Program.argSize = 100;  /* minimum size */* H9 {' b0 Y  d! r5 |! D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  v! ^0 `: X. n4 b% f* q+ i- N4 u1 t9 |' O1 W- z4 ~8 o+ j
/* create a default heap */
/ {3 d& ~- r3 b* o1 K  B* n% mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ d+ p: b# M( a& D
var heapMemParams = new HeapMem.Params();
  Q4 m5 o" ^8 B& l, [( e3 R( dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; Y9 n2 ]9 a, j' J( Z2 l
: _5 q, m& X: M! ^% R
var Memory = xdc.useModule('xdc.runtime.Memory');
+ F3 j0 o; U$ F, c; R& ^( SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ z% K0 |* H2 _
$ {) I8 G* b4 Y/* configure System module */% \! r/ Z7 @4 h4 U, i$ n
var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 T1 M, r7 b+ J/ s6 ]4 nSysMin.bufSize = 0x1000;
$ w6 F1 z% E4 p$ h0 V! `SysMin.flushAtExit = false;  s1 J& I9 ^( n& d
; U) U( M; }: v2 {
var System = xdc.useModule('xdc.runtime.System');6 A9 V8 t6 [1 d, t
System.SupportProxy = SysMin;8 j6 V  a/ p: C( `( {1 M. Y
9 \1 k' _1 O3 d* l4 F8 [- D8 [& |1 ~
/* configure SysBios to use the lower half of Timer 1 */
7 i% V3 Z2 B7 I9 T% t. _var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. P# v! e4 ^6 V4 I# E5 S8 J) D9 l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 ]9 C* t; a! l7 ]$ _6 ~/ o9 [# Z  mTimer.timerSettings[1].master = true;3 J2 I; y- d* k5 k. X. n
Timer.defaultHalf = Timer.Half_LOWER;
# I: K. K. e+ O, S- l( z8 N# qClock.timerId = 1;7 k$ t0 u/ o, ^; w, G$ G) k' [

; K/ Y; M0 s* ^! F0 L
6 m& l" C- X- X! S/*
& D  |, B% q3 R7 N: Q *  ======== Miscellaneous Configuration ========
4 W8 i$ w5 ], [+ j! z9 [# _  T$ D( { */6 r0 ~1 a3 {  J2 t0 v4 O

  {3 X7 @) x* t) |& y5 ?! I! z/* set default diags mask */
# Z# r+ Q8 B. t2 `8 Bvar Diags = xdc.useModule('xdc.runtime.Diags');
% \( ]7 a! w) _$ Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
% o& s6 [) D% l" ?0 `$ ]% o
; ]. S! E- _5 c% ~6 o6 T; sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 b$ }% F( U) d/ u5 l; C, @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- ^1 s0 z. v/ i2 l" @! j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, F( ]0 T8 Y* ]. p- [4 h0 P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) a& D& O+ {* O8 V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 }4 Z# c) X% |1 a6 h
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" z9 L6 _9 R! P7 Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 T/ G# s2 q; z7 C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ Q7 s  z( k; p: i5 dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ Z+ k  T* d# G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& T- C) P3 c6 l4 L0 r; w' A/ gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 r# @8 w+ w1 _0 t) D) g" MDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 K( u0 H# H! o* j/ x/ BDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! F. ~% ^1 o) i. X2 V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 Y5 U# Y6 y/ [0 B& V7 I! q1 s" W, R

2 K! N! w, _7 C5 U/* override diags mask for selected modules */2 W/ I/ p3 t" q0 B/ j2 u" y
xdc.useModule('xdc.runtime.Main');; c# A( l+ }+ [2 A: f% q
Diags.setMaskMeta(4 a" p# k" M$ b' Q# i. Y4 O
    "xdc.runtime.Main",
" g# N4 [& Q2 V8 B+ c2 p5 }# |9 n    Diags.ENTRY | Diags.EXIT | Diags.INFO,& I' y# ~  T: b% F
    Diags.RUNTIME_ON7 K6 B; C+ _5 ~- D
);8 i" A7 n- Y. t, P  s  z

- H8 J( z5 C" T" S) \4 Uvar Registry = xdc.useModule('xdc.runtime.Registry');7 u' t) I  A* ~$ E2 J4 w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( G: N5 G3 j2 |* q; _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# U4 q" x+ I9 @* h# S7 ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ r6 _1 d( n) {% S2 Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 m( g) n+ \/ B; g! P& [
' x6 p: [/ J2 p/* create a logger instance */
& o# K* X# ^. S4 o$ Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! W; l" `& M9 K" Z) Z5 Y
var loggerBufP = new LoggerBuf.Params();9 C$ a$ C$ g# P6 Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 n2 V( |0 L( b+ W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' |. s$ a. ?1 X) ^0 k
5 O+ Y9 [' c, V! w5 ~7 [
var appLogger = LoggerBuf.create(loggerBufP);
3 V, ]9 N2 L, U' WappLogger.instance.name = "AppLog_Core1";
7 H- _2 Z, i% P: M: ^Defaults.common$.logger = appLogger;6 r  {# g% w9 d5 T: c3 X8 s" p) P
Memory.defaultHeapSize = 0x8192;   
: f" z/ y/ X: a# N+ q: xIdle.idleFxns[0] = "&LEDStatus";
& u. f( y( y1 q! [/ U6 ~Cache.initSize.l2Size = Cache.L2Size_32K;2 D: @8 ~: J( f+ K% h- I' n* ?6 I" R
) X4 Q% a$ ]3 V5 N% O- z4 A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-1 10:13 , Processed in 0.040063 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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